测试环境:CDH5.0(Hadoop2.3)
在前一篇博客中,使用windows提交任务到linux Hadoop平台,出现错误,想去看看日志,但是发现没有找到日志,所以就在linux Hadoop平台所在的机器使用命令行运行任务,再次查看日志,对比两个任务可能的日志,以此来分析。
首先是页面:
报错任务的页面(报错的任务就称为任务1,运行成功的任务就称为任务2):
图1
任务2的页面:
图2
图1中点击2(History)连接,发现还是在原始连接;而图3的History链接点击后就会出现2的页面。如果在图3中直接点击log,那么会出现log找不到的错误(在图2中点击则没有问题)。
图3
通过上面的对比,可以发现图1和图3的url链接是对应的,但是图1点击History还是链接会图1页面,图3却可以连接到图2界面。
在图1和图3中直接点击log,会出现log找不到的错误,一般如下:
图4
在图2中点击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的日志):
如下图:
点击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
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目录的相应文件:
首先可以看到有文件,但是文件的内容却是有问题的,不知道是什么,这可能也和浏览器看不到log有关。
任务1为什么没有log? 其实从根本上说,应该是程序执行的问题,在终端是可以看到任务已经提交了的,并且map 0%,reduce 0%,但是这里有个要命的问题,就是yarn是用java命令行运行的,windows提交过去的任务的java命令行使用的是%JAVA_HOME%这样怎么找到到java,java都找不到,如何产生log?等于是命令都没有运行就报错了,应该报java找不到的错误,但是就想前篇blog说的那样,报的是那个错误。
分享,成长,快乐
转载请注明blog地址:http://blog.csdn.net/fansy1990