设为首页 收藏本站
查看: 1192|回复: 0

[经验分享] [转载]Hadoop 2.X 日志文件和MapReduce的log文件研究心得

[复制链接]

尚未签到

发表于 2017-12-18 14:15:35 | 显示全部楼层 |阅读模式
  之前一直不清楚MapReduce阶段System.out打印到哪儿去了。现在知道了,任务分发了节点后,是无法再客户端窗口查看的。要想查看,需要打开默认关闭的JobHistoryServer进程。存放在每个节点的Hadoop安装目录/logs/userlogs/…在Web UI中也能查看。下面是转载的学习笔记。
  转载自《http://blog.csdn.net/infovisthinker/article/details/45370089》,补充资料:《http://dongxicheng.org/mapreduce-nextgen/hadoop-logs-placement/和《http://blog.csdn.net/uniquechao/article/details/26449761》
  补充配置 mapred-site.xml
  

<property>  <name>mapreduce.jobhistory.address</name>
  <value>master:10020</value>
  
</property>
  
<property>
  <name>mapreduce.jobhistory.webapp.address</name>
  <value>master:19888</value>
  
</property>
  
<property>
  <name>mapreduce.jobhistory.intermediate-done-dir</name>
  <value>${yarn.app.mapreduce.am.staging-        dir}/history/done_intermediate</value>
  
</property>
  
<property>
  <name>mapreduce.jobhistory.done-dir</name>
  <value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
  
</property>
  

  yarn-site.xml
  

<property>  
<name>yarn.log-aggregation-enable</name>
  
<value>true</value>
  
<description>Configuration to enable or disable log aggregation</description>
  
</property>
  
<property>
  
<name>yarn.app.mapreduce.am.staging-dir</name>
  
<value>/tmp/hadoop-yarn/staging</value>
  
</property>
  

  
<property>
  
<name>yarn.nodemanager.remote-app-log-dir</name>
  
<value>/tmp/hadoop-yarn/aggrelogs</value>
  
</property>
  
<property>
  
<name>yarn.log-aggregation.retain-seconds</name>
  
<value>259200</value>
  
</property>
  
<property>
  
<name>yarn.log-aggregation.retain-check-interval-seconds</name>
  
<value>3600</value>
  
</property>
  

  Hadoop 2.6包含两个大部分:DFS和Yarn,而Yarn里面又包含在Resource Manager的JVM中运行的部分和在Node Manager里面运行的JVM部分。所以整个系统(不考虑加装ZooKeeper的HA的情况)的log是分别放在3个log里面的。
  1. 对于DFS的log,在Name Node和Data Node里面,默认可以在${HADOOP_INSTALL}/logs里面看到。这个是非DFS的文件,直接可以通过Linux文件系统看到。
  2. 对于Yarn的log,在Resource Manager和Node Manager里面,默认可以在${HADOOP_INSTALL}/logs里面看到。这个也是非DFS的文件,直接可以通过Linux文件系统看到。
  3. 对于MapReduce任务的log,情况就比较的复杂了。在2.6里面,task是按照application->container的层次来管理的,所以在Name Node机器上运行mapreduce程序的时候,在console里面看到的log都可以通过在相应的data node/node manager里面的${HADOOP_INSTALL}/logs/userlogs下面找到。这个部分也是非DFS文件,直接可以通过Linux文件系统看到。这些log也可以通过Hadoop Web管理页面看到,比较方便。
  网络上搜来的信息基本都是关于上面这些部分的。可对于一个开发人员而言,上面这些log对于调试程序的帮助就不大了。Java程序员会经常要用System.out/err来输出中间内容到standard output,而且工业界早就用logger来记录系统状态和帮助调试了。那么我们在mapreduce程序体里面怎么来得到这些log哪。
  首先讲讲System.out的输出,这个网络上的介绍还算详细。基本来说在main方法里面的部分都可以在console上输出。这一点不管是在Eclipse里面通过插件链接DFS运行on MapReduce的时候,还是直接在namenode上跑jar包,都可以看的到。直接编程读写DFS的程序也能够通过这个方法来看到中间结果和调试程序。而上面也说了,因为这个task的部分是运行在resource manager的启动的JVM里面(这个部分不是很确定,也许是单独启动的一个JVM),所以System.out的输出可以看到。而一旦程序进入Mapper和Reducer的部分,这个时候,任务是分发到datanode的机器里面跑,那里的JVM的输出就不会再返回到task的JVM了,所以在Mapper和Reducer里面的System.out输出是无法看到的。
  那么这个时候怎么来写log哪?网络搜索的结果基本给了3个方法:1. 用log4j来生成logger;2. 用apache common里面的LogFactory生成logger;3. 用MultipleOutput来自己写log输出。1和2本质是一样的,只是调用现成的Logger类。3是要自己管理log文件的生成和输出,灵活但是很累。
  现在最关键的问题来了。我用Log4j或者LogFactory的Logger输出的log文件在哪里?搜了一天,基本讲的都语焉不详,特别是针对Hadoop 2.6的,没有找到。综合了几个帖子,终于发现了问题所在。为了能看到Logger输出的内容,需要做如下几件事:
  1. 在启动Hadoop集群的时候,除了start-yarn.sh和start-dfs.sh,还要启动historyserver,命令是
  mr-jobhistory-daemon.sh start historyserver  
  mr-jobhistory-daemon.sh命令是在${HADOOP_INSTALL}/sbin/目录下面。启动完了,用jps命令可以看到有JobHistoryServer的进程启动。启动了HistoryServer后,就可以看到Tracking URL里面的History了。 DSC0000.jpg
  还能在Hadoop Web管理界面里看到每个Job的历史Map和Reduce任务,以及每个任务所在的datanode。
DSC0001.jpg

  点击Maps和Reduces后面的数字link,就能看到每个任务运行的情况。
DSC0002.jpg

  但是当去点击log的链接的时候,会碰到Aggregation function is not enabled错误。为了能看到每个Map和Reduce任务的Log,还必须在yarn-site.xml里面配置aggregation为true。
  

  <property>  <name>yarn.log-aggregation-enable</name>
  <value>true</value>
  <description>Configuration to enable or disable log aggregation</description>
  </property>
  

  然后将yarn-site.xml同步到所有的节点,在重启集群。这个时候再点击上面那个logs链接,就可以看到每个任务的log了,而Logger们输出的内容也在里面!!
DSC0003.jpg

  到了这里,就只剩下一个问题了。这个log文件在哪里?查看yarn-site.xml后终于发现了MapReduce任务的log的位置。
  

<property>  <name>yarn.nodemanager.remote-app-log-dir</name>
  <value>/logs</value>
  <description>HDFS directory where the application logs are moved on application completion. Need to set appropriate permissions. Only applicable if log-aggregation is enabled. The default value is "/logs" or "/tmp/logs" </description>
  </property>
  

  注意红色字的部分,这里清楚的指明了这个log是存放在HDFS文件系统里面的,不是放在Linux文件系统里面的。在hdfs://namenode/logs/hadoop/logs里面,终于发现了每个任务对应的log文件夹。每个任务文件夹里有两个文件。分别对应的Map任务和Reduce任务。
  

[hadoop@SXV2V999 ~]$ hdfs dfs -ls hdfs://namenode/logs/hadoop/logs/application_1430285399789_0001
  
15/04/29 23:02:01 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java>  
Found 2 items  
  
-rw-r-----   2 hadoop supergroup      58369 2015-04-29 13:32 hdfs://namenode/logs/hadoop/logs/application_1430285399789_0001/<strong><em>hostname</em></strong>_39575  
  
-rw-r-----   2 hadoop supergroup     399834 2015-04-29 13:32 hdfs://namenode/logs/hadoop/logs/application_1430285399789_0001/<strong><em>hostname</em></strong>_54053
  

  hostname部分是对应的datanode的hostname。
  在Web页面里显示的也就是从这两个文件里读取并排版的。自此每个log文件的具体位置终于水落石出。
  个人心得,有错误和不全面的地方欢迎拍砖。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-425401-1-1.html 上篇帖子: Hadoop的安装与配置(虚拟机中的伪分布模式) 下篇帖子: Hadoop MapReduce编程 API入门系列之薪水统计(三十一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表