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~

<think>嗯,用户提到在Hadoop开启历史服务器,但日志聚集功能没有启动。我需要先理解这两个组件的功能以及它们之间的关系。历史服务器主要是用来查看已经完成的MapReduce作业的历史信息,而日志聚集功能则是将各个NodeManager节点上的日志收集到HDFS上,方便查看分析。用户的问题可能在于配置或启动步骤上有遗漏或错误。 首先,检查日志聚集相关的配置是否正确。根据引用[2],需要在yarn-site.xml中设置yarn.log-aggregation-enable为true,配置保留时间。如果用户没有正确配置这些属性,日志聚集可能无法启动。此外,引用[3]提到需要执行hadoop dfsadmin -refreshNodes来刷新配置,这可能也是必要的步骤。 然后,确认是否在修改配置后重新启动了YARN服务。因为配置更改后,必须重启ResourceManagerNodeManager才能生效。用户可能只是启动了历史服务器,但没有重启YARN服务,导致新配置未加载。 另外,检查HDFS的权限设置是否正确。日志聚合需要将日志写入HDFS的特定目录,如果目录权限不足,可能导致日志无法上传。用户需要确保/yarn-logs目录存在,且NodeManager有写入权限。 还有,查看NodeManager的日志文件可以帮助诊断问题。可能有一些错误信息提示权限问题、配置错误或网络连接问题。用户应该检查这些日志以获取更多线索。 最后,确认Hadoop集群的所有节点时间是否同步。时间不同步可能导致日志聚合时出现异常,影响功能正常使用。使用NTP服务进行时间同步是一个常见的解决方案。 总结下来,可能的解决方案包括检查配置、重启服务、验证权限、检查日志、同步时间等步骤。需要一步步排查,确保每个环节都正确无误。</think>### Hadoop历史服务器启动后日志聚集功能未启动的解决方案 #### 一、检查日志聚集功能配置 1. **验证yarn-site.xml配置** 在`yarn-site.xml`中必须包含以下关键配置项: ```xml <!-- 启用日志聚合 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 日志保留时间(单位:秒) --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>86400</value> </property> <!-- 聚合日志HDFS存储路径 --> <property> <name>yarn.nodemanager.remote-app-log-dir</name> <value>/yarn-logs</value> </property> ``` 如果缺少上述配置日志聚合功能将无法正常工作[^2]。 2. **同步配置到所有节点** 修改配置后需同步到集群所有节点(Hadoop103/104/105等),执行配置刷新命令: ```bash ./bin/hadoop dfsadmin -refreshNodes # 触发配置更新block块迁移[^3] ``` --- #### 二、服务重启操作 1. **重启YARN服务** 修改配置后必须重启YARN服务: ```bash sbin/stop-yarn.sh sbin/start-yarn.sh # 确保ResourceManagerNodeManager重新加载配置[^1] ``` 2. **启动历史服务器** 单独启动历史服务器(需在包含历史服务器配置的节点执行): ```bash mapred --daemon start historyserver ``` --- #### 三、验证功能可用性 1. **检查HDFS日志目录** 验证HDFS上是否生成聚合日志目录: ```bash hdfs dfs -ls /yarn-logs # 应显示应用日志目录 ``` 2. **通过WebUI验证** 访问`http://Hadoop103:8088/cluster/apps`(ResourceManager UI`http://Hadoop103:19888/jobhistory`(历史服务器UI),查看已完成作业的日志是否可访问。 --- #### 四、常见问题排查 1. **权限问题** - 确认HDFS目录权限:`hdfs dfs -chmod -R 1777 /yarn-logs` - 检查NodeManager运行用户是否具有HDFS写权限 2. **日志定位** 查看NodeManager日志定位具体错误: ```bash tail -n 100 $HADOOP_HOME/logs/yarn-<user>-nodemanager-<hostname>.log ``` 3. **时间同步问题** 使用`ntpdate`命令检查集群节点时间同步状态,时间偏差超过阈值会导致日志聚合异常。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值