记录 MapReduce 作业的标准做法
Standard practices for logging in MapReduce jobs
我正在尝试寻找登录 MapReduce 作业的最佳方法。我在我的其他 Java 应用程序中使用带有 log4j appender 的 slf4j,但是由于 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>
而如果您使用的是 mapreduce v1,则无法从命令行进行单点访问;因此,您必须登录到每个 TaskTracker 并查看通常在 ${hadoop.log.dir}/userlogs
中指定的配置路径 /var/log/hadoop/userlogs/attempt_<job_id>/syslog
包含 log4j 输出。
添加到@Ashrith 的回答:您可以通过 JobTracker GUI 查看各个任务跟踪器日志。 JT Gui 可以看到 运行 任务尝试,您可以单击以下任何一项:stderr、stdout 和系统日志。系统日志是您找到 log4j 输出的地方。
我正在尝试寻找登录 MapReduce 作业的最佳方法。我在我的其他 Java 应用程序中使用带有 log4j appender 的 slf4j,但是由于 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>
而如果您使用的是 mapreduce v1,则无法从命令行进行单点访问;因此,您必须登录到每个 TaskTracker 并查看通常在 ${hadoop.log.dir}/userlogs
中指定的配置路径 /var/log/hadoop/userlogs/attempt_<job_id>/syslog
包含 log4j 输出。
添加到@Ashrith 的回答:您可以通过 JobTracker GUI 查看各个任务跟踪器日志。 JT Gui 可以看到 运行 任务尝试,您可以单击以下任何一项:stderr、stdout 和系统日志。系统日志是您找到 log4j 输出的地方。