1 概述
我们一般都会将Hadoop部署到服务器中,那么就会出现在Windows中无法直接运行MapReduce任务,需要先将MapReduce任务导出为jar包,然后上传到服务器中运行,运行命令:
$hadoop jar [jar文件] [main启动类] [输入文件] [输出文件]
注:main启动类需要是类的全限定名
但是通过这种方式执行MapReduce任务,我们无法断点调试源代码的执行过程,其实我们可以通过远程调试的方式来解决。
2 解决思路
2.1 服务端启动监听服务
要想通过远程断点调试,那么首先得在远程服务器端启动MapReduce任务的时候需要先暂停并开启一个监听服务,等待客户端的连接调试,可以通过设置运行时JVM的参数来搞定
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000
注:该命令参数是JDK自带的,可以通过 java -agentlib:jdwp=help 来查看agentlib各参数的具体说明,其中address=8000表示监听端口为8000
2.2 参数应该配置到哪里呢?
MapReduce任务是通过hadoop jar命令启动执行的,那么分析hadoop安装目录中的bin目录下的hadoop运行脚本,可以找到在脚本中执行程序前有hadoop的JVM运行参数设置,这里我们可以设置到HADOOP_CLIENT_OPTS参数中,我们可以在当前shell中直接通过export命令来临时添加一个环境变量
3【总结】远程调试配置步骤
经过上面分析那么不难看出,服务端只需要配置一个运行时参数即可,然后就可以通过IDEA开发工具来远程调试了,具体配置步骤如下:
3.1 远程服务端配置
(1)服务器端添加一个临时环境变量
$export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000"
(2)服务器端执行MapReduce任务,如
$hadoop jar mapreduce-task.jar com.os.china.mapreduce.weather.JobRun /file/weather.txt /out
此时可以发现启动程序暂定了并且开启了服务监听端口8000
3.2 Windows本地IDEA中远程调试配置
(1)在IDEA中新建一个远程Debug调试配置
(2)配置完点击ok
注:Host:参数配置远程服务器的ip地址,Port:远程服务器监听端口
(3)Debug运行即可开始远程的调试MapReduce任务执行过程了