作者:川川shilohjr_993 | 来源:互联网 | 2023-05-25 12:04
我正在尝试找到登录MapReduce作业的最佳方法.我在其他Java应用程序中使用slf4j和log4j appender,但由于MapReduce作业在集群中以分布式方式运行,我不知道应该在哪里设置日志文件位置,因为它是一个访问受限的共享集群特权.
是否有任何标准做法用于登录MapReduce作业,因此您可以在作业完成后轻松查看群集中的日志?
1> Ashrith..:
您可以使用log4j,它是hadoop使用的默认日志记录框架.因此,从MapReduce应用程序中,您可以执行以下操作:
import org.apache.log4j.Logger;
// other imports omitted
public class SampleMapper extends Mapper {
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 logger将事件记录到继承的Mapper记录器.所有日志事件都将记录到各自的任务日志中.您可以从JobTracker(MRv1)/ ResourceManager(MRv2)网页访问任务日志.
如果你正在使用纱线,则可以使用以下命令从命令行访问应用程序日志:
yarn logs -applicationId
如果您使用mapreduce v1,则命令行没有单点访问; 因此,您必须登录每个TaskTracker并查看通常/var/log/hadoop/userlogs/attempt_/syslog
在${hadoop.log.dir}/userlogs
包含log4j输出中指定的配置路径.