官术网_书友最值得收藏!

1.3.2 斷點調(diào)試代碼

本節(jié)主要介紹遠程斷點調(diào)試代碼。進行遠程斷點調(diào)試時,首先需要部署一套Hadoop環(huán)境,偽分布式和分布式都可以。當然,也可以遠程斷點調(diào)試線上環(huán)境。其次,要保證1.3節(jié)開頭所講的源碼閱讀環(huán)境正常。

遠程斷點調(diào)試代碼分為三步:第一步是在遠程代碼端設(shè)置一些Java啟動參數(shù),第二步是在IDEA中設(shè)置遠程服務的IP地址與端口,第三步是在遠程代碼服務器上啟動相關(guān)進程,然后在IDEA中進行斷點調(diào)試。

假如要調(diào)試Hadoop命令,需先在HADOOP_HOME/bin/hadoop文件中添加如下代碼:

HADOOP_OPTS="$HADOOP_OPTS -Xdebug -
  Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8888"

添加之后的結(jié)果如下:

HADOOP_OPTS="$HADOOP_OPTS -
  Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,NullAppender}"
# 將代碼添加在下面
HADOOP_OPTS="$HADOOP_OPTS -Xdebug -
  Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8888"

export CLASSPATH=$CLASSPATH

# 執(zhí)行Hadoop相關(guān)命令
exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "$@"

然后執(zhí)行Hadoop命令,例如hadoop fs -ls /tmp,此時ls的執(zhí)行過程會被卡住,提示Listening for transport dt_socket at address: 8888,這表明端口8888處于監(jiān)聽狀態(tài),可以接收來自IDEA的斷點調(diào)試請求。

接著在IDEA中找到要進行斷點調(diào)試的主類,如果執(zhí)行Hadoop命令時輸入的參數(shù)是fs,則在HADOOP_HOME/bin/hadoop文件中找fs對應的主類FsShell,代碼如下:

if [ "$COMMAND" = "fs" ] ; then CLASS=org.apache.hadoop.fs.FsShell

在IDEA中找到FsShell主類(可以通過快捷鍵Command+O或者Ctrl+N)之后,配置其遠程斷點調(diào)試。具體步驟為選擇RunEdit Configurations,在彈出的頁面左上角處單擊加號+,然后添加Remote選項,如圖1-8所示。

圖1-8 添加Remote選項

添加Remote選項之后,對其進行簡單修改就行,這里主要修改Host、Port和module's classpath。將Name改為FsShell,這是為了與其他任務進行區(qū)分,因為Name的默認值為Unnamed。將Host改為遠程服務器的IP地址或者主機名,Port改為遠程服務設(shè)置的端口,這兩個值是在HADOOP_HOME/bin/hadoop文件中配置的IP地址和端口。將module's classpath改為FsShell所在的模塊包,如圖1-9所示。

圖1-9 修改Remote選項

修改好之后,就可以設(shè)置斷點進行遠程斷點調(diào)試了。

主站蜘蛛池模板: 比如县| 巴塘县| 望奎县| 扎鲁特旗| 郴州市| 九寨沟县| 台东县| 江孜县| 景泰县| 抚宁县| 外汇| 房产| 梧州市| 达州市| 仲巴县| 黑山县| 张家界市| 炎陵县| 烟台市| 杭锦后旗| 金塔县| 巧家县| 宜春市| 留坝县| 虞城县| 平谷区| 张家界市| 孝义市| 龙门县| 博野县| 洛阳市| 瑞安市| 车险| 盐城市| 荥阳市| 共和县| 固镇县| 孙吴县| 阳江市| 蒙自县| 崇州市|