Hadoop之配置历史服务器并开启日志聚集


1. 前言

Hadoop中设置任务历史服务器并开启日志聚集的必要性:一般情况下在YARN的Web UI中只能查看本次YARN运行期间执行的Application的首个Container的运行日志,即ApplicationMaster的运行日志(MR任务一般是分成多个task通过多个Container分别执行,这些Container分布在集群的任意主机上,首个Container用于运行ApplicationMaster,而AppMaster则负责分发调度task,以及启动其他Container),既不能查看历史job的日志,也不能查看程序输出的Counter统计信息(即命令行提交jar程序的最终执行输出,如job执行过程中的读写数据量、Map/Reduce task数量、各个阶段执行时间等一系列参数),所以需要开启jobhistory-server以及yarn-log-aggregation,即开启任务历史服务器以及日志聚集功能,来实现历史任务日志和作业运行日志,开启jobhistory-server之后,任务结束后运行日志会聚集到HDFS指定目录中,而不再保存本地文件系统中。


2. 集群规划

hadoop101 hadoop102 hadoop103
NameNode
DataNode
SecondaryNameNode
ResourceManager
NodeManager
JobHistoryServer

3. 具体配置

a) core-site.xml

<configuration><!--指定HDFS文件系统访问地址,将其设置为NameNode的地址--><property><name>fs.defaultFS</name><value>hdfs://hadoop101:9000</value></property><!--指定Hadoop运行时产生文件的存储目录--><property><name>hadoop.tmp.dir</name><value>/opt/module/hadoop-2.7.7/tmp</value></property></configuration>

b) hdfs-site.xml

<configuration><!--指定HDFS副本因子数--><!--由于实验主机磁盘空间不足,本次实验中设置为1,一般需要设置为3--><property><name>dfs.replication</name><value>1</value></property><!--以下是NameNode配置--><!--指定NameNode节点的Web UI地址--><property><name>dfs.namenode.http-address</name><value>hadoop101:50070</value></property><!--指定NameNode节点上存储name table(fsimage)文件的本地路径--><!--默认值:file://${hadoop.tmp.dir}/dfs/name--><property><name>dfs.namenode.name.dir</name><value>file://${hadoop.tmp.dir}/dfs/namenode/fsimage</value></property><!--指定NameNode节点上存储transaction(edits)文件的本地路径--><!--默认值:${dfs.namenode.name.dir}--><property><name>dfs.namenode.edits.dir</name><value>file://${hadoop.tmp.dir}/dfs/namenode/edits</value></property><!--指定DataNode节点上存储Blocks文件的本地路径,此处为修改--><!--默认值:file://${hadoop.tmp.dir}/dfs/data--><property><name>dfs.datanode.data.dir</name><value>file://${hadoop.tmp.dir}/dfs/datanode/data</value></property><!--以下是SecondaryNameNode配置--><!--指定NameNode辅助名称节点SecondaryNameNode的Web UI地址--><property><name>dfs.namenode.secondary.http-address</name><value>hadoop103:50090</value></property><!--指定SecondaryNameNode节点上存储temporary images文件的本地路径--><!--默认值:file://${hadoop.tmp.dir}/dfs/namesecondary--><property><name>dfs.namenode.checkpoint.dir</name><value>file://${hadoop.tmp.dir}/dfs/namesecondary/fsimage</value></property><!--指定SecondaryNameNode节点上存储temporary edits文件的本地路径--><!--默认值:${dfs.namenode.checkpoint.dir}--><property><name>dfs.namenode.checkpoint.edits.dir</name><value>file://${hadoop.tmp.dir}/dfs/namesecondary/edits</value></property></configuration>

c) mapred-site.xml

<configuration><!--指定MR程序运行框架,设置为YARN上运行,默认是在本地运行--><!--默认值:local--><property><name>mapreduce.framework.name</name><value>yarn</value></property><!--指定历史服务器JobHistoryServer进程间通信IPC地址--><property><name>mapreduce.jobhistory.address</name><value>hadoop103:10020</value></property><!--指定历史服务器JobHistoryServer的Web UI地址--><property><name>mapreduce.jobhistory.webapp.address</name><value>hadoop103:19888</value></property></configuration>

d) yarn-site.xml

<configuration><!--Site specific YARN configuration properties--><!--设置Reducer获取数据的方式--><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><!--指定YARN中ResourceManager的ip地址--><property><name>yarn.resourcemanager.hostname</name><value>hadoop102</value></property><!--此参数指的是nodemanager的可用内存大小,单位为Mb,设置为主机内存大小--><!--本次实验主机内存大小为2GB,此参数根据各机器分配的物理内存大小设置,若大于物理内存值会影响程序运行效率--><!--默认值:8192--><property><name>yarn.nodemanager.resource.memory-mb</name><value>2048</value></property><!--开启日志聚集功能--><property><name>yarn.log-aggregation-enable</name><value>true</value></property><!--日志聚集位置,默认为HDFS文件系统的/tmp/logs路径下,默认格式为/tmp/logs/${user}/logs--><!--默认值:/tmp/logs--><property><name>yarn.nodemanager.remote-app-log-dir</name><value>/tmp/logs</value></property><!--聚集日志保留时间设置7--><property><name>yarn.log-aggregation.retain-seconds</name><value>604800</value></property></configuration>

4. 启动HDFS和YARN集群

在hadoop101上启动HDFS集群:

./sbin/start-dfs.sh

在hadoop102上启动YARN集群:

./sbin/start-yarn.sh

在hadoop103上启动JobHistoryServer:

./sbin/mr-jobhistory-daemon.sh start historyserver

启动脚本:

  • 最好是自己自定义启动脚本,这里提供个参考脚本hadoop-ctl.sh,操作参数为startstop
#!/bin/bash
# 用于启动Hadoop集群,包括HDFS/YARN/JobHistoryServer# 判断参数个数
if (($# != 1)); thenecho -e "\nWorng Parameter!"exit 1
fi# 获取当前时间(相对时间)
start_time=$(date +%s)
# 获取操作方式
operate=$1
# 设定HDFS客户端,即NameNode节点地址
HDFS_Client="hadoop101"
# 设定YARN客户端,即ResourceManager节点地址
YARN_Client="hadoop102"
# 设置任务历史服务器客户端,即JobHistoryServer节点地址
JobHistoryServer="hadoop103"
# 指定启动用户
user="tomandersen"case $operate in
start)# 启动HDFS集群echo -e "\n----------Starting HDFS cluster----------"ssh $user@$HDFS_Client "source /etc/profile;HADOOP_HOME=${HADOOP_HOME:-/opt/module/hadoop-2.7.7};$HADOOP_HOME/sbin/start-dfs.sh"# 启动YARN集群echo -e "\n----------Starting YARN cluster----------"ssh $user@$YARN_Client "source /etc/profile;HADOOP_HOME=${HADOOP_HOME:-/opt/module/hadoop-2.7.7};$HADOOP_HOME/sbin/start-yarn.sh"# 启动历史服务器echo -e "\n----------Starting JobHistoryServer----------"ssh $user@$JobHistoryServer "source /etc/profile;HADOOP_HOME=${HADOOP_HOME:-/opt/module/hadoop-2.7.7};$HADOOP_HOME/sbin/mr-jobhistory-daemon.sh start historyserver";;
stop)# 关闭HDFS集群echo -e "\n----------Stopping HDFS cluster----------"ssh $user@$HDFS_Client "source /etc/profile;HADOOP_HOME=${HADOOP_HOME:-/opt/module/hadoop-2.7.7};$HADOOP_HOME/sbin/stop-dfs.sh"# 关闭YARN集群echo -e "\n----------Stopping YARN cluster----------"ssh $user@$YARN_Client "source /etc/profile;HADOOP_HOME=${HADOOP_HOME:-/opt/module/hadoop-2.7.7};$HADOOP_HOME/sbin/stop-yarn.sh"# 关闭历史服务器echo -e "\n----------Stopping JobHistoryServer----------"ssh $user@$JobHistoryServer "source /etc/profile;HADOOP_HOME=${HADOOP_HOME:-/opt/module/hadoop-2.7.7};$HADOOP_HOME/sbin/mr-jobhistory-daemon.sh stop historyserver";;
*)echo -e "\nWorng Parameter!"exit 1;;
esacend_time=$(date +%s)
execution_time=$((${end_time} - ${start_time}))
echo -e "\n----------$operate Hadoop cluster takes ${execution_time} seconds----------\n"

5. jps检查进程

  • 本次配置的hadoop集群,启动后各主机进程情况如下所示:
[tomandersen@hadoop101 hadoop]$ call-cluster.sh jps
----------hadoop103----------
38738 SecondaryNameNode
39077 Jps
38825 NodeManager
38622 DataNode
38958 JobHistoryServer
----------hadoop102----------
44720 ResourceManager
45175 Jps
44570 DataNode
44862 NodeManager
----------hadoop101----------
48291 NameNode
48438 DataNode
48694 NodeManager
48856 Jps----------execute "jps" in cluster takes 3 seconds----------[tomandersen@hadoop101 hadoop]$ 
[tomandersen@hadoop101 hadoop]$ 

6. 通过JobHistoryServer查看任务运行情况

a) 查看JobHistoryServer的Web UI:

查看JobHistoryServer的Web UI

b) 查看Job运行情况:

查看Job运行情况

查看Job运行情况

c) 查看Job的运行日志

查看Job的运行日志

查看Job的运行日志

d) 查看Job的Counter统计信息

查看Job的Counter统计信息

查看Job的Counter统计信息


End~