App下載

Hadoop 如何使用IntelliJ IDEA進(jìn)行遠(yuǎn)程調(diào)試代碼

猿友 2021-07-19 13:45:57 瀏覽數(shù) (3415)
反饋

一 .前言

昨天晚上遇到一個(gè)奇葩的問(wèn)題, 搞好的環(huán)境DataNode啟動(dòng)報(bào)錯(cuò). 報(bào)錯(cuò)信息提示的模棱兩可,沒(méi)辦法定位原因.
辦法,開(kāi)啟遠(yuǎn)程調(diào)試…

注意 : 開(kāi)啟遠(yuǎn)程調(diào)試的代碼,必須與本地idea的代碼必須保持一致.

二 .服務(wù)器端配置

2.1. 設(shè)置啟動(dòng)遠(yuǎn)程debug端口

修改 服務(wù)器上的配置文件 ${HADOOP_HOME}/etc/hadoop/hadoop-env.sh 增加 環(huán)境變量即可.

組件 環(huán)境變量設(shè)置
NameNode export HADOOP_NAMENODE_OPTS="-agentlib:jdwp=transport=dt_socket,address=8888,server=y,suspend=y"
DataNode export HADOOP_DATANODE_OPTS="-agentlib:jdwp=transport=dt_socket,address=9888,server=y,suspend=y"
ResourceManager export YARN_RESOURCEMANAGER_OPTS="-agentlib:jdwp=transport=dt_socket,address=10888,server=y,suspend=y"
NodeManager export YARN_NODEMANAGER_OPTS="-agentlib:jdwp=transport=dt_socket,address=10888,server=y,suspend=y"

2.2. 具體操作

1.編輯服務(wù)器上的配置文件[${HADOOP_HOME}/etc/hadoop/hadoop-env.sh`]
隨便加上一行[記住端口!!!]:

export HADOOP_DATANODE_OPTS="-agentlib:jdwp=transport=dt_socket,address=9888,server=y,suspend=y"

啟動(dòng)服務(wù)即可 [啟動(dòng)完, JVM返現(xiàn)有jdwp的配置,會(huì)自動(dòng)阻塞, 等到idea調(diào)試連接.].

因?yàn)槲乙{(diào)試的是DataNode .
所以啟動(dòng)命令為:

cd ${HADOOP_HOME}/sbin

# 啟動(dòng)datanode
sh hadoop-daemon.sh start datanode

查看日志

為了便于觀察報(bào)錯(cuò)信息 . 打開(kāi)datanode相關(guān)的 日志, 使用命令進(jìn)行查看就可以了.

到這里,服務(wù)端配置就完成了.

三 .Idea配置

將與服務(wù)器同步的代碼導(dǎo)入到idea中, 導(dǎo)入完成, 不編譯,不管報(bào)錯(cuò)信息…
只要導(dǎo)入到idea , 等idea自己構(gòu)建完就可以了…

3.1. 根據(jù)報(bào)錯(cuò)信息定位到斷點(diǎn)所在的位置 報(bào)錯(cuò)信息如下:

2021-03-27 22:47:51,949 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in secureMain
java.lang.RuntimeException: Cannot start secure DataNode due to incorrect config. See https://cwiki.apache.org/confluence/display/HADOOP/Secure+DataNode for details.
 at org.apache.hadoop.hdfs.server.datanode.DataNode.checkSecureConfig(DataNode.java:1523)
 at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:1376)
 at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:501)
 at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:2806)
 at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:2714)
 at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:2756)
 at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:2900)
 at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:2924)
2021-03-27 22:47:51,959 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 1: java.lang.RuntimeException: Cannot start secure DataNode due to incorrect config. See https://cwiki.apache.org/confluence/display/HADOOP/Secure+DataNode for details.

可以看到是 org.apache.hadoop.hdfs.server.datanode.DataNode.checkSecureConfig方法.
所以直接找到代碼, 加上斷點(diǎn)即可…

2021040309241660

3.2. 配置遠(yuǎn)程連接

-點(diǎn)擊 Edit Configurations....

2021040309241661

建立遠(yuǎn)程debug就可以了
主要是端口一定要跟服務(wù)端配置的端口要匹配.

2021040309241662

第0步, 選擇Remote 的截圖.

2021040309241663

3.3. 啟動(dòng)調(diào)試

-選擇剛才的配置,啟動(dòng)debug調(diào)試即可. 然后就可以等待連接到服務(wù)器,進(jìn)行DEBUG操作了…

2021040309241664


到此這篇關(guān)于Hadoop 如何使用IntelliJ IDEA進(jìn)行遠(yuǎn)程調(diào)試代碼的文章就介紹到這了,想要了解更多IntelliJ IDEA軟件的操作內(nèi)容請(qǐng)搜索W3Cschool以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持我們!


1 人點(diǎn)贊