Spark云化架構(gòu)演進(jìn)的實(shí)踐和探索

常見術(shù)語

  • Kubernetes:K8s室琢,是一個(gè)可移植的、可擴(kuò)展的開源平臺(tái),用于管理容器化的工作負(fù)載和服務(wù)真仲,可促進(jìn)聲明式配置和自動(dòng)化
  • Yarn:hadoop 2.0 引入的 集群資源管理系統(tǒng) 喇颁。用戶可以將各種服務(wù)框架部署在 YARN 上漏健,由 YARN 進(jìn)行統(tǒng)一地管理和資源分配
  • Spark:基于內(nèi)存計(jì)算的通用大規(guī)模數(shù)據(jù)處理框架
  • Livy:通過REST的方式將代碼片段或是序列化的二進(jìn)制代碼提交到Spark集群中去執(zhí)行

“不良”動(dòng)機(jī)

自2018年2月28日發(fā)布Spark v2.3.0起,即可在Kubernetes上運(yùn)行Spark橘霎。我們現(xiàn)在用的版本是v2.4.3蔫浆,當(dāng)然,與類似Hadoop的集群上眾所周知的Yarn設(shè)置相比仍然缺乏很多姐叁。 對(duì)應(yīng)于官方文檔用戶瓦盛,可以通過spark-submit CLI腳本在Kubernetes上運(yùn)行Spark。 實(shí)際上外潜,它是唯一內(nèi)置在Apache Spark Kubernetes相關(guān)功能以及某些配置選項(xiàng)中的功能原环。 Apache文檔中的調(diào)試建議太差,無法輕松使用处窥,并且僅適用于基于控制臺(tái)的工具聋呢。 調(diào)度程序集成也不可用填硕,這使得在Kubernetes上開箱即用Spark來設(shè)置便捷的管道變得非常棘手凫乖。 反過來钓葫,基于Yarn的Hadoop群集具有所有UI,代理嵌灰,調(diào)度程序和API弄匕,會(huì)讓數(shù)據(jù)RD更愉快的工作。

So what~

引用豬場(chǎng)的一張圖

另一方面沽瞭,使用與Yarn相反的Kubernetes集群具有明顯的好處(2019年7月比較):

  • Price:比較Azure Cloud上的類似群集設(shè)置迁匠,可以發(fā)現(xiàn)AKS比HDInsight Spark便宜35%。
  • Scale:Cloud中的Kubernetes集群支持彈性自動(dòng)擴(kuò)展驹溃,并具有非吵巧ィ酷的相關(guān)功能,例如:Nodepools豌鹤。 反之亡哄,Hadoop集群的擴(kuò)展速度遠(yuǎn)遠(yuǎn)沒有那么快,可以手動(dòng)或自動(dòng)完成(2019年7月預(yù)覽)布疙。
  • Integrations:我們可以在包裝在Docker容器中的Kubernetes集群中運(yùn)行任何工作負(fù)載蚊惯。至少我還沒見過寫過Yarn App的人愿卸。
  • Support:我們無法完全控制Cloud提供的群集設(shè)置,并且通常在發(fā)行后的幾個(gè)月內(nèi)沒有可用的最新版本的軟件截型。但是趴荸,使用Kubernetes,我們完全可以自己構(gòu)建映像宦焦。
  • Other Kuebernetes pros:具有Helm的CI / CD发钝,可一鍵單擊即可使用的監(jiān)視堆棧,獲得了廣泛的歡迎和社區(qū)支持波闹。當(dāng)然還有HYPE諸如此類的優(yōu)秀工具酝豪。

當(dāng)我們了解Kubernetes的優(yōu)勢(shì)之后,那就開始干精堕,嘗試提高 Spark on K8s可行性吧孵淘。

設(shè)計(jì)理念

基于Spark on K8s解決方案的核心是Apache Livy。 Apache Livy是一項(xiàng)服務(wù)锄码,可通過REST接口輕松與Spark集群進(jìn)行交互夺英。 它受到Apache Incubator社區(qū)和Azure HDInsight團(tuán)隊(duì)的支持晌涕,該團(tuán)隊(duì)將其置于Yarn群集設(shè)置中的一等公民(你懂的)滋捶,進(jìn)行了諸多工業(yè)設(shè)計(jì)的集成,諸如多用戶支持余黎、端到端安全重窟、HTTPS/SSL、基于SASL認(rèn)證的RPC通信機(jī)制惧财、失敗恢復(fù)等企業(yè)級(jí)關(guān)鍵特性巡扇。
當(dāng)然缺點(diǎn)也是很明顯的 ,Livy設(shè)計(jì)的初衷就為Yarn編寫的垮衷,慶幸的是厅翔,2019年4月10日,Apache Incubator社區(qū)聲明全面支持Spark on K8s搀突。

K8s上Livy的架構(gòu)與Yarn相同

Livy服務(wù)器只是包裝了與Spark集群交互的所有邏輯刀闷,并提供了簡單的REST接口。

具體實(shí)施

1. 搭建K8s集群

網(wǎng)上教程多如牛毛仰迁,過程省略... 建議1.14及以上版本甸昏,2019最新k8s集群搭建教程 (centos k8s 搭建)

2. 制作Livy-server鏡像

清單列表

2.1 Livy.conf

livy.conf

livy配置,注意要制定master節(jié)點(diǎn)指向 k8s的master節(jié)點(diǎn)徐许,用來對(duì)接K8s的api-server

2.2 Dockerfile

Dockerfile

2.3 Livy.yaml

--- 預(yù)留10000~10010服務(wù)端口施蜜,不考慮資源情況下,理論上可以最大并發(fā)11個(gè)driver
apiVersion: v1
kind: Service
metadata:
  name: livy-server
  namespace: default
spec:
  type: NodePort
  selector:
      app: livy-server
  ports:
  - name: http
    protocol: TCP
    nodePort: 31988
    port: 31988
    targetPort: 31988
  - name: rpc0
    protocol: TCP
    nodePort: 31839
    port: 10000
    targetPort: 10000
  - name: rpc1
    protocol: TCP
    nodePort: 31612
    port: 10001
    targetPort: 10001
  - name: rpc2
    protocol: TCP
    nodePort: 31228
    port: 10002
    targetPort: 10002
  - name: rpc3
    protocol: TCP
    nodePort: 31477
    port: 10003
    targetPort: 10003
  - name: rpc4
    protocol: TCP
    nodePort: 31384
    port: 10004
    targetPort: 10004
  - name: rpc5
    protocol: TCP
    nodePort: 31003
    port: 10005
    targetPort: 10005
  - name: rpc6
    protocol: TCP
    nodePort: 31842
    port: 10006
    targetPort: 10006
  - name: rpc7
    protocol: TCP
    nodePort: 31795
    port: 10007
    targetPort: 10007
  - name: rpc8
    protocol: TCP
    nodePort: 31703
    port: 10008
    targetPort: 10008
  - name: rpc9
    protocol: TCP
    nodePort: 31930
    port: 10009
    targetPort: 10009
  - name: rpc10
    protocol: TCP
    nodePort: 31068
    port: 10010
    targetPort: 10010

---
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: livy-server
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: livy-server
  template:
    metadata:
      labels:
        app: livy-server
    spec:
      hostname: livy-server
      serviceAccount: spark
      serviceAccountName: spark
      containers:
      - name: livy-server
        image: 10.102.0.21:5000/spark/livyserver:0.7.0b
        securityContext:
          privileged: true
          runAsUser: 0
        resources:
           limits:
             cpu: "2"
             memory: 2Gi
           requests:
             cpu: 200m
             memory: 512Mi 
        ports:
        - containerPort: 31988

3. livy-server盤它

查看livy-spark的pod


image.png

3.1 提交一個(gè)batch任務(wù)

image.png

可看出id為28的batch任務(wù)已創(chuàng)建雌隅,狀態(tài)為starting

3.2 查看某個(gè)batch任務(wù)

image.png

可看出任務(wù)在pending中

3.3 任務(wù)完成

image.png

image.png

在livy的GUI界面上可以看到求圓周率的任務(wù)已完成翻默,并且通過接口看到任務(wù)狀態(tài)為success

未完待續(xù)

上面只是Spark云化服務(wù)的基礎(chǔ)部分缸沃,為了達(dá)到工業(yè)級(jí)的Spark云化服務(wù)平臺(tái),我們還有很多事情要做修械,如安全認(rèn)證中間件和泌、緩存中間件、分布式消息隊(duì)列祠肥、多存儲(chǔ)源混合(數(shù)據(jù)湖支持武氓,多類型存儲(chǔ))等等。


image.png

最后引用一張我心中完美的Spark as Service的架構(gòu)圖


摘自于網(wǎng)易嚴(yán)選大數(shù)據(jù)架構(gòu)演進(jìn)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末仇箱,一起剝皮案震驚了整個(gè)濱河市县恕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剂桥,老刑警劉巖忠烛,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異权逗,居然都是意外死亡美尸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門斟薇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來师坎,“玉大人,你說我怎么就攤上這事堪滨】杪” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵袱箱,是天一觀的道長遏乔。 經(jīng)常有香客問我,道長发笔,這世上最難降的妖魔是什么盟萨? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮了讨,結(jié)果婚禮上捻激,老公的妹妹穿的比我還像新娘。我一直安慰自己量蕊,他們只是感情好铺罢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著残炮,像睡著了一般韭赘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上势就,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天泉瞻,我揣著相機(jī)與錄音脉漏,去河邊找鬼。 笑死袖牙,一個(gè)胖子當(dāng)著我的面吹牛侧巨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鞭达,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼司忱,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了畴蹭?” 一聲冷哼從身側(cè)響起坦仍,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叨襟,沒想到半個(gè)月后繁扎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡糊闽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年梳玫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片右犹。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡提澎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出傀履,到底是詐尸還是另有隱情虱朵,我是刑警寧澤莉炉,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布钓账,位于F島的核電站,受9級(jí)特大地震影響絮宁,放射性物質(zhì)發(fā)生泄漏梆暮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一绍昂、第九天 我趴在偏房一處隱蔽的房頂上張望啦粹。 院中可真熱鬧,春花似錦窘游、人聲如沸唠椭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贪嫂。三九已至,卻和暖如春艾蓝,著一層夾襖步出監(jiān)牢的瞬間力崇,已是汗流浹背斗塘。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留亮靴,地道東北人馍盟。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像茧吊,于是被迫代替她去往敵國和親贞岭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354