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. 集群规划

hadoop101hadoop102hadoop103
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)); then
    echo -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
    ;;
esac

end_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~

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值