前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【MapReduce】作业调试

【MapReduce】作业调试

作者头像
十里桃花舞丶
发布2021-09-10 11:26:01
2260
发布2021-09-10 11:26:01
举报
文章被收录于专栏:桥路_大数据桥路_大数据

作业调试

History Server开启

因为yarn集群重启之后,作业的历史运行日志和信息就被清理掉了,对于定位历史任务的错误信息很不友好,所以首先开启History Server用于保存所有作业的历史信息。

首先编辑yarn-site.xml文件,开启yarn的日志聚合功能。

cd $HADOOP_HOME/etc/hadoop
vim yarn-site.xml
img
img

添加的配置如下:

  <property>
      <name>yarn.log-aggregation-enable</name>
      <value>true</value>
  </property>
   <property>
	<name>yarn.log-aggregation.retain-seconds</name>
	<value>2592000</value>
  </property>
  <property>
    <name>yarn.log.server.url</name>
    <value>http://node01:19888</value>
  </property>
  <property>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>hdfs://node01:9000/yarn-logs/</value>
  </property>

然后编辑mapred-site.xml文件,添加History-Server基本配置:

cd $HADOOP_HOME/etc/hadoop
vim mapred-site.xml

添加的配置如下:

  <property>
      <name>mapreduce.jobhistory.address</name>
      <value>node01:10020</value>
  </property>
    <property>
      <name>mapreduce.jobhistory.webapp.address</name>
      <value>node01:19888</value>
  </property>
    <property>
      <name>mapreduce.jobhistory.intermediate-done-dir</name>
      <value>/mr-history/log</value>
  </property>
    <property>
      <name>mapreduce.jobhistory.done-dir</name>
      <value>/mr-history/done</value>
  </property>

因为集群搭建脚本中已经添加了前2个配置项,所以只需要添加后2个即可。

img
img

配置的具体含义如下:

img
img

然后重启集群,使配置生效:

stop-all.sh
start-all.sh

启动history-server:

mr-jobhistory-daemon.sh start historyserver
img
img

此时,可以在hdfs中看到HistoryServer的存储目录就被创建出来了。

img
img

于是,现在历史作业的运行信息就可以被保留下来了,但前提是在history-server在启动的情况下。

辅助脚本

作业清理&提交

MapReduce任务在集群中提交时,如果报错,则需要清理环境,删除jar包和中间编译的文件,并且在HDFS中删除结果输出目录。

如果频繁进行调试,那重复删除便会花费很多的时间,所以可以把这部分内容放置到脚本中去,节省时间。

#!/bin/bash

rm -rf SumDeptSalary.*

hadoop fs -rm -r /tmp/mr/data/sum_output

touch SumDeptSalary.java

除此之外,java程序的编译和提交也是重复工作,在测试过程中也可以加到脚本中。

#!/bin/bash

export HADOOP_CLASSPATH=${JAVA_HOME}/lib/tools.jar
hadoop com.sun.tools.javac.Main SumDeptSalary.java
jar cf SumDeptSalary.jar SumDeptSalary*.class
hadoop jar SumDeptSalary.jar SumDeptSalary /tmp/mr/data/dept_input/dept /tmp/mr/data/emp_input/emp /tmp/mr/data/sum_output

这些脚本是减少重复执行的时间,为了方便,所以不必写的那么通用,每次测试时重写一个就可以了。

日志查看

再有就是,MapReduce程序在集群中进行调试时,可以在程序中添加System.out来输出信息,当然更推荐使用log4j日志打印。

其中System.out输出的信息,会存放到 $HADOOP_HOME/logs/userlogs目录下对应application的中不同container输出的stderr和stdout文件中。

img
img
img
img

而log4j日志会存放到syslog中。

因为hadoop依赖中已经添加了log4j的日志包,所以在程序中直接使用即可。

// 定义成员变量logger,这里定义到了Mapper类MapClass中
public Logger logger = Logger.getLogger(MapClass.class.getName());
// 在函数中直接调用logger进行日志打印
logger.info("Log4j:进入SetUp方法");

其中log4j的配置文件存放在$HADOOP_HOME/etc/hadoop目录下,可以自定义修改。

img
img

程序输出日志后,然而寻找这些日志信息,首先需要在web监控界面查看任务的appication id和任务被提交到了哪些NodeManager中执行,然后分别进入到对应NodeManager节点中查看这些日志,而且因为每次执行的application id不同,导致找到并进入准确的目录花费的时间较长。所以可以编写一个日志查看脚本,从所有节点查询application id对应的日志并返回。

观察application id,末尾的序号是顺序递增的;在虚拟机测试环境中,不同于生产环境的严谨,只需要关注末尾的序号即可,比如0001、0002。所以在脚本中传入的KaTeX parse error: Expected group after '_' at position 28: …配application\_*_̲{1}即可。

提供以下脚本,遍历所有从节点,并输出syslog日志。

#!/bin/bash

if [ $# -le 0 ]
then
    echo 缺少参数
    exit 1
fi

for n in `cat $HADOOP_HOME/etc/hadoop/slaves`

do
    echo ===========查看节点 $n============
    ssh $n "cat $HADOOP_HOME/logs/userlogs/application_*_${1}/container_*/syslog"
done

使用时,加上grep命令过滤,效果更佳。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-08-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作业调试
    • History Server开启
      • 辅助脚本
        • 作业清理&提交
        • 日志查看
    相关产品与服务
    前端性能监控
    前端性能监控(Real User Monitoring,RUM)是一站式前端监控解决方案,专注于 Web、小程序等场景监控。前端性能监控聚焦用户页面性能(页面测速,接口测速,CDN 测速等)和质量(JS 错误,Ajax 错误等),并且联动腾讯云应用性能监控实现前后端一体化监控。用户只需要安装 SDK 到自己的项目中,通过简单配置化,即可实现对用户页面质量的全方位守护,真正做到低成本使用和无侵入监控。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档