如何在本地調(diào)試你的 Spark Job

生產(chǎn)環(huán)境的 Spark Job 都是跑在集群上的,畢竟 Spark 為大數(shù)據(jù)而生辛孵,海量的數(shù)據(jù)處理必須依靠集群驮樊。但是在開發(fā)Spark的的時候梆造,不可避免我們要在本地進行一些開發(fā)和測試工作,所以如何在本地用好Spark也十分重要固耘,下面給大家分享一些經(jīng)驗题篷。

首先你需要在本機上安裝好了Java,Scala和Spark厅目,并配置好了環(huán)境變量番枚。詳情請參考官方文檔或其他教程。

spark-shell

本地運行Spark最直接的方式就是在命令行里面運行spark-shell损敷,成功后你將看到如下信息:

spark-shell

首先可以仔細(xì)閱讀一下命令行的提示信息葫笼,

Picked up _JAVA_OPTIONS: -Xmx512M -Xms512M  // _JAVA_OPTIONS是我在系統(tǒng)環(huán)境變量里面設(shè)置的值
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties // 告訴你log4j使用配置
Setting default log level to "WARN". // log級別
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel). // 如何調(diào)整log級別
Spark context Web UI available at http://localhost:4040 // 本地訪問Web UI的地方,很重要
Spark context available as 'sc' (master = local[*], app id = local-1590066004392). // master配置和 sc變量
Spark session available as 'spark'. // spark變量

可以發(fā)現(xiàn)必要的信息都已經(jīng)給我們提示好了拗馒,不過不知道哪里養(yǎng)成的壞習(xí)慣路星,程序的提示信息我通常都是跳過不看的,其實這樣很不好诱桂,希望你沒有這種壞習(xí)慣洋丐。

我們再仔細(xì)看一下 master = local[*] 這個配置,它告訴Spark在運行中可以使用多少個核挥等,詳細(xì)如下:

  • local: 所有計算都運行在一個線程當(dāng)中友绝,沒有任何并行計算。
  • local[n]: 指定使用n個線程來運行計算肝劲。
  • local[*]: 這種模式直接幫你按照cpu最多cores來設(shè)置線程數(shù)了迁客。

你可以在這個命令行像使用python解釋器一樣寫scala代碼郭宝,可以及時看到程序的運行結(jié)果,這種模式通常在最初學(xué)習(xí)spark的時候使用哲泊,或者你想要驗證一些臨時剩蟀、簡短的spark代碼,可以使用這種方式切威。

Spark Web UI

在你使用Spark 期間育特,可以通過 http://localhost:4040 來訪問Web UI.
這是Spark提供的非常強大的一個工具,它可以看到運行過程中的豐富細(xì)節(jié)先朦,網(wǎng)上有很多資料可以參考缰冤,這里不詳細(xì)介紹。Spark Web UI

值得一提的是喳魏,Web UI 只在你SparkSession活躍期間可以訪問棉浸,當(dāng)你的job完成時這個地址就關(guān)閉了。當(dāng)你打開一個spark-shell的時候刺彩,你的spark session會一直活躍迷郑,所以可以隨時訪問Web UI;當(dāng)你關(guān)閉命令行的時候就不可以了创倔。 當(dāng)然你也可以通過修改配置保存這些信息嗡害,可以讓你在程序退出后依然有辦法從Web UI查看,但操作起來有點復(fù)雜畦攘,并且一般用的頻率小霸妹,就不推薦了。

Jupyter Notebook

比spark-shell更好的一種方式是使用Notebook知押,Notebook叹螟。 首先你可以在本機安裝Anaconda,安裝完之后自帶Jupyter Notebook台盯,但是它默認(rèn)只支持python 的kernel罢绽,也就是說只能寫python,為了能寫spark job(實際上是Scala腳本)需要再安裝一些插件静盅,插件其實很多有缆,我找到了一種非常簡便的方法,推薦給大家:

spylon-kernel

按照上面的教程安裝完之后温亲,你打開Notebook棚壁,再new 下面可以看到一個新的kernel選項

scala kernel

新建之后就可以寫spark job了。

顯然Notebook比命令行的方式好的多栈虚,不但可以執(zhí)行代碼袖外,還可以修改、保存魂务、分享曼验,本地調(diào)試一些小的程序時候或者演示泌射、驗證一些新功能的時候首選這種方式。

第一次啟動scala解釋器的時候時間會比較久鬓照,請耐心等待熔酷。查看你的notebook命令行輸出,是否忘了配置 SPARK_HOME 環(huán)境變量豺裆?

成功運行之后你將看到如下信息:

notebook

同樣拒秘,在你的Notebook運行期間你也可以到 http://localhost:4040 頁面查看Spark Web UI.

IDEA

當(dāng)然,你也可以在IDEA 中寫代碼并測試臭猜,這個更接近生產(chǎn)環(huán)境的工作躺酒,一般最后都要使用它寫好完整的代碼,編譯并打包為jar. IDEA的介紹請參考 IDEA中運行Java/Scala/Spark程序.

寫代碼的過程不再做介紹蔑歌,在IDEA里運行的時候同樣需要指定master為本機羹应,你有兩種方式可以使用:一是在程序的代碼里直接設(shè)置,另外一種是在VM參數(shù)中添加次屠。建議選擇后者园匹。

Run -> Edit Configurations -> VM Options: -Dspark.master=local[6]

另外你還可以增加一個命令行參數(shù),例如: --local, 這樣你可以在腳本中方便地輸出一些只有你在本地想看的信息劫灶。

// 檢查命令行參數(shù)裸违,賦值給local變量,方便測試一些本地信息
if(arg.startsWith("--local"))
{
    local = true
}

最后浑此,當(dāng)你在IDEA里面運行Spark Job的時候吨述,運行結(jié)束之后Web UI的端口會自動關(guān)閉允跑,所以如果你想要在程序運行完的一段時間內(nèi)還可以看到這些信息(通常都是需要的),你需要在程序結(jié)束的位置加上如下語句:

if(local)
{
    System.in.read
    spark.stop()
}

如果你喜歡我的文章牺弄,歡迎到我的個人網(wǎng)站關(guān)注我料饥,非常感謝蒲犬!

?著作權(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