Hadoop yarn log简单分析

测试环境:CDH5.0(Hadoop2.3)

在前一篇博客中,使用windows提交任务到linux Hadoop平台,出现错误,想去看看日志,但是发现没有找到日志,所以就在linux Hadoop平台所在的机器使用命令行运行任务,再次查看日志,对比两个任务可能的日志,以此来分析。

首先是页面:

报错任务的页面(报错的任务就称为任务1,运行成功的任务就称为任务2):

图1

Hadoop yarn log简单分析_第1张图片

任务2的页面:

图2

Hadoop yarn log简单分析_第2张图片

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

图3

Hadoop yarn log简单分析_第3张图片

通过上面的对比,可以发现图1和图3的url链接是对应的,但是图1点击History还是链接会图1页面,图3却可以连接到图2界面。

在图1和图3中直接点击log,会出现log找不到的错误,一般如下:

图4

Hadoop yarn log简单分析_第4张图片

在图2中点击log查看日志:

图5

Hadoop yarn log简单分析_第5张图片

对比图4和图5,发现其URL的前缀是不一样的,一个是直接container一个是jobHistory。

接着看nodemanager的日志:

首先是任务1的日志(只截取了关键的log):

-- 删除本地目录临时log
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
-- 上传到HDFS 
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
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
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
-- 删除本地目录
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做对比):

-- 删除本地目录的临时log
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

-- 这个应该是往HDFS里面写数据,目录是HDFS的
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
-- 删除本地目录的log
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的:

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]
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]
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的日志):

如下图:

Hadoop yarn log简单分析_第6张图片

点击logs后,其url为:

http://vc1:19888/jobhistory/logs/vc1:40775/container_1401177251807_0035_01_000002/attempt_1401177251807_0035_m_000000_0/root
由于上面看到的.sh有三个,参考上面的url可以造出下面另外两个url:

http://vc1:19888/jobhistory/logs/vc1:40775/container_1401177251807_0035_01_000001/attempt_1401177251807_0035_m_000000_0/root 自己造的 看的到信息
http://vc1:19888/jobhistory/logs/vc1:40775/container_1401177251807_0035_01_000003/attempt_1401177251807_0035_m_000000_0/root 自己造的 看的到信息
在浏览器中输入这两个url可以发现,其也是有内容的;在HDFS文件目录上面也可以看到这些文件,如下:

[root@vc1 conf]# hadoop fs -ls /var/log/hadoop-yarn/apps/root/logs/*35/*775
Found 1 items
-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:

http://vc1:19888/jobhistory/logs/vc1:40775/container_1401177251807_0034_02_000001/attempt_1401177251807_0034_m_000000_0/Administrator  自己修改的 看不到信息
http://vc1:19888/jobhistory/logs/vc1:40775/container_1401177251807_0034_01_000001/attempt_1401177251807_0034_m_000000_0/Administrator  自己造的 看不到信息
这两个url都是没有内容的;

查看HDFS目录的相应文件:

Hadoop yarn log简单分析_第7张图片

首先可以看到有文件,但是文件的内容却是有问题的,不知道是什么,这可能也和浏览器看不到log有关。

任务1为什么没有log? 其实从根本上说,应该是程序执行的问题,在终端是可以看到任务已经提交了的,并且map 0%,reduce 0%,但是这里有个要命的问题,就是yarn是用java命令行运行的,windows提交过去的任务的java命令行使用的是%JAVA_HOME%这样怎么找到到java,java都找不到,如何产生log?等于是命令都没有运行就报错了,应该报java找不到的错误,但是就想前篇blog说的那样,报的是那个错误。


分享,成长,快乐

转载请注明blog地址:http://blog.csdn.net/fansy1990




你可能感兴趣的:(yarn,log)