Spark應(yīng)用程序調(diào)試方法詳解

簡介

Spark是基于內(nèi)存計算的開源分布式大數(shù)據(jù)計算框架。為了更好欲低、更快地開發(fā)Spark應(yīng)用程序聪轿,開發(fā)者不僅要掌握Spark的理論基礎(chǔ)和實現(xiàn)原理,更需要掌握Spark應(yīng)用程序調(diào)試方式笛质。

Spark應(yīng)用程序調(diào)試方式有:本地調(diào)試模式、服務(wù)器調(diào)試模式骤星、遠(yuǎn)程調(diào)試模式经瓷。接下來本文會一一介紹這幾種調(diào)試方式的使用爆哑。

本地調(diào)試模式

1.

Spark本地開發(fā)工具推薦使用IntelliJ IDEA洞难。編譯工具推薦使用Maven或者IntelliJ IDEA自身編譯。IntelliJ IDEA開發(fā)Spark應(yīng)用程序和開發(fā)其他應(yīng)用程序一樣揭朝,可以進行debug調(diào)試队贱,輸出日志等等。

2.

安裝JDK和Scala潭袱。安裝版本請參考Spark官方網(wǎng)站說明柱嫌。如2.0.2版本官網(wǎng)描述Spark runs on Java 7+, Python2.6+/3.4+ and R 3.1+. For the Scala API, Spark 2.0.2 uses Scala 2.11. You willneed to use a compatible Scala version (2.11.x).

3.

安裝Spark,直接去Download Apache Spark屯换。有兩個步驟:

  • 選擇好對應(yīng)Hadoop版本的Spark版本编丘,如下圖中所示;

  • 然后點擊下圖中箭頭所指的spark-2.0.2-bin-hadoop2.7.tgz彤悔,等待下載結(jié)束即可嘉抓。

這里使用的是Pre-built的版本,意思就是已經(jīng)編譯了好了晕窑,下載來直接用就好抑片。Spark也有源碼可以下載,但是得自己去手動編譯之后才能使用杨赤。下載完成后將文件進行解壓(可能需要解壓兩次)敞斋,最好解壓到一個盤的根目錄下截汪,并重命名為Spark,簡單不易出錯植捎。并且需要注意的是衙解,在Spark的文件目錄路徑名中,不要出現(xiàn)空格焰枢,類似于“Program Files”這樣的文件夾名是不被允許的丢郊。

解壓后基本上就可以到cmd命令行下運行了。但這個時候每次運行spark-shell(Spark的命令行交互窗口)的時候医咨,都需要先cd到Spark的安裝目錄下枫匾,比較麻煩,因此可以將Spark的bin目錄添加到系統(tǒng)變量PATH中拟淮。例如我這里的Spark的bin目錄路徑為D:Sparkbin干茉,那么就把這個路徑名添加到系統(tǒng)變量的PATH中即可,方法和JDK安裝過程中的環(huán)境變量設(shè)置一致很泊。設(shè)置完系統(tǒng)變量后角虫,在任意目錄下的cmd命令行中,直接執(zhí)行spark-shell命令委造,即可開啟Spark的交互式命令行模式戳鹅。

4.

IntelliJ IDEA添加Spark發(fā)布的依賴包或者通過Maven配置Spark相關(guān)依賴。

5.

安裝Hadoop昏兆,系統(tǒng)變量設(shè)置后枫虏,就可以在任意當(dāng)前目錄下的cmd中運行spark-shell,但這個時候很有可能會碰到各種錯誤爬虱,這里主要是因為Spark是基于Hadoop的隶债,所以這里也有必要配置一個Hadoop的運行環(huán)境。在HadoopReleases里可以看到Hadoop的各個歷史版本跑筝,這里下載的Spark是基于Hadoop 2.6的(在Spark安裝的第一個步驟中死讹,我們選擇的是Pre-built for Hadoop2.6),所以這里選擇2.6.4版本曲梗。選擇好相應(yīng)版本并點擊后赞警,進入詳細(xì)的下載頁面,如下圖所示虏两,選擇圖中紅色標(biāo)記進行下載愧旦。

image

這里下載的是已經(jīng)編譯好的版本。下載并解壓到指定目錄碘举,然后到環(huán)境變量部分設(shè)置HADOOP_HOME為Hadoop的解壓目錄忘瓦,我這里是F:Program Fileshadoop,然后再設(shè)置該目錄下的bin目錄到系統(tǒng)變量的PATH下,我這里也就是F:Program Fileshadoopbin耕皮,如果已經(jīng)添加了HADOOP_HOME系統(tǒng)變量境蜕,也可以用%HADOOP_HOME%bin來指定bin文件夾路徑名。這兩個系統(tǒng)變量設(shè)置好后凌停,開啟一個新的cmd粱年,然后直接輸入spark-shell命令。

正常情況下是可以運行成功并進入到Spark的命令行環(huán)境下的罚拟,但是對于有些用戶可能會遇到空指針的錯誤台诗。這個時候,主要是因為Hadoop的bin目錄下沒有winutils.exe文件的原因造成的赐俗。這里的解決辦法是:

  • https://github.com/steveloughran/winutils選擇你安裝的Hadoop版本號拉队,然后進入到bin目錄下,找到winutils.exe文件阻逮,下載方法是點擊winutils.exe文件粱快,進入之后在頁面的右上方部分有一個Download按鈕,點擊下載即可叔扼。

  • 下載好winutils.exe后事哭,將這個文件放入到Hadoop的bin目錄下,我這里是F:Program Fileshadoopbin瓜富。在打開的cmd中輸入F:ProgramFileshadoopbinwinutils.exe chmod 777 /tmp/Hive

    這個操作是用來修改權(quán)限的鳍咱。注意前面的F:Program Fileshadoopbin部分要對應(yīng)的替換成實際你所安裝的bin目錄所在位置。經(jīng)過這幾個步驟之后与柑,然后再次開啟一個新的cmd窗口谤辜,如果正常的話,應(yīng)該就可以通過直接輸入spark-shell來運行Spark了仅胞。

6.

熟練掌握Spark的API每辟。Spark的API支持Scala、Java干旧、R和Python語言。API包括常見的變化操作算子和行動操作算子妹蔽。

Spark 服務(wù)器調(diào)試模式

spark-submit提交jar包椎眯。

將本地應(yīng)用程序打成jar包放在服務(wù)器上,在該服務(wù)器上執(zhí)行spark-submit--class com.zte.spark.example.WordCount --executor-memory 1G --total-executor-cores 3 /home/mr/SparkTest.jar /tmp/test.txt

spark-shell可以直接調(diào)試代碼胳岂。

image

spark-sql可以直接調(diào)試SQL語句编整。

image

遠(yuǎn)程調(diào)試模式

Spark遠(yuǎn)程調(diào)試模式實際上利用的是JVM的遠(yuǎn)程debug調(diào)試。有時候Spark集群環(huán)境出現(xiàn)問題乳丰,當(dāng)查看日志和WEB UI無法解決問題的時候掌测,利用遠(yuǎn)程debug進行調(diào)試是一個十分快捷和有效的方式。

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

參數(shù)含義

  • -Xdebug:告訴JVM運行在debug模式下

  • -Xrunjdwp:transport=dt_socket:指定連接方式(包括socket傳輸和內(nèi)存?zhèn)鬏攦煞N产园,其中內(nèi)存?zhèn)鬏斨恢С諻indows汞斧,而且內(nèi)存?zhèn)鬏敳恢С诌h(yuǎn)程調(diào)試)

  • address=5006:JVM在5006端口上監(jiān)聽請求夜郁。

  • server=y:y表示啟動的JVM是被調(diào)試者。如果為n粘勒,則表示啟動的JVM是調(diào)試器竞端。

  • suspend=y:y表示啟動的JVM會暫停等待,服務(wù)端被掛起庙睡,直到調(diào)試器連接上事富。n表示JVM不會暫停等待。

客戶端設(shè)置:

  • 打開IntelliJIDEA工作臺

  • 選擇“Run->Debug Configurations”菜單項

  • 選擇“Remote”乘陪,在右鍵彈出菜單中選擇“New”

image
  • 點擊OK即可统台,就可以用本地的Spark代碼調(diào)試Spark集群的功能。

服務(wù)器設(shè)置:

SPARK_MASTER_OPTS=-Xdebug-Xrunjdwp:transport=dt_socket,address=5006,server=y,suspend=n:調(diào)試Master的功能代碼啡邑。

SPARK_WORKER_OPTS=-Xdebug-Xrunjdwp:transport=dt_socket,address=5006,server=y,suspend=n:調(diào)試Worker的功能代碼饺谬。

SPARK_HISTORY_OPTS=-Xdebug-Xrunjdwp:transport=dt_socket,address=5006,server=y,suspend=n:調(diào)試History Server的功能代碼。

spark-submit谣拣、spark-sql募寨,spark-shell調(diào)試設(shè)置:

spark-submit、spark-sql森缠,spark-shell配合spark.driver.extraJavaOptions和spark.executor.extraJavaOptions參數(shù)使用拔鹰,可以遠(yuǎn)程調(diào)試Spark應(yīng)用程序和GUI命令程序。如下:

spark-submit --classcom.zte.spark.example.WordCount --driver-java-options'-Xdebug -Xrunjdwp:transport=dt_socket,address=5006,server=y,suspend=n'--executor-memory 1G --total-executor-cores 3 /home/mr/SparkTest.jar /tmp/test.txt

spark-sql --executor-memory 1Gexecutor-cores 1 --driver-java-options '-Xdebug-Xrunjdwp:transport=dt_socket,address=5006,server=y,suspend=n'

spark-shell --executor-memory 1Gexecutor-cores 1--driver-java-options '-Xdebug-Xrunjdwp:transport=dt_socket,address=5006,server=y,suspend=n'

總結(jié)

我們在日常開發(fā)中贵涵,上述幾種調(diào)試模式均需要熟練掌握并且合理使用列肢。本地調(diào)試方式適合日常開發(fā)人員在本地開發(fā),無需占用緊張的集群服務(wù)器環(huán)境宾茂,多個開發(fā)人員互不影響瓷马,本地調(diào)試在開發(fā)效率上也是最優(yōu)的。服務(wù)器調(diào)試模式適合多個應(yīng)用聯(lián)調(diào)測試和集成測試跨晴,適合做性能測試欧聘。遠(yuǎn)程調(diào)試模式主要是解決難以定位的故障,實際證明端盆,該方式也是定位問題最有效的手段之一

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末怀骤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子焕妙,更是在濱河造成了極大的恐慌蒋伦,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件焚鹊,死亡現(xiàn)場離奇詭異痕届,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門研叫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锤窑,“玉大人,你說我怎么就攤上這事蓝撇」矗” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵渤昌,是天一觀的道長虽抄。 經(jīng)常有香客問我,道長独柑,這世上最難降的妖魔是什么迈窟? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮忌栅,結(jié)果婚禮上车酣,老公的妹妹穿的比我還像新娘。我一直安慰自己索绪,他們只是感情好湖员,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瑞驱,像睡著了一般娘摔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唤反,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天凳寺,我揣著相機與錄音,去河邊找鬼彤侍。 笑死肠缨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盏阶。 我是一名探鬼主播晒奕,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼般哼!你這毒婦竟也來了吴汪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤蒸眠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后杆融,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體楞卡,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蒋腮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淘捡。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖池摧,靈堂內(nèi)的尸體忽然破棺而出焦除,到底是詐尸還是另有隱情,我是刑警寧澤作彤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布膘魄,位于F島的核電站,受9級特大地震影響竭讳,放射性物質(zhì)發(fā)生泄漏创葡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一绢慢、第九天 我趴在偏房一處隱蔽的房頂上張望灿渴。 院中可真熱鬧,春花似錦胰舆、人聲如沸骚露。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽棘幸。三九已至,卻和暖如春滨攻,著一層夾襖步出監(jiān)牢的瞬間够话,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工光绕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留女嘲,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓诞帐,卻偏偏與公主長得像欣尼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子停蕉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容