`

远程调试hadoop各组件

 
阅读更多

远程调试对应用程序开发十分有用。例如,为不能托管开发平台的低端机器开发程序,或在专用的机器上(比如服务不能中断的 Web 服务器)调试程序。其他情况包括:运行在内存小或 CUP 性能低的设备上的 Java 应用程序(比如移动设备),或者开发人员想要将应用程序和开发环境分开,等等。

为了进行远程调试,必须使用 Java Virtual Machine (JVM) V5.0 或更新版本。

JPDA 简介

Sun Microsystem 的 Java Platform Debugger Architecture (JPDA) 技术是一个多层架构,使您能够在各种环境中轻松调试 Java 应用程序。JPDA 由两个接口(分别是 JVM Tool Interface 和 JDI)、一个协议(Java Debug Wire Protocol)和两个用于合并它们的软件组件(后端和前端)组成。它的设计目的是让调试人员在任何环境中都可以进行调试。

更详细的介绍,您可以参考使用 Eclipse 远程调试 Java 应用程序

JDWP 设置

JVM本身就支持远程调试,Eclipse也支持JDWP,只需要在各模块的JVM启动时加载以下参数:

-Xdebug -Xrunjdwp:transport=dt_socket, address=8000,server=y,suspend=y

各参数的含义:

-Xdebug
启用调试特性
-Xrunjdwp
启用JDWP实现,包含若干子选项:
transport=dt_socket
JPDA front-end和back-end之间的传输方法。dt_socket表示使用套接字传输。
address=8000
JVM在8000端口上监听请求,这个设定为一个不冲突的端口即可。
server=y
y表示启动的JVM是被调试者。如果为n,则表示启动的JVM是调试器。
suspend=y
y表示启动的JVM会暂停等待,直到调试器连接上才继续执行。suspend=n,则JVM不会暂停等待。

配置hbase远程调试

打开/etc/hbase/conf/hbase-env.sh,找到以下内容:

# Enable remote JDWP debugging of major HBase processes. Meant for Core Developers 
# export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8070"
# export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8071"
# export HBASE_THRIFT_OPTS="$HBASE_THRIFT_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8072"
# export HBASE_ZOOKEEPER_OPTS="$HBASE_ZOOKEEPER_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8073"

如果想远程调式hbase-master进程,请去掉对HBASE_MASTER_OPTS的注释,其他依次类推。注意,我这里使用的是cdh-4.3.0中的hbase。


注意(20130817更新):

如果启动hbase时提示check your java command line for duplicate jdwp options,请把上面参数加到/usr/lib/hbase/bin/hbase中if else对应分支中去。

例如,如果你想调试regionserver,请把下面代码加到elif [ "$COMMAND" = "regionserver" ] ; then中去:

export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8071"

配置hive远程调试

停止hive-server2进程,然后以下面命令启动hive-server2

hive --service hiveserver --debug

进程会监听在8000端口等待调试连接。如果想更改监听端口,可以修改配置文件:${HIVE_HOME}bin/ext/debug.sh

如果Hadoop是0.23以上版本,debug模式启动Cli会报错:

ERROR: Cannot load this JVM TI agent twice, check your java command line for duplicate jdwp options.

打开${Hadoop_HOME}/bin/hadoop,注释掉以下代码

# Always respect HADOOP_OPTS and HADOOP_CLIENT_OPTS
HADOOP_OPTS="$HADOOP_OPTS $HADOOP_CLIENT_OPTS"

配置yarn远程调试

请在以下代码添加调试参数:

if [ "$COMMAND" = "classpath" ] ; then
if $cygwin; then
CLASSPATH=`cygpath -p -w "$CLASSPATH"`
fi
echo $CLASSPATH
exit
elif [ "$COMMAND" = "rmadmin" ] ; then
CLASS='org.apache.hadoop.yarn.client.RMAdmin'
YARN_OPTS="$YARN_OPTS $YARN_CLIENT_OPTS"
elif [ "$COMMAND" = "application" ] ; then
class="org".apache.hadoop.yarn.client.cli.ApplicationCLI
YARN_OPTS="$YARN_OPTS $YARN_CLIENT_OPTS"
elif [ "$COMMAND" = "node" ] ; then
class="org".apache.hadoop.yarn.client.cli.NodeCLI
YARN_OPTS="$YARN_OPTS $YARN_CLIENT_OPTS"
elif [ "$COMMAND" = "resourcemanager" ] ; then
CLASSPATH=${CLASSPATH}:$YARN_CONF_DIR/rm-config/log4j.properties
CLASS='org.apache.hadoop.yarn.server.resourcemanager.ResourceManager'
YARN_OPTS="$YARN_OPTS $YARN_RESOURCEMANAGER_OPTS"
if [ "$YARN_RESOURCEMANAGER_HEAPSIZE" != "" ]; then
JAVA_HEAP_MAX="-Xmx""$YARN_RESOURCEMANAGER_HEAPSIZE""m"
fi
elif [ "$COMMAND" = "nodemanager" ] ; then
CLASSPATH=${CLASSPATH}:$YARN_CONF_DIR/nm-config/log4j.properties
CLASS='org.apache.hadoop.yarn.server.nodemanager.NodeManager'
YARN_OPTS="$YARN_OPTS -server $YARN_NODEMANAGER_OPTS"
if [ "$YARN_NODEMANAGER_HEAPSIZE" != "" ]; then
JAVA_HEAP_MAX="-Xmx""$YARN_NODEMANAGER_HEAPSIZE""m"
fi
elif [ "$COMMAND" = "proxyserver" ] ; then
CLASS='org.apache.hadoop.yarn.server.webproxy.WebAppProxyServer'
YARN_OPTS="$YARN_OPTS $YARN_PROXYSERVER_OPTS"
if [ "$YARN_PROXYSERVER_HEAPSIZE" != "" ]; then
JAVA_HEAP_MAX="-Xmx""$YARN_PROXYSERVER_HEAPSIZE""m"
fi

例如: 如果你想调试resourcemanager代码,请在elif [ "$COMMAND" = "resourcemanager" ] 分支内添加如下代码:

YARN_RESOURCEMANAGER_OPTS="$YARN_RESOURCEMANAGER_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6001"

其他进程,参照上面即可。

注意:端口不要冲突。

配置mapreduce远程调试

如果想要调试Map 或Reduce Task,则修改bin/hadoop已经没用了,因为bin/hadoop中没有Map Task的启动参数。

此时需要修改mapred-site.xml

<property> 
    <name>mapred.child.java.opts</name> 
    <value>-Xmx800m -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000</value> 
</property

在一个TaskTracker上,只能启动一个Map Task或一个Reduce Task,否则启动时会有端口冲突。因此要修改所有TaskTracker上的conf/hadoop-site.xml中的配置项:

<property>
    <name>mapred.tasktracker.map.tasks.maximum</name>
    <value>1</value>
</property>
<property>
    <name>mapred.tasktracker.reduce.tasks.maximum</name>
    <value>0</value>
</property>

在Eclipse中使用方法:

  1. 打开eclipse,找到Debug Configurations...,添加一个Remout Java Application:

  2. 在source中可以关联到hive的源代码,然后,单击Debug按钮进入远程debug模式。

  3. 编写个jdbc的测试类,运行代码,这时候因为hive-server2端没有设置端点,故程序可以正常运行直到结束。

  4. 在hive代码中设置一个断点,如ExecDriver.javaexecute方法中设置断点,然后再运行jdbc测试类。

 

分享到:
评论

相关推荐

    winutils.exe/hadoop.dll下载,IDE调试hadoop程序。

    同时,掌握如何配置IDE以进行远程调试,以及熟悉SSH工具的使用,也是提高工作效率的重要技能。通过这些工具和技术,开发者可以在保持本地开发便利性的同时,无缝地与远程Hadoop集群交互,从而实现高效的大数据开发...

    hadoop远程访问资料

    8. **Eclipse连接远程Hadoop集群**:通过配置Eclipse中的Hadoop连接参数(如NameNode和JobTracker的地址),开发者可以在本地开发环境中调试和测试代码,而实际运行在远程集群上。 9. **环境设置**:在Windows系统...

    如何使用eclipse调试Hadoop作业

    本篇文章将详细阐述如何利用Eclipse有效地调试Hadoop作业,以及与之相关的源码分析和工具使用技巧。 首先,调试Hadoop作业的准备工作至关重要。你需要确保已经安装并配置好Eclipse,同时在本地或远程服务器上安装了...

    在Windwos环境下使用Eclipse调试hadoop云计算环境[亲测成功]

    4. **配置远程调试**:为了能够在Eclipse中远程调试运行在Hadoop集群上的程序,需要在Hadoop配置文件中启用远程调试功能。 5. **运行和调试**:在Eclipse中运行MapReduce程序,并利用Eclipse的调试工具进行调试,...

    myEclipse10.0与hadoop集群远程连接

    Hadoop的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce,它们分别负责数据的分布式存储和并行处理。为了实现远程连接,你需要确保Hadoop集群已经正确配置了SSH(Secure Shell)服务,因为...

    hadoop-eclipse2.5.2、hadoop-eclipse2.6.0、hadoop-eclipse2.6.5

    Eclipse是流行的Java集成开发环境(IDE),而Hadoop-Eclipse插件是将Hadoop与Eclipse结合的工具,允许开发者在Eclipse中直接创建、运行和调试Hadoop MapReduce程序。这些文件"hadop-eclipse-plugin-2.5.2.jar"、...

    pc机连接集群的HADOOP_HOME

    为了在Eclipse中调试和运行Hadoop程序,你需要安装Hadoop插件(如Hadoop插件for Eclipse或Eclipse for Big Data Developers),同时确保`HADOOP_HOME`已经正确配置,这样Eclipse才能正确地构建和连接到Hadoop集群。...

    hadoop2.6.0源码和eclipse插件

    为了便于在Eclipse中开发和调试Hadoop项目,压缩包还提供了`hadoop-eclipse-plugin-2.6.0.jar`,这是一个Eclipse插件。安装这个插件后,开发者可以在Eclipse中直接创建、运行和调试Hadoop MapReduce程序。插件提供了...

    修改hadoop中的io写的,远程调用对象的东西。

    标签中的"源码"和"工具"提示我们,可能需要查看Hadoop的源代码来理解其内部工作原理,并利用Hadoop提供的工具(如Hadoop命令行工具、Hadoop配置工具等)进行调试和测试。 8. **案例研究**: 博文链接中提到的内容...

    hadoop-eclipse-plugin插件和hadoop.dll和winutile.exe.zip

    通过这个插件,你可以直接在Eclipse中创建、编辑、运行和调试Hadoop作业,无需离开IDE。安装插件后,用户可以在Eclipse的"Package Explorer"视图中看到HDFS的文件系统结构,并能直接右键创建新的Hadoop项目。 2. **...

    hadoop2.6_Win_x64-master.zip

    描述 "使用IDEA远程连接Hadoop时,需要的WINS下的Hadoop,以及hadoop.dll和winutils.exe插件" 指出这个压缩包特别适用于开发人员使用IntelliJ IDEA(简称IDEA)进行远程调试和操控Hadoop集群。在Windows系统中,由于...

    hadoop-common-2.2.0-bin_32bit_&_64bit

    描述中提到的“Windows下远程调试Hadoop”,在Hadoop集群中,开发人员可能需要通过远程调试工具对运行在集群节点上的应用程序进行调试。在Windows环境中,由于默认配置问题,可能会遇到运行时错误,如空指针异常...

    hadoop-eclipse-plugin-2.7.2.rar

    Hadoop Eclipse Plugin是Apache Hadoop项目的一个重要组成部分,主要用于在Eclipse集成开发环境中方便地创建、管理和调试Hadoop MapReduce程序。2.7.2版本是这个插件的一个稳定版本,提供了对Hadoop 2.x系列的支持。...

    hadoop3.0+工具

    - 安装Eclipse插件:例如,Hadoop插件HDInsight Tools可以帮助开发者在Eclipse中编写、调试Hadoop MapReduce程序。 - 配置Hadoop连接:在Eclipse中设置Hadoop的安装路径,以便编译和运行MapReduce程序。 - 创建...

    传智黑马赵星老师hadoop七天课程资料笔记-第三天(全)

    5. **hadoop远程调试.txt** - 文件名暗示了如何远程调试Hadoop程序,这对于开发者在分布式环境中解决问题至关重要,可能涵盖了使用IDE(如Eclipse)的远程调试配置和技巧。 6. **MR执行流程笔记.txt** - MapReduce...

    eclipse开发hadoop2.5.2所用到都jar

    为了在Eclipse中顺利地构建、运行和调试Hadoop项目,我们需要安装一系列的JAR库。这些JAR文件包含了Hadoop的核心组件以及依赖的第三方库,确保开发者能够访问Hadoop的API并进行分布式计算。 标题 "eclipse开发...

    Eclipse Hadoop2.7插件

    3. **运行/调试支持**:可以直接在Eclipse内提交MapReduce任务进行运行或调试,无需离开IDE,这包括本地模式和远程集群模式。 4. **资源管理**:通过插件可以方便地查看和管理Hadoop集群的资源状态,包括节点信息、...

    Hadoop环境搭建 附件.rar

    在IT行业中,Hadoop是一个广泛使用的开源大数据处理框架,它基于分布式计算模型,能够处理和存储海量数据。...确保按照说明文档的指示正确导入和使用这些文件,以便在Window 7环境中顺利运行和调试Hadoop 2.6集群。

    hadoop 2.7.5 eclipse jar

    在描述中提到的 "hadoop 2.7.5 eclipse jar" 指的是一个专门用于在Eclipse环境中开发和调试Hadoop应用的插件。 Hadoop的jar包通常包含了Hadoop的核心库,包括HDFS(Hadoop Distributed File System)和MapReduce等...

    myeclipse开发hadoop插件

    本文将深入探讨如何使用MyEclipse进行Hadoop插件开发,并详细解析Hadoop-eclipse-plugin-2.6.0.jar这一关键组件。 首先,我们了解下MyEclipse。它基于Eclipse平台,扩展了对Java、Web、J2EE、数据库等多种开发需求...

Global site tag (gtag.js) - Google Analytics