前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >编译及调试 Hadoop 源代码

编译及调试 Hadoop 源代码

作者头像
加米谷大数据
发布2018-04-02 14:37:12
1.8K0
发布2018-04-02 14:37:12
举报
文章被收录于专栏:加米谷大数据

Hadoop 在伪分布式模式下的编译和调试方法,其中,调试方法主要介绍使用 Eclipse 远程调试和打印调试日志两种。

编译 Hadoop 源代码

在 Windows 或 Linux 环境下,打开命令行终端,转到 Hadoop 安装目录下并输入以下命令:

ant -Dversion=1.0.0 {target}

其中,{target} 值如表 1-2 所示,不同的 target 可对应生成不同的 jar 包,如:

ant -Dversion=1.0.0 examples

可生成 hadoop-examples-1.0.0.jar,产生的 jar 包位于 Hadoop 安装目录的 build 文件

夹下。

调试 Hadoop 源代码

利用 Eclipse 远程调试和打印调试日志。这两种方式均可以调试伪分布式工作模式和完全分布式工作模式下的 Hadoop。主要介绍伪分布式工作模式下的 Hadoop 调试方法。

1. 利用 Eclipse 进行远程调试

下面以调试 JobTracker 为例,介绍利用 Eclipse 进行远程调试的基本方法。调试过程可分三步进行:

步骤 1:调试模式下启动 Hadoop在 Hadoop 安装目录下运行内容如下的 Shell 脚本:

export HADOOP_JOBTRACKER_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=878

8,server=y,suspend=y"

bin/start-all.sh

如果脚本运行成功,则可以看到 Shell 命令行终端显示如下信息:

Listening for transport dt_socket at address: 8788

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

步骤 2: 设置断点

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

步骤 3 :在 Eclipse 中调试 Hadoop 程序在 Eclipse 的菜单栏中,依次单击“Run”→“Debug Configurations”→“Remote Java

Applications”,打开图 1-19 所示的对话框,按图中的提示填写名称、JobTracker 所在的host 以及监听端口,并选择 Hadoop 源代码工程,进入图 1-20 所示的调试模式

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

tail -f logs/hadoop-XXX-jobtracker-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 命令查看和修改某个类的日志级别,比如,可通过以下命令查看 TaskTracker 类的日志级别:

bin/hadoop daemonlog -getlevel ${tasktracker -host}:50075 \

org.apache.hadoop.mapred.TaskTracker

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

bin/hadoop daemonlog -setlevel ${tasktracker-host}:50075 \org.apache.hadoop.mapred.TaskTracker DEBUG其 中,tasktracker-host 为 TaskTracker 的 host,50075 是 TaskTracker 的 HTTP 端 口 号(其他服务的 HTTP 端口号可参考附录 B)。

(2)通过 Web 界面

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

http://${tasktracker-host}:50075/logLevel

(3)修改 log4j.properties 文件

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

log4j.logger.org.apache.hadoop.mapred.TaskTracker=DEBUG

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

# 定义输出方式为自定义的 TTOUT

log4j.logger.org.apache.hadoop.mapred.TaskTracker=DEBUG,TTOUT

# 设置 TTOUT 的输出方式为输出到文件

log4j.appender.TTOUT =org.apache.log4j.FileAppender

# 设置文件路径

log4j.appender.TTOUT.File=${hadoop.log.dir}/TaskTracker.log

# 设置文件的布局

log4j.appender.TTOUT.layout=org.apache.log4j.PatternLayout

# 设置文件的格式

log4j.appender.TTOUT.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n

这些配置选项会把 TaskTracker.java 中的 DEBUG 日志写到日志目录下的 TaskTracker.og 文件中。

在阅读源代码的过程中,为了跟踪某个变量值的变化,读者可能需要自己添加一些DEBUG 日志。在 Hadoop 源代码中,大部分类会定义一个日志打印对象。通过该对象,可打印各个级别的日志。比如,在 JobTracker 中由以下代码定义对象 LOG:public static final Log LOG = LogFactory.getLog(JobTracker.class);

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

LOG.debug("Start to lauch JobTracker...");然后重新编译 Hadoop 源代码,并将 org.apache.hadoop.mapred. JobTracker 的调试级别修改为 DEBUG,重新启动 Hadoop 后便可以看到该调试信息。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 加米谷大数据 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
远程调试
远程调试(Remote Debugging,RD)在云端为用户提供上千台真实手机/定制机/模拟器设备,快速实现随时随地测试。运用云测技术对测试方式、操作体验进行了优化,具备多样性的测试能力,包括随时截图和记录调试日志,稳定的支持自动化测试, 设备灵活调度,用例高效执行, 快速定位产品功能和兼容性问题。云手机帮助应用、移动游戏快速发现和解决问题,节省百万硬件费用,加速敏捷研发流程。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档