AWS EMR MapReduce作业日志转至stdout或syslog的方法咨询
在AWS EMR上将MapReduce作业日志从stderr转移到stdout或syslog的方法
转移至stdout的方案
- 修改作业代码:如果是自定义Map/Reduce任务,直接将代码中输出到
System.err的语句替换为System.out。例如Java作业里,把System.err.println("日志内容")改成System.out.println("日志内容")。 - 调整YARN配置:
- 编辑集群的
yarn-site.xml文件,确认yarn.nodemanager.log-aggregation-enable设置为true(EMR默认已开启)。 - 添加或修改以下参数,指定Map/Reduce任务的日志输出级别到stdout:
<property> <name>mapreduce.map.log.level</name> <value>INFO,stdout</value> </property> <property> <name>mapreduce.reduce.log.level</name> <value>INFO,stdout</value> </property> - 重启YARN服务生效:
sudo stop yarn && sudo start yarn
- 编辑集群的
转移至syslog的方案
- 通过rsyslog转发YARN日志:
- 在集群每个节点上编辑
/etc/rsyslog.conf,添加监控YARN日志文件的规则(以NodeManager日志为例):$InputFileName /var/log/hadoop-yarn/yarn/yarn-nodemanager.log $InputFileTag yarn-nodemanager: $InputFileStateFile stat-yarn-nodemanager $InputFileSeverity info $InputFileFacility local0 $InputRunFileMonitor - 重启rsyslog服务:
sudo service rsyslog restart
- 在集群每个节点上编辑
- 配置日志框架输出到syslog:
如果作业使用log4j等日志框架,修改对应的配置文件(如log4j.properties),添加syslog输出端:
将该配置文件分发到所有任务节点的log4j.rootLogger=INFO, syslog log4j.appender.syslog=org.apache.log4j.net.SyslogAppender log4j.appender.syslog.SyslogHost=localhost log4j.appender.syslog.Facility=LOCAL0 log4j.appender.syslog.layout=org.apache.log4j.PatternLayout log4j.appender.syslog.layout.ConversionPattern=%d{ISO8601} %p %c: %m%nhadoop-conf目录下,重启MapReduce服务生效。
内容的提问来源于stack exchange,提问作者Stefan Ss
相关产品推荐
相关产品推荐

