中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hadoop調試源代碼

發布時間:2020-08-02 09:13:28 來源:網絡 閱讀:840 作者:996440550 欄目:大數據

本節介紹兩種調試Hadoop源代碼的方法:利用Eclipse遠程調試工具和打印調試日志。這兩種方法均可以調試偽分布式工作模式和完全分布式工作模式下的Hadoop。本節主要介紹偽分布式工作模式下的Hadoop調試方法。

(1)利用Eclipse進行遠程調試

下面以調試ResourceManager為例,介紹利用Eclipse遠程調試的基本方法,這可分兩步進行。

步驟1 調試模式下啟動Hadoop。

在Hadoop安裝目錄下運行如下的Shell腳本:

export YARN_NODEMANAGER_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8788, server=y,suspend=y"

sbin/start-all.sh

運行了腳本后會看到Shell命令行終端顯示如下信息:

Listening for transport dt_socket at address: 8788

此時表明ResourceManager處于監聽狀態,直到收到debug確認信息。

步驟2 設置斷點。

在前面新建的Java工程“hadoop-2.0”中,找到ResourceManager相關代碼,并在感興趣的地方設置一些斷點。

步驟3 在Eclipse中調試Hadoop程序。

在Eclipse的菜單欄中,依次選擇 “Run”→“Debug Configurations”→“Remote Java Applications”,并按照要求填寫遠程調試器名稱(自己定義一個即可),ResourceManager所在host以及監聽端口號等信息,并選擇Hadoop源代碼工程,便可進入調試模式。

調試過程中,ResourceManager輸出的信息被存儲到日志文件夾下的yarn-XXX-resourcemanager-localhost.log文件(XXX為當前用戶名)中,可通過以下命令查看調試過程中打印的日志:

tail -f logs/yarn-XXX-resourcemanager-localhost.log

(2)打印Hadoop調試日志

Hadoop使用了Apache log4j作為基本日志庫,該日志庫將日志分別5個級別,分別為DEBUG、INFO、WARN、ERROR和FATAL。這5個級別是有順序的,即DEBUG < INFO < WARN < ERROR < FATAL,分別用來指定日志信息的重要程度。日志輸出規則為:只輸出級別不低于設定級別的日志信息,比如若級別設定為INFO,則INFO、WARN、ERROR和FATAL級別的日志信息都會輸出,但級別比INFO低的DEBUG則不會輸出。

在Hadoop源代碼中,大部分Java文件中存在調試日志(DEBUG級別日志),但默認情況下,日志級別是INFO,為了查看更詳細的運行狀態,可采用以下幾種方法打開DEBUG日志。

方法1 使用Hadoop Shell命令。

可使用Hadoop腳本中的daemonlog命令查看和修改某個類的日志級別,比如,可通過以下命令查看NodeManager類的日志級別:

bin/hadoop daemonlog -getlevel ${nodemanager-host}:8042 \

org.apache.hadoop.yarn.server.nodemanager.NodeManager

可通過以下命令將NodeManager類的日志級別修改為DEBUG:

bin/hadoop daemonlog -setlevel ${nodemanager-host}:8042 \

org.apache.hadoop.yarn.server.nodemanager.NodeManager DEBUG

其中,nodemanager-host為NodeManager服務所在的host,8042是NodeManager的HTTP端口號。

方法2 通過Web界面。

用戶可以通過Web界面查看和修改某個類的日志級別,比如,可通過以下URL修改NodeManager類的日志級別:

http://${nodemanager-host}:8042/logLevel

方法3 修改log4j.properties文件。

以上兩種方式只能暫時修改日志級別,當Hadoop重啟后會被重置,如果要永久性改變日志級別,可在目標節點配置目錄下的log4j.properties文件中添加以下配置選項:

log4j.logger.org.apache.hadoop.yarn.server.nodemanager.NodeManager=DEBUG

此外,有時為了專門調試某個Java文件,需要把該文件的相關日志輸出到一個單獨文件中,可在log4j.properties中添加以下內容:

#定義輸出方式為自定義的TTOUT

log4j.logger. org.apache.hadoop.yarn.server.nodemanager.NodeManager=DEBUG,TTOUT

#設置TTOUT的輸出方式為輸出到文件

log4j.appender.TTOUT =org.apache.log4j.FileAppender

#設置文件路徑

log4j.appender.TTOUT.File=${hadoop.log.dir}/NodeManager.log

#設置文件的布局

log4j.appender.TTOUT.layout=org.apache.log4j.PatternLayout

#設置文件的格式

log4j.appender.TTOUT.layout.ConversionPattern=%d{ISO8601} %p %c: %m%n

這些配置選項會把NodeManager.java中的DEBUG日志寫到日志目錄下的NodeManager.log文件中。

在閱讀源代碼的過程中,為了跟蹤某個變量值的變化,讀者可能需要自己添加一些DEBUG日志。在Hadoop源代碼中,大部分類會定義一個日志打印對象,通過該對象可打印各個級別的日志。比如,在NodeManager中用以下代碼定義對象LOG:

public static final Log LOG = LogFactory.getLog(NodeManager.class);

用戶可使用LOG對象打印調試日志。比如,可在NodeManager的main函數首行添加以下代碼:

LOG.debug("Start to lauch NodeManager...");

然后重新編譯Hadoop源代碼,并將org.apache.hadoop.yarn.server.nodemanager.NodeManager的調試級別修改為DEBUG,重新啟動Hadoop后便可以看到該調試信息。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

山阴县| 朝阳市| 象州县| 弥渡县| 万荣县| 乐至县| 犍为县| 华宁县| 巴楚县| 淮南市| 商丘市| 德清县| 宜都市| 栾川县| 边坝县| 宕昌县| 西安市| 潜江市| 库伦旗| 清涧县| 布尔津县| 鸡东县| 凤庆县| 司法| 瑞金市| 柳河县| 蓬溪县| 南汇区| 牡丹江市| 朝阳县| 马边| 古浪县| 凤凰县| 万载县| 镇雄县| 枣阳市| 静宁县| 宁南县| 乐平市| 长治县| 射洪县|