千家信息网

Hadoop调试源代码

发表于:2025-01-30 作者:千家信息网编辑
千家信息网最后更新 2025年01月30日,本节介绍两种调试Hadoop源代码的方法:利用Eclipse远程调试工具和打印调试日志。这两种方法均可以调试伪分布式工作模式和完全分布式工作模式下的Hadoop。本节主要介绍伪分布式工作模式下的Had
千家信息网最后更新 2025年01月30日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后便可以看到该调试信息。

日志 级别 文件 输出 信息 方法 源代码 命令 模式 对象 可通 代码 分布式 可在 方式 步骤 用户 目录 脚本 过程 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全教育的必要性和方式 浪潮pc服务器做raid1 网络安全等级保护框架包括 刀片服务器降级什么意思 服务器地址填写什么呢 第三届丝绸之路网络安全 计算机应用软件开发是指 英格姆串口服务器 软件开发需不需要写文档 微视界互联网科技有限公司 软件开发环境的目标是 甲骨文数据库不能自动启动 计算机三级网络技术讲解视频 字节服务器采购费用 蓝牙网状网络技术亮点 数据库参照查询中的模糊查询 方舟服务器给管理 运城软件开发公司电话 实用网络技术配置指南 襦教网网络安全性怎么解开 国内外列车网络技术现状 警易网络安全陷进手抄报 南阳理工校园网dns服务器 计算机网络技术主要学科 在线表格汇总数据库 蓝牙网状网络技术亮点 全国网络技术挑战赛含金量 软件开发公司要注册安全工程师吗 网络安全法大数据外呼 网络安全催化剂龙头
0