专业只做数据库实训和认证的品牌机构

微信公众号新浪微博
免费咨询电话:400-0909-964
当前位置: 网站首页 > Hadoop > Hadoop课程 > Hadoop基础教程:调试Hadoop源代码

Hadoop基础教程:调试Hadoop源代码

文章来源: 更新时间:2016/7/12 17:36:33

在线老师点击咨询:

最新学讯:近期OCP认证正在报名中,因考试人员较多请尽快报名获取最近考试时间,报名费用请联系在线老师,甲骨文官方认证,报名从速!

我要咨询

Hadoop基础教程:调试Hadoop源代码,这里介绍两种调试Hadoop源代码的方法:利用Eclipse远程调试工具和打印调试日志。这两种方法均可以调试伪分布式工作模式和完全分布式工作模式下的Hadoop。本节主要介绍伪分布式工作模式下的Hadoop调试方法。

(1)利用Eclipse进行远程调试

下面以调试ResourceManager为例,介绍利用Eclipse远程调试的基本方法,这可分两步进行。

步骤1 调试模式下启动Hadoop。

在Hadoop安装目录下运行如下的Shell脚本:

export YARN_NODEMANAGER_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8788, server=y,suspend=y" sbin/start-all.sh

运行了脚本后会看到Shell命令行终端显示如下信息:

Listening for transport dt_socket at address: 8788

此时表明ResourceManager处于监听状态,直到收到debug确认信息。

步骤2 设置断点。

在前面新建的Java工程“Hadoop-2.0”中,找到ResourceManager相关代码,并在感兴趣的地方设置一些断点。

步骤3 在Eclipse中调试Hadoop程序。

在Eclipse的菜单栏中,依次选择 “Run”→“Debug Configurations”→“Remote Java Applications”,并按照要求填写远程调试器名称(自己定义一个即可),ResourceManager所在host以及监听端口号等信息,并选择Hadoop源代码工程,便可进入调试模式。

调试过程中,ResourceManager输出的信息被存储到日志文件夹下的yarn-XXX-resourcemanager-localhost.log文件(XXX为当前用户名)中,可通过以下命令查看调试过程中打印的日志:

tail -f logs/yarn-XXX-resourcemanager-localhost.log

(2)打印Hadoop调试日志

Hadoop使用了Apache log4j作为基本日志库,该日志库将日志分别5个级别,分别为DEBUG、INFO、WARN、ERROR和FATAL。这5个级别是有顺序的,即DEBUG < INFO < WARN < ERROR < FATAL,分别用来指定日志信息的重要程度。日志输出规则为:只输出级别不低于设定级别的日志信息,比如若级别设定为INFO,则INFO、WARN、ERROR和FATAL级别的日志信息都会输出,但级别比INFO低的DEBUG则不会输出。

在Hadoop源代码中,大部分Java文件中存在调试日志(DEBUG级别日志),但默认情况下,日志级别是INFO,为了查看更详细的运行状态,可采用以下几种方法打开DEBUG日志。

方法1 使用Hadoop Shell命令。

可使用Hadoop脚本中的daemonlog命令查看和修改某个类的日志级别,比如,可通过以下命令查看NodeManager类的日志级别:

bin/hadoop daemonlog -getlevel ${nodemanager-host}:8042 \ org.apache.Hadoop.yarn.server.nodemanager.NodeManager

可通过以下命令将NodeManager类的日志级别修改为DEBUG:

bin/hadoop daemonlog -setlevel ${nodemanager-host}:8042 \ org.apache.Hadoop.yarn.server.nodemanager.NodeManager DEBUG

其中,nodemanager-host为NodeManager服务所在的host,8042是NodeManager的HTTP端口号。

方法2 通过Web界面。

用户可以通过Web界面查看和修改某个类的日志级别,比如,可通过以下URL修改NodeManager类的日志级别:

http://${nodemanager-host}:8042/logLevel

方法3 修改log4j.properties文件。

以上两种方式只能暂时修改日志级别,当Hadoop重启后会被重置,如果要永久性改变日志级别,可在目标节点配置目录下的log4j.properties文件中添加以下配置选项:

log4j.logger.org.apache.Hadoop.yarn.server.nodemanager.NodeManager=DEBUG

此外,有时为了专门调试某个Java文件,需要把该文件的相关日志输出到一个单独文件中,可在log4j.properties中添加以下内容:

#定义输出方式为自定义的TTOUT log4j.logger. org.apache.Hadoop.yarn.server.nodemanager.NodeManager=DEBUG,TTOUT #设置TTOUT的输出方式为输出到文件 log4j.appender.TTOUT =org.apache.log4j.FileAppender #设置文件路径 log4j.appender.TTOUT.File=${Hadoop.log.dir}/NodeManager.log #设置文件的布局 log4j.appender.TTOUT.layout=org.apache.log4j.PatternLayout #设置文件的格式 log4j.appender.TTOUT.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n

这些配置选项会把NodeManager.Java中的DEBUG日志写到日志目录下的NodeManager.log文件中。

在阅读源代码的过程中,为了跟踪某个变量值的变化,读者可能需要自己添加一些DEBUG日志。在Hadoop源代码中,大部分类会定义一个日志打印对象,通过该对象可打印各个级别的日志。比如,在NodeManager中用以下代码定义对象LOG:

public static final Log LOG = LogFactory.getLog(NodeManager.class);

用户可使用LOG对象打印调试日志。比如,可在NodeManager的main函数首行添加以下代码:

LOG.debug("Start to lauch NodeManager...");

然后重新编译Hadoop源代码,并将org.apache.Hadoop.yarn.server.nodemanager.NodeManager的调试级别修改为DEBUG,重新启动Hadoop后便可以看到该调试信息。

本文地址:http://www.cuug.com.cn/hadoop/kecheng/12456590884.html 转载请注明!


在线预约 抢先报名 获取课程排期

Oracle培训机构

金牌讲师<>

冉乃纲-老师CUUG金牌讲师
冉老师 CUUG金牌讲师 Oracle及RedHat高级讲师、Unix/Linux 资深专家...[详细了解老师]

免费咨询上课流程 客服在线中

陈卫星-老师CUUG金牌讲师
陈老师 CUUG金牌讲师 精通Oracle管理、备份恢复、性能优化 11年Ora...[详细了解老师]

免费咨询上课流程 客服在线中

选学校如何选择适合自己的学校

CUUG -CHINA UNIX USER GROUP,是国际UNIX组织UNIFORUM的中国代表,是国内悠久的专业UNIX培训机构,被誉为中国UNIX 的摇篮。多年来,以提高教学质量为本,强调素质教育,积极引进、消化国外的新技术,有效的结合中国....[详情]

一站式服务(从入学到就业一帮到底)

入学

学习

就业

实操

食宿
地址:北京市海淀区田村山南路35号院17号楼
课程咨询:010-59426307 010-59426319 400-0909-964
企业服务:137 1818 8639(陈经理)
部分信息来源于网络,如有错误请联系指正!
版权所有@北京神脑资讯技术有限公司 (CUUG,中国UNIX用户协会) Copyright 2016 ALL Rights Reserved 京ICP备11008061号-1