调试 Hadoop 源代码

环境是 64bit Ubuntu 14.04 系统, jdk 1.7 以及 Eclipse Mars (4.5)   

  这里介绍两种调试 Hadoop 源代码的方法: 利用 Eclipse 远程调试工具和打印调试日志. 这两种方法均可以调试伪分布式工作模式和完全分布式工作模式下的 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       # 在 /usr/local/hadoop  目录下

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

$ Listening for transport dt_socket at address: 8788

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

  步骤 2  设置断点

  在新建的 Java 工程 "hadoop-main" 中, 找到 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    # 在hadoop源代码目录下

  (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 类的日志级别: ( 如果你的主机是 node1, ip是192.168.1.101, 而且已经绑定了, host 写这两个中的一个即可 )

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

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

$ 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
时间: 2025-01-07 07:06:15

调试 Hadoop 源代码的相关文章

eclipse远程调试hadoop源码

1.调试环境 1.1 远程linux运行的hadoop 1.2 本地windows的eclipse中导入hadoop源代码 1.3 本地windows的eclipse中有hadoop的自己写的代码 2.步骤 2.1修改远程linux运行的hadoop程序的hadoop-env.sh, 把第21行注释掉,增加一行代码 export HADOOP_NAMENODE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=9090,server=y,su

远程调试hadoop各组件

远程调试对应用程序开发十分有用.例如,为不能托管开发平台的低端机器开发程序,或在专用的机器上(比如服务不能中断的 Web 服务器)调试程序.其他情况包括:运行在内存小或 CUP 性能低的设备上的 Java 应用程序(比如移动设备),或者开发人员想要将应用程序和开发环境分开,等等. 为了进行远程调试,必须使用 Java Virtual Machine (JVM) V5.0 或更新版本. JPDA 简介 Sun Microsystem 的 Java Platform Debugger Archite

Hadoop源代码阅读环境搭建

Hadoop源代码阅读环境搭建 一.说明 作为一个学习hadoop的同学.必须在本机上搭建hadoop源代码阅读环境,这样,在方便阅读源代码的同一时候也方便进行调试和源代码改动. 好了.以下開始搭建好开发环境. 1.环境说明:hadoop 版本号:1.2.1. IDE:eclipse.操作系统:centos 2.网上有人是通过eclipse的新建项目指定文件夹的方式将hadoop文件夹转换成Eclipseproject同一时候导入eclipse,详细做法例如以下: File-->new-->J

在 NetBeans IDE 中调试 PHP 源代码

目录 准备工作 如何在 NetBeans IDE 中使用 XDebug 进行 PHP 调试 调试选项 使用工具栏和编辑器 调试器窗口 调试会话 样例调试会话 使用其他监视 PHP 和 HTML 混合用例 路径映射.调试器代理以及在定制 URL 上启动调试会话 要学习本教程,您需要具备以下软件和资源. 软件或资源 要求的版本 NetBeans IDE PHP 下载包 PHP 引擎 版本 5 Web 服务器 推荐使用 Apache HTTP Server 2.2. PHP 调试器 XDebug 2.

eclipse 关联 hadoop 源代码------快速搞定

最近学习 hadoop, 建了个工程,由于是引入的 jar 包,不方便阅读, 百度了一下,发现还是各种麻烦, 在这里给大家介绍一种简单的办法,两步搞定 一. 下载 hadoop 完整包并解压 二.选择 hadoop jar 包 ---> 右键属性--> source---> 外部文件夹(选择解压的目录就可以了) 三. 看成果 是不是方便多了? 其他的都可以参考这种办法,简单快捷 eclipse 关联 hadoop 源代码------快速搞定,布布扣,bubuko.com

windows下eclipse调试hadoop详解

1)下载Eclipse http://www.eclipse.org/downloads/ Eclipse Standard 4.3.2 64位 2) 下载hadoop版本对应的eclipse插件 我的hadoop是1.0.4,因此下载hadoop-eclipse-plugin-1.0.4.jar 下载地址:http://download.csdn.net/detail/m_star_jy_sy/7376169 3)安装hadoop插件 将hadoop-eclipse-plugin-1.0.4.

RPC框架研究(二)Hadoop源代码-1

报名了阿里中间件性能大赛,我来说是一个全新的挑战.一切从空白学起,比赛的过程也是学习的过程 是的.想让自己学好.给自己报一个比赛吧~ 就像当初学围棋,也是报了围棋比赛,为了不至于输的太慘.一个星期里学了好多东西 第二天 Hadoop源代码-1 小雨 天真的以为学了Java回调机制后就能够把原来的RPC框架改为异步调用了,结果对着代码一下午都没想出要怎么去改,怎么入手. 于是决定研究一下Hadoop的源代码,看看别人是怎么实现RPC的,这也是我第一次研究源代码,曾经都是仅仅管用.无论怎样实现. 使

hadoop源代码解读namenode高可靠:HA;web方式查看namenode下信息;dfs/data决定datanode存储位置

点击browserFilesystem.和命令查看结果一样 当我们查看hadoop源代码时,我们看到hdfs下的hdfs-default.xml文件信息 我们查找${hadoop.tmp.dir}这是引用变量,肯定在其它文件有定义.在core-default.xml中查看到,这两个配置文件有个共同点: 就是不要改动此文件,但能够复制信息到core-site.xml和hdfs-site.xml中改动 usr/local/hadoop 是我存放hadoop目录的地方 几个关于namenode的关键文

C#调试含有源代码的动态链接库遇见there is no source code available for the current location提示时的解决方案

C#调试含有源代码的动态链接库遇见there is no source code available for the current location提示时的解决方案: 1.首先试最常规的方法:Clean and then rebuild solution,但是没有解决 2.进入Tools>Options,选择Debugging>General 却掉 Enable address-level debugging 选项,在去掉 Require source files to exactly ma