集群上運(yùn)行Spark

Spark集群是主從結(jié)構(gòu)。節(jié)點(diǎn)分為驅(qū)動(dòng)器(Driver) 節(jié)點(diǎn)以及執(zhí)行器(executor) 節(jié)點(diǎn)享完。驅(qū)動(dòng)器節(jié)點(diǎn)可以和大量的執(zhí)行器節(jié)點(diǎn)進(jìn)行通信灼芭, 它們也都作為獨(dú)立的 Java 進(jìn)程運(yùn)行。驅(qū)動(dòng)器節(jié)點(diǎn)和所有的執(zhí)行器節(jié)點(diǎn)一起被稱為一個(gè) Spark 應(yīng)用(application)般又。


驅(qū)動(dòng)器節(jié)點(diǎn)

Spark驅(qū)動(dòng)器是執(zhí)行程序中的 main() 方法的進(jìn)程彼绷。它執(zhí)行用戶編寫的用來(lái)創(chuàng)建SparkContext巍佑、創(chuàng)建 RDD,以及進(jìn)行 RDD 的轉(zhuǎn)化操作和行動(dòng)操作的代碼苛预。當(dāng)啟動(dòng) Spark shell 時(shí)句狼,就啟動(dòng)了一個(gè) Spark 驅(qū)動(dòng)器程序(Spark shell 總是會(huì)預(yù)先加載一個(gè)叫作 sc 的 SparkContext 對(duì)象)。驅(qū)動(dòng)器程序一旦終止热某, Spark 應(yīng)用也就結(jié)束了腻菇。
主要職責(zé)

  • 把用戶程序轉(zhuǎn)為任務(wù):Spark 驅(qū)動(dòng)器程序負(fù)責(zé)把用戶程序轉(zhuǎn)為多個(gè)物理執(zhí)行的單元, 這些單元也被稱為任務(wù)(task)昔馋。Spark 會(huì)對(duì)邏輯執(zhí)行計(jì)劃作一些優(yōu)化筹吐,比如將連續(xù)的映射轉(zhuǎn)為流水線化執(zhí)行,將多個(gè)操作合并到一個(gè)步驟中等秘遏。 這樣 Spark 就把邏輯計(jì)劃轉(zhuǎn)為一系列步驟(stage)丘薛。而每個(gè)步驟又由多個(gè)任務(wù)組成。這些任務(wù)會(huì)被打包并送到集群中邦危。任務(wù)是 Spark 中最小的工作單元洋侨,用戶程序通常要啟動(dòng)成百上千的獨(dú)立任務(wù)。
  • 為執(zhí)行器節(jié)點(diǎn)調(diào)度任務(wù):有了物理執(zhí)行計(jì)劃之后倦蚪, Spark 驅(qū)動(dòng)器程序必須在各執(zhí)行器進(jìn)程間協(xié)調(diào)任務(wù)的調(diào)度希坚。執(zhí)行器進(jìn)程啟動(dòng)后,會(huì)向驅(qū)動(dòng)器進(jìn)程注冊(cè)自己陵且。因此裁僧,驅(qū)動(dòng)器進(jìn)程始終對(duì)應(yīng)用中所有的執(zhí)行器節(jié)點(diǎn)有完整的記錄。每個(gè)執(zhí)行器節(jié)點(diǎn)代表一個(gè)能夠處理任務(wù)和存儲(chǔ) RDD 數(shù)據(jù)的進(jìn)程慕购。Spark 驅(qū)動(dòng)器程序會(huì)根據(jù)當(dāng)前的執(zhí)行器節(jié)點(diǎn)集合聊疲, 嘗試把所有任務(wù)基于數(shù)據(jù)所在位置分配給合適的執(zhí)行器進(jìn)程。 當(dāng)任務(wù)執(zhí)行時(shí)沪悲,執(zhí)行器進(jìn)程會(huì)把緩存數(shù)據(jù)存儲(chǔ)起來(lái)获洲,而驅(qū)動(dòng)器進(jìn)程同樣會(huì)跟蹤這些緩存數(shù)據(jù)的位置, 并且利用這些位置信息來(lái)調(diào)度以后的任務(wù)殿如,以盡量減少數(shù)據(jù)的網(wǎng)絡(luò)傳輸贡珊。

執(zhí)行器節(jié)點(diǎn)

工作進(jìn)程Spark 應(yīng)用啟動(dòng)時(shí), 執(zhí)行器節(jié)點(diǎn)就被同時(shí)啟動(dòng)握截,并且始終伴隨著整個(gè) Spark 應(yīng)用的生命周期而存在飞崖。如果有執(zhí)行器節(jié)點(diǎn)發(fā)生了異常或崩潰谨胞, Spark 應(yīng)用也可以繼續(xù)執(zhí)行固歪。
主要職責(zé)

  • 它們負(fù)責(zé)運(yùn)行組成 Spark 應(yīng)用的任務(wù):并將結(jié)果返回給驅(qū)動(dòng)器進(jìn)程
  • 它們通過(guò)自身的塊管理器(Block Manager)為用戶程序中要求緩存的 RDD 提供內(nèi)存式存儲(chǔ)。 RDD 是直接緩存在執(zhí)行器進(jìn)程內(nèi)的,因此任務(wù)可以在運(yùn)行時(shí)充分利用緩存數(shù)據(jù)加速運(yùn)算牢裳。

集群管理器

Spark 依賴于集群管理器來(lái)啟動(dòng)執(zhí)行器節(jié)點(diǎn)逢防,而在某些特殊情況下,也依賴集群管理器來(lái)啟動(dòng)驅(qū)動(dòng)器節(jié)點(diǎn)蒲讯。集群管理器是 Spark 中的可插拔式組件忘朝。除了 Spark 自帶的獨(dú)立集群管理器, Spark 也可以運(yùn)行在其他外部集群管理器上判帮, 比如 YARN 局嘁。
不論你使用的是哪一種集群管理器,你都可以使用 Spark 提供的統(tǒng)一腳本 spark-submit 將你的應(yīng)用提交到那種集群管理器上晦墙。 通過(guò)不同的配置選項(xiàng)悦昵, spark-submit 可以連接到相應(yīng)的集群管理器上, 并控制應(yīng)用所使用的資源數(shù)量晌畅。

任務(wù)的大致執(zhí)行過(guò)程

  1. 用戶通過(guò) spark-submit 腳本提交應(yīng)用但指。
  2. spark-submit 腳本啟動(dòng)驅(qū)動(dòng)器程序,調(diào)用用戶定義的 main() 方法抗楔。
  3. 驅(qū)動(dòng)器程序與集群管理器通信棋凳,申請(qǐng)資源以啟動(dòng)執(zhí)行器節(jié)點(diǎn)。
  4. 集群管理器為驅(qū)動(dòng)器程序啟動(dòng)執(zhí)行器節(jié)點(diǎn)连躏。
  5. 驅(qū)動(dòng)器進(jìn)程執(zhí)行用戶應(yīng)用中的操作剩岳。 根據(jù)程序中所定義的對(duì) RDD 的轉(zhuǎn)化操作和行動(dòng)操
    作,驅(qū)動(dòng)器節(jié)點(diǎn)把工作以任務(wù)的形式發(fā)送到執(zhí)行器進(jìn)程反粥。
  6. 任務(wù)在執(zhí)行器程序中進(jìn)行計(jì)算并保存結(jié)果卢肃。
  7. 如果驅(qū)動(dòng)器程序的 main() 方法退出疲迂,或者調(diào)用了 SparkContext.stop()才顿,驅(qū)動(dòng)器程序會(huì)終止執(zhí)行器進(jìn)程,并且通過(guò)集群管理器釋放資源

spark-submit的使用
spark-submit的一些常見(jiàn)的標(biāo)記如下:



其中的標(biāo)記后可以接不同的參數(shù)尤蒿,例如對(duì)于--master可以配置的參數(shù)如下表所示:


下面是一些應(yīng)用部署的例子:

bin/spark-submit [options] <app jar | python file> [app options]
# 一般的執(zhí)行格式如上

bin/spark-submit my_script.py
# 本地執(zhí)行

bin/spark-submit --master spark://host:7077 --executor-memory 10g my_script.py
# --master 標(biāo)記指定要連接的集群 URL郑气;spark:// 表示集群使用獨(dú)立模式。稍后會(huì)討論其他的 URL 類型


$ ./bin/spark-submit \
--master spark://hostname:7077 \
--deploy-mode cluster \
--class com.databricks.examples.SparkExample \
--name "Example Program" \
--jars dep1.jar,dep2.jar,dep3.jar \
--total-executor-cores 300 \
--executor-memory 10g \
myApp.jar "options" "to your application" "go here"
# 使用獨(dú)立集群模式提交Java應(yīng)用

$ export HADOP_CONF_DIR=/opt/hadoop/conf
$ ./bin/spark-submit \
--master yarn \
--py-files somelib-1.2.egg,otherlib-4.4.zip,other-file.py \
--deploy-mode client \
--name "Example Program" \
 # 使用YARN客戶端模式提交Python應(yīng)用

打包代碼以及依賴

對(duì)于python:你可以通過(guò)標(biāo)準(zhǔn)的 Python 包管理器(比如 pip 和 easy_install)直接在集群中的所有機(jī)器上安裝所依賴的庫(kù)腰池, 或者把依賴手動(dòng)安裝到 Python 安裝目錄下的 sitepackages/ 目錄中尾组。 你也可以使用 spark-submit 的 --py-Files 參數(shù)提交獨(dú)立的庫(kù),這樣它們也會(huì)被添加到 Python 解釋器的路徑中示弓。如果你沒(méi)有在集群上安裝包的權(quán)限讳侨,可以手動(dòng)添加依賴庫(kù)。
對(duì)于Java 和 Scala: spark-submit 的 --jars 標(biāo)記提交獨(dú)立的 JAR 包依賴奏属。當(dāng)只
有一兩個(gè)庫(kù)的簡(jiǎn)單依賴跨跨, 并且這些庫(kù)本身不依賴于其他庫(kù)時(shí),這種方法比較合適。一
般 Java 和 Scala 的工程會(huì)依賴很多庫(kù)勇婴。當(dāng)你向 Spark 提交應(yīng)用時(shí)忱嘹,你必須把應(yīng)用的整個(gè)依賴傳遞圖中的所有依賴都傳給集群。 你不僅要傳遞你直接依賴的庫(kù)耕渴,還要傳遞這些庫(kù)的依
賴拘悦, 等等。常規(guī)的做法是使用構(gòu)建工具橱脸,生成單個(gè)大 JAR 包础米, 包含應(yīng)用的所有的傳遞依賴。大多數(shù) Java 或 Scala 的構(gòu)建工具都支持生成這樣的工件添诉。例如java的maven以及scala的sbt椭盏。

獨(dú)立的集群管理器

  • 將編譯好的 Spark 復(fù)制到所有機(jī)器的一個(gè)相同的目錄下,比如 /home/yourname/spark吻商。
  • 設(shè)置好從主節(jié)點(diǎn)機(jī)器到其他機(jī)器的 SSH 無(wú)密碼登陸掏颊。
# 在主節(jié)點(diǎn)上:運(yùn)行ssh-keygen并接受默認(rèn)選項(xiàng)
$ ssh-keygen -t dsa
Enter file in which to save the key (/home/you/.ssh/id_dsa): [回車]
Enter passphrase (empty for no passphrase): [空]
Enter same passphrase again: [空]
# 在工作節(jié)點(diǎn)上:
# 把主節(jié)點(diǎn)的~/.ssh/id_dsa.pub文件復(fù)制到工作節(jié)點(diǎn)上,然后使用:
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ chmod 644 ~/.ssh/authorized_keys
  • 編輯主節(jié)點(diǎn)的 conf/slaves 文件并填上所有工作節(jié)點(diǎn)的主機(jī)名艾帐。
# A Spark Worker will be started on each of the machines listed below.
192.168.142.136
192.168.142.137
  • 在主節(jié)點(diǎn)上運(yùn)行 sbin/start-all.sh(要在主節(jié)點(diǎn)上運(yùn)行而不是在工作節(jié)點(diǎn)上)以啟動(dòng)集群乌叶。如果全部啟動(dòng)成功, 你不會(huì)得到需要密碼的提示符柒爸,而且可以在http://masternode:8080看到集群管理器的網(wǎng)頁(yè)用戶界面准浴,上面顯示著所有的工作節(jié)點(diǎn)。
  • 要停止集群捎稚,在主節(jié)點(diǎn)上運(yùn)行 bin/stop-all.sh乐横。配置獨(dú)立集群管理器的更多細(xì)節(jié)請(qǐng)參考 Spark 的官方文檔(http://spark.apache.org/docs/latest/spark-standalone.html
  • 提交應(yīng)用:spark-submit --master spark://masternode:7077 yourapp
    可以使用 --master 參數(shù)以同樣的方式啟動(dòng) spark-shell 或 pyspark,來(lái)連接到該集群上:
spark-shell --master spark://masternode:7077
pyspark --master spark://masternode:7077
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末今野,一起剝皮案震驚了整個(gè)濱河市葡公,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌条霜,老刑警劉巖催什,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異宰睡,居然都是意外死亡蒲凶,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門拆内,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)旋圆,“玉大人,你說(shuō)我怎么就攤上這事麸恍×榍桑” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)孩等。 經(jīng)常有香客問(wèn)我艾君,道長(zhǎng),這世上最難降的妖魔是什么肄方? 我笑而不...
    開(kāi)封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任冰垄,我火速辦了婚禮,結(jié)果婚禮上权她,老公的妹妹穿的比我還像新娘虹茶。我一直安慰自己,他們只是感情好隅要,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布蝴罪。 她就那樣靜靜地躺著,像睡著了一般步清。 火紅的嫁衣襯著肌膚如雪要门。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天廓啊,我揣著相機(jī)與錄音欢搜,去河邊找鬼。 笑死谴轮,一個(gè)胖子當(dāng)著我的面吹牛炒瘟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播第步,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼疮装,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了粘都?” 一聲冷哼從身側(cè)響起廓推,我...
    開(kāi)封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎驯杜,沒(méi)想到半個(gè)月后受啥,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體做个,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸽心,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了居暖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片顽频。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖太闺,靈堂內(nèi)的尸體忽然破棺而出糯景,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布蟀淮,位于F島的核電站最住,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏怠惶。R本人自食惡果不足惜涨缚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望策治。 院中可真熱鬧脓魏,春花似錦、人聲如沸通惫。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)履腋。三九已至珊燎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間遵湖,已是汗流浹背俐末。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奄侠,地道東北人卓箫。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像垄潮,于是被迫代替她去往敵國(guó)和親烹卒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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