分享

Hadoop必看: Hadoop yarn log简单分析

问题导读:
1、查看日志,可以用哪些方法?


2、如何查看nodemanager的日志?
3、windows的日志查不出来,怎么在Linux上查找?





测试环境:CDH5.0(Hadoop2.3)
使用windows提交任务到linux Hadoop平台,出现错误,想去看看日志,但是发现没有找到日志,所以就在linux Hadoop平台所在的机器使用命令行运行任务,再次查看日志,对比两个任务可能的日志,以此来分析。
首先是页面:
报错任务的页面(报错的任务就称为任务1,运行成功的任务就称为任务2):
图1
11.jpg


任务2的页面:
图2
22.jpg


图1中点击2(History)连接,发现还是在原始连接;而图3的History链接点击后就会出现2的页面。如果在图3中直接点击log,那么会出现log找不到的错误(在图2中点击则没有问题)。
图3
33.jpg


通过上面的对比,可以发现图1和图3的url链接是对应的,但是图1点击History还是链接会图1页面,图3却可以连接到图2界面。
在图1和图3中直接点击log,会出现log找不到的错误,一般如下:
图4
44.jpg



在图2中点击log查看日志:
图5
55.jpg


对比图4和图5,发现其URL的前缀是不一样的,一个是直接container一个是jobHistory。
接着看nodemanager的日志:
首先是任务1的日志(只截取了关键的log):

  1. -- 删除本地目录临时log  
  2. 2014-05-28 17:32:23,584 INFO org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor: Deleting absolute path : /var/lib/hadoop-yarn/cache/yarn/nm-local-dir/usercache/Administrator/appcache/application_1401177251807_0034  
  3. -- 上传到HDFS   
  4. 2014-05-28 17:32:23,586 INFO org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.AppLogAggregatorImpl: Starting aggregate log-file for app application_1401177251807_0034 at /var/log/hadoop-yarn/apps/Administrator/logs/application_1401177251807_0034/vc1_40775.tmp  
  5. 2014-05-28 17:32:23,592 INFO org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.AppLogAggregatorImpl: Uploading logs for container container_1401177251807_0034_01_000001. Current good log dirs are /var/log/hadoop-yarn/containers  
  6. 2014-05-28 17:32:23,592 INFO org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.AppLogAggregatorImpl: Uploading logs for container container_1401177251807_0034_02_000001. Current good log dirs are /var/log/hadoop-yarn/containers  
  7. -- 删除本地目录  
  8. 2014-05-28 17:32:23,593 INFO org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor: Deleting path : /var/log/hadoop-yarn/containers/application_1401177251807_0034  
复制代码

通过对日志的分析,得到上面的结论,一共有三个目录,第一个和第三个都是本地目录,任务结束后就删除了,第二个是HDFS目录,存储日志,且没有删除。通过上面的图4和图5,也可以看到图4对应的应该是第三个目录,由于删除了,所以找不到,而图5对应的则是图第二个HDFS目录,所以可以看到。

注意图4和图5都是任务2的截图,查看任务2的日志(和任务1做对比):

  1. -- 删除本地目录的临时log  
  2. 2014-05-29 09:02:31,018 INFO org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor: Deleting absolute path : /var/lib/hadoop-yarn/cache/yarn/nm-local-dir/usercache/root/appcache/application_1401177251807_0035  
  3.   
  4. -- 这个应该是往HDFS里面写数据,目录是HDFS的  
  5. 2014-05-29 09:02:31,020 INFO org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.AppLogAggregatorImpl: Starting aggregate log-file for app application_1401177251807_0035 at /var/log/hadoop-yarn/apps/root/logs/application_1401177251807_0035/vc1_40775.tmp  
  6. -- 删除本地目录的log  
  7. 2014-05-29 09:02:31,070 INFO org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor: Deleting path : /var/log/hadoop-yarn/containers/application_1401177251807_0035  
复制代码

这里看到这些操作都是一样的。
再看其他的日志,这里首先看任务2的:

  1. 2014-05-29 09:02:03,197 INFO org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor: launchContainer: [nice, -n, 0, bash, /var/lib/hadoop-yarn/cache/yarn/nm-local-dir/usercache/root/appcache/application_1401177251807_0035/container_1401177251807_0035_01_000001/default_container_executor.sh]  
  2. 2014-05-29 09:02:10,622 INFO org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor: launchContainer: [nice, -n, 0, bash, /var/lib/hadoop-yarn/cache/yarn/nm-local-dir/usercache/root/appcache/application_1401177251807_0035/container_1401177251807_0035_01_000002/default_container_executor.sh]  
  3. 2014-05-29 09:02:18,530 INFO org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor: launchContainer: [nice, -n, 0, bash, /var/lib/hadoop-yarn/cache/yarn/nm-local-dir/usercache/root/appcache/application_1401177251807_0035/container_1401177251807_0035_01_000003/default_container_executor.sh]
复制代码

这里感觉是首先新建了一个.sh文件,然后来运行这个.sh文件,注意目录。在浏览器查看log的URL为(这里查看的是map的日志):

如下图:
66.jpg


点击logs后,其url为:

  1. http://vc1:19888/jobhistory/logs/vc1:40775/container_1401177251807_0035_01_000002/attempt_1401177251807_0035_m_000000_0/root  
复制代码

由于上面看到的.sh有三个,参考上面的url可以造出下面另外两个url:

  1. http://vc1:19888/jobhistory/logs/vc1:40775/container_1401177251807_0035_01_000001/attempt_1401177251807_0035_m_000000_0/root 自己造的 看的到信息  
  2. http://vc1:19888/jobhistory/logs/vc1:40775/container_1401177251807_0035_01_000003/attempt_1401177251807_0035_m_000000_0/root 自己造的 看的到信息
复制代码

在浏览器中输入这两个url可以发现,其也是有内容的;在HDFS文件目录上面也可以看到这些文件,如下:

  1. [root@vc1 conf]# hadoop fs -ls /var/log/hadoop-yarn/apps/root/logs/*35/*775  
  2. Found 1 items  
  3. -rw-r-----   1 root mapred      46751 2014-05-29 09:02 /var/log/hadoop-yarn/apps/root/logs/application_1401177251807_0035/vc1_40775  
复制代码

通过对比这些,那么任务1应该也是有log的,首先仿造url,根据任务1的log(.sh那部分的log)以及任务2的log,仿造下面的url:

  1. http://vc1:19888/jobhistory/logs/vc1:40775/container_1401177251807_0034_02_000001/attempt_1401177251807_0034_m_000000_0/Administrator  自己修改的 看不到信息  
  2. http://vc1:19888/jobhistory/logs/vc1:40775/container_1401177251807_0034_01_000001/attempt_1401177251807_0034_m_000000_0/Administrator  自己造的 看不到信息  
复制代码

这两个url都是没有内容的;

查看HDFS目录的相应文件:
88.jpg


首先可以看到有文件,但是文件的内容却是有问题的,不知道是什么,这可能也和浏览器看不到log有关。
任务1为什么没有log? 其实从根本上说,应该是程序执行的问题,在终端是可以看到任务已经提交了的,并且map 0%,reduce 0%,但是这里有个要命的问题,就是yarn是用java命令行运行的,windows提交过去的任务的java命令行使用的是%JAVA_HOME%这样怎么找到到java,java都找不到,如何产生log?等于是命令都没有运行就报错了,应该报java找不到的错。


                                                            分享,成长,快乐





没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条