Open liusheng opened 4 years ago
在做Hadoop性能调优的过程中,不可避免的会涉及到Hadoop mapreduce程序的断点调试,这里做一个笔记备忘。 通常情况下,Hadoop 的mapreduce应用调试主要由两种:本地调试和远程调试,本地调试是不起Hadoop集群,使用Standalone的方式执行Hadoop的应用,再加断点调试,这种方法最简单。还有一种就是通过本地IDE远程连接到服务器上的Hadoop集群调试。这里用我现在使用的IDEA来调试。
Standalone
首先打开Hadoop代码项目 Run->Edit Configurations中增加如下配置 接下来点击Run->Run xxx或者Debug xxx就可以运行和调试了。
Run
Edit Configurations
Run xxx
Debug xxx
对于TeraSort,这里需要注意的是,输入和输出需要用file:\\\打头来指定使用本地文件系统作为输入和输出。
file:\\\
注意: 这里因为要指定hadoop的example jar包,所以,需要hadoop编译好,可以在hadoop官方网站上下载,但是官方网站上只有发布版本的Hadoop 包,可能存在和代码不一致的情况,调试起来可能会有问题,也可以在windows上编译,但是windows上编译比较麻烦,会出现各种各样的问题,我这里取了个巧,在我的Ubuntu环境上编译好,再讲整个Hadoop目录拷贝到本机打开的。
补充: 也可以使用这种方式:
在Hadoop集群上执行的MapReduce程序会首先通过client端将应用提交到YARN的resource manager,然后YARN调度资源后会起一个子进程去执行MapReduce应用,所以具体调试的时候分为Client端调试和Server端调试。下面以Hadoop自带的TeraGen和Terasort测试程序为例。
Client
Server
$HADOOP_HOME/etc/hadoop/hadoop-env.sh
HADOOP_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 $HADOOP_OPTS"
然后在IDEA中Run->Edit Configurations增加如下配置: 注意图中红框的配置,其中,module classpath要选正确,由于我调试的TeraGen是属于mapreduce-examples module,所以选在这个。 昨晚上面的配置,就可以在服务器上启动MapReduce TeraGen应用: 可以看出应用已经监听到调试端口5005了。 然后,在代码中添加断点,然后在IDEA中点击Run->Debug 'hadoop-remote'就可以启动调试了
module classpath
TeraGen
mapreduce-examples
5005
Debug 'hadoop-remote'
在做Hadoop性能调优的过程中,不可避免的会涉及到Hadoop mapreduce程序的断点调试,这里做一个笔记备忘。 通常情况下,Hadoop 的mapreduce应用调试主要由两种:本地调试和远程调试,本地调试是不起Hadoop集群,使用
Standalone
的方式执行Hadoop的应用,再加断点调试,这种方法最简单。还有一种就是通过本地IDE远程连接到服务器上的Hadoop集群调试。这里用我现在使用的IDEA来调试。1. 本地调试
首先打开Hadoop代码项目
Run
->Edit Configurations
中增加如下配置 接下来点击Run
->Run xxx
或者Debug xxx
就可以运行和调试了。对于TeraSort,这里需要注意的是,输入和输出需要用
file:\\\
打头来指定使用本地文件系统作为输入和输出。注意: 这里因为要指定hadoop的example jar包,所以,需要hadoop编译好,可以在hadoop官方网站上下载,但是官方网站上只有发布版本的Hadoop 包,可能存在和代码不一致的情况,调试起来可能会有问题,也可以在windows上编译,但是windows上编译比较麻烦,会出现各种各样的问题,我这里取了个巧,在我的Ubuntu环境上编译好,再讲整个Hadoop目录拷贝到本机打开的。
补充: 也可以使用这种方式:
2. 远程调试
在Hadoop集群上执行的MapReduce程序会首先通过client端将应用提交到YARN的resource manager,然后YARN调度资源后会起一个子进程去执行MapReduce应用,所以具体调试的时候分为
Client
端调试和Server
端调试。下面以Hadoop自带的TeraGen和Terasort测试程序为例。$HADOOP_HOME/etc/hadoop/hadoop-env.sh
中增加如下的环境变量配置以开启调试然后在IDEA中
Run
->Edit Configurations
增加如下配置: 注意图中红框的配置,其中,module classpath
要选正确,由于我调试的TeraGen
是属于mapreduce-examples
module,所以选在这个。 昨晚上面的配置,就可以在服务器上启动MapReduce TeraGen应用: 可以看出应用已经监听到调试端口5005
了。 然后,在代码中添加断点,然后在IDEA中点击Run
->Debug 'hadoop-remote'
就可以启动调试了