Hadoop自带了一个历史服务器,可以通过历史服务器查看已经运行完的Mapreduce作业记录,比如用了多少个Map、用了多少个Reduce、作业提交时间、作业启动时间、作业完成时间等信息。默认情况下,Hadoop历史服务器是没有启动的,我们可以通过下面的命令来启动Hadoop历史服务器。
基于ResourceManager (YARN)调度及管理的并行任务提交执行后,都可以在如下界面查看其历史日志,通过日志排查各种问题提供了方便,ResourceManager资源历史调度日志界面如下:
下面带您梳理一下流程
点击任务对应ID链接,进入下一页面:
点击Logs链接进入下面的页面
点击here进入下一页面
逐级追踪日志,为排查任务运行时的错误提供了方便.
你能顺利走到这一步,需要开启如下服务
Hadoop安装目录下,运行日下命令,启动历史服务
如何启动历史服务?
# sbin/mr-jobhistory-daemon.sh start historyserver
看看你的Hadoop中的配置文件mapred-site.xml是否配置如下内容
在$HADOOP_HOME/etc/hadoop
vim mapred-site.xml
<property>
<name>mapreduce.jobhistory.address</name>
<value>centoshadoop1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>centoshadoop1:19888</value>
</property>
注:centoshadoop1是我的主机名称,请改成你们的
上面的参数是在mapred-site.xml文件中进行配置,mapreduce.jobhistory.address和mapreduce.jobhistory.webapp.address默认的值分别是0.0.0.0:10020和0.0.0.0:19888,大家可以根据自己的情况进行相应的配置,参数的格式是host:port。配置完上述的参数之后,重新启动Hadoop jobhistory,这样我们就可以在mapreduce.jobhistory.webapp.address参数配置的主机上对Hadoop历史作业情况经行查看。
很多人就会问了,这些历史数据是存放在哪里的?是存放在HDFS中的,我们可以通过下面的配置来设置在HDFS的什么目录下存放历史作业记录:
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate</value>
</property>
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/tmp/hadoop-yarn/staging</value>
</property>
每一个作业的历史记录都存放在一个单独的文件中。
mapreduce.jobhistory.intermediate-done-dir配置的目录下主要存放的是当前正在运行的Hadoop任务的记录相关信息,感兴趣的同学可以进去看看,这里就不介绍了。
如果对Hadoop历史服务器WEB UI上提供的数据不满意,我们就可以通过对mapreduce.jobhistory.done-dir配置的目录进行分析,得到我们感兴趣的信息,比如统计某天中运行了多少个map、运行最长的作业用了多少时间、每个用户运行的Mapreduce任务数、总共运行了多少Mapreduce数等信息,这样对监控Hadoop集群是很好的,我们可以根据那些信息来确定怎么给某个用户分配资源等等。
细心的人可能发现,在Hadoop历史服务器的WEB UI上最多显示20000个历史的作业记录信息;其实我们可以通过下面的参数进行配置,然后重启一下Hadoop jobhistory即可:
<property>
<name>mapreduce.jobhistory.joblist.cache.size</name>
<value>20000</value>
</property>
来咋们从第一张图的右侧History链接点击进入下一页面:
能进入这个页面必须开启Flink的historyServer服务进程:
[hadoop@centoshadoop1 flink-1.9.0]$ bin/historyserver.sh start
Starting historyserver daemon on host centoshadoop1.