gpt4 book ai didi

java - 记录 MapReduce 作业的标准做法

转载 作者:可可西里 更新时间:2023-11-01 14:18:47 28 4
gpt4 key购买 nike

我正在尝试寻找记录 MapReduce 作业的最佳方法。我在我的其他 Java 应用程序中使用 slf4j 和 log4j appender,但是由于 MapReduce 作业以分布式方式在集群中运行,我不知道应该在哪里设置日志文件位置,因为它是一个访问受限的共享集群特权。

是否有记录 MapReduce 作业的任何标准做法,以便您可以在作业完成后轻松查看整个集群的日志?

最佳答案

您可以使用 log4j,它是 hadoop 使用的默认日志记录框架。因此,在您的 MapReduce 应用程序中,您可以执行如下操作:

import org.apache.log4j.Logger;
// other imports omitted

public class SampleMapper extends Mapper<LongWritable, Text, Text, Text> {
private Logger logger = Logger.getLogger(SampleMapper.class);

@Override
protected void setup(Context context) {
logger.info("Initializing NoSQL Connection.")
try {
// logic for connecting to NoSQL - ommitted
} catch (Exception ex) {
logger.error(ex.getMessage());
}
}

@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
// mapper code ommitted
}
}

此示例代码将使用 log4j 记录器将事件记录到继承的 Mapper 记录器。所有日志事件都将记录到它们各自的任务日志中。您可以从 JobTracker(MRv1)/ResourceManager(MRv2) 网页访问任务日志。

如果您使用的是 yarn,您可以使用以下命令从命令行访问应用程序日志:

yarn logs -applicationId <application_id>

如果您使用的是 ma​​preduce v1,则无法通过命令行进行单点访问;因此你必须登录到每个 TaskTracker 并查看配置的路径一般 /var/log/hadoop/userlogs/attempt_<job_id>/syslog${hadoop.log.dir}/userlogs 中指定包含 log4j 输出。

关于java - 记录 MapReduce 作业的标准做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28119423/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com