如何在Mac使用Intellij idea搭建远程Hadoop开发环境

如何在Mac使用Intellij idea搭建远程Hadoop开发环境,第1张

(1)准备工作

1) 安装JDK 6或者JDK 7

2) 安装scala 2.10.x (注意版本)

2)下载Intellij IDEA最新版(本文以IntelliJ IDEA Community Edition 13.1.1为例说明,不同版本,界面布局可能不同)

3)将下载的Intellij IDEA解压后,安装scala插件,流程如下:

依次选择“Configure”–> “Plugins”–>“Browse repositories”,输入scala,然后安装即可

(2)搭建Spark源码阅读环境(需要联网)

一种方法是直接依次选择“import project”–> 选择spark所在目录 –>

“SBT”,之后intellij会自动识别SBT文件,并下载依赖的外部jar包,整个流程用时非常长,取决于机器的网络环境(不建议在windows

下 *** 作,可能遇到各种问题),一般需花费几十分钟到几个小时。注意,下载过程会用到git,因此应该事先安装了git。

第二种方法是首先在linux *** 作系统上生成intellij项目文件,然后在intellij IDEA中直接通过“Open

Project”打开项目即可。在linux上生成intellij项目文件的方法(需要安装git,不需要安装scala,sbt会自动下载)是:在

spark源代码根目录下,输入sbt/sbt gen-idea

注:如果你在windows下阅读源代码,建议先在linux下生成项目文件,然后导入到windows中的intellij IDEA中。

(3)搭建Spark开发环境

在intellij IDEA中创建scala project,并依次选择“File”–> “project structure”

–> “Libraries”,选择“+”,将spark-hadoop

对应的包导入,比如导入spark-assembly_2.10-0.9.0-incubating-hadoop2.2.0.jar(只需导入该jar

包,其他不需要),如果IDE没有识别scala 库,则需要以尘芦模同样方式将scala库导入。之后开发scala程序即可:

编写完scala程序后,可以直接在intellij中,以local模式运派缓行,方法如下:

点击“Run”–>哗并 “Run Configurations”,在d出的框中对应栏中填写“local”,表示将该参数传递给main函数,如下图所示,之后点击“Run”–>“Run”运行程序即可。

如果想把程序打成jar包,通过命令行的形式运行在spark 集群中,可以按照以下步骤 *** 作:

依次选择“File”–> “Project Structure” –>“Artifact”,选择“+”–>

“Jar” –> “From Modules with

dependencies”,选择main函数,并在d出框中选择输出jar位置,并选择“OK”。

最后依次选择“Build”–> “Build Artifact”编译生成jar包。

完全可以,我所在的实验室很多虚陆同学就用mac开发,mac OS也是Unix *** 作系统家族的一元,当然可以的。windows下安装差弯顷闹培CyWin也可以进行Hadoop开发,详细的配置过程,有很多帖子,很方便找到。

配置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。

配置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 $cygwinthen

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>1</value>

</property>

在Eclipse中使用方法:

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

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

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

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12417897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存