china0114.com-日韩欧美中文免费,免费视频一区,免费视频一区,国产精品色网

公眾號
關注微信公眾號
移動端
創頭條企服版APP

Spark on Kubernetes 的現狀與挑戰

5772
搜狐財經 2019-09-27 01:27 搶發第一評

原標題:Spark on Kubernetes 的現狀與挑戰

作者:

陶克路,花名敵琺,阿里巴巴技術專家。Apache Pulsar 等開源軟件 Contributor。技術領域包括大數據和云原生技術棧,目前致力于構建大數據領域業界領先的 APM 產品。

云原生時代,Kubernetes 的重要性日益凸顯,這篇文章以 Spark 為例來看一下大數據生態 on Kubernetes 生態的現狀與挑戰。

Standalone 模式

Spark 運行在 Kubernetes 集群上的第一種可行方式是將 Spark 以 Standalone 模式運行,但是很快社區就提出使用 Kubernetes 原生 Scheduler 的運行模式,也就是 Native 的模式。關于 Standalone 模式這里就沒有繼續討論的必要了。

Kubernetes Native 模式

Native 模式簡而言之就是將 Driver 和 Executor Pod 化,用戶將之前向 YARN 提交 Spark 作業的方式提交給 Kubernetes 的 apiserver,提交命令如下:

$bin/spark-submit --master k8s://https://: --deploy-mode cluster --name spark-pi --class org.apache.spark.examples.SparkPi --conf spark.executor.instances=5 --conf spark.kubernetes.container.image= local:///path/to/examples.jar

其中 master 就是 kubernetes 的 apiserver 地址。提交之后整個作業的運行方式如下,先將 Driver 通過 Pod 啟動起來,然后 Driver 會啟動 Executor 的 Pod。這些方式很多人應該都了解了,就不贅述了,詳細信息可以參考:https://spark.apache.org/docs/latest/running-on-kubernetes.html

Spark Operator

除了這種直接想 Kubernetes Scheduler 提交作業的方式,還可以通過 Spark Operator 的方式來提交。Operator 在 Kubernetes 中是一個非常重要的里程碑。在 Kubernetes 剛面世的時候,關于有狀態的應用如何部署在 Kubernetes 上一直都是官方不愿意談論的話題,直到 StatefulSet 出現。StatefulSet 為有狀態應用的部署實現了一種抽象,簡單來說就是保證網絡拓撲和存儲拓撲。但是狀態應用千差萬別,并不是所有應用都能抽象成 StatefulSet,強行適配反正加重了開發者的心智負擔。

然后 Operator 出現了。我們知道 Kubernetes 給開發者提供了非常開放的一種生態,你可以自定義 CRD,Controller 甚至 Scheduler。而 Operator 就是 CRD + Controller 的組合形式。開發者可以定義自己的 CRD,比如我定義一種 CRD 叫 EtcdCluster 如下:

apiVersion: "etcd.database.coreos.com/v1beta2" kind: "EtcdCluster" metadata: name: "example-etcd-cluster" spec: size: 3 version: "3.1.10" repository: "quay.io/coreos/etcd"

提交到 Kubernetes 之后 Etcd 的 Operator 就針對這個 yaml 中的各個字段進行處理,最后部署出來一個節點規模為 3 個節點的 etcd 集群。你可以在 github 的這個 repo:https://github.com/operator-framework/awesome-operators 中查看目前實現了 Operator 部署的分布式應用。

Google 云平臺,也就是 GCP 在 github 上面開源了 Spark 的 Operator,repo 地址:https://github.com/GoogleCloudPlatform/spark-on-k8s-operator。Operator 部署起來也是非常的方便,使用 Helm Chart 方式部署如下,你可以簡單認為就是部署一個 Kubernetes 的 API Object (Deployment)。

$ helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator $ helm install incubator/sparkoperator --namespacespark-operator

這個 Operator 涉及到的 CRD 如下:

ScheduledSparkApplication |__ ScheduledSparkApplicationSpec |__SparkApplication |__ ScheduledSparkApplicationStatus

|__SparkApplication|__ SparkApplicationSpec|__DriverSpec|__ SparkPodSpec|__ExecutorSpec|__ SparkPodSpec|__Dependencies|__ MonitoringSpec|__PrometheusSpec|__ SparkApplicationStatus|__DriverInfo

如果我要提交一個作業,那么我就可以定義如下一個 SparkApplication 的 yaml,關于 yaml 里面的字段含義,可以參考上面的 CRD 文檔。

apiVersion: sparkoperator.k8s.io/v1beta1kind: SparkApplicationmetadata:...spec:deps: {}driver:coreLimit: 200mcores: 0.1labels:version: 2.3.0memory: 512mserviceAccount: sparkexecutor:cores: 1instances: 1labels:version: 2.3.0memory: 512mimage: gcr.io/ynli-k8s/spark:v2.4.0mainApplicationFile: local:///opt/spark/examples/jars/spark-examples_2.11-2.3.0.jarmainClass: org.apache.spark.examples.SparkPimode: clusterrestartPolicy:type: OnFailureonFailureRetries: 3onFailureRetryInterval: 10onSubmissionFailureRetries: 5onSubmissionFailureRetryInterval: 20type: Scalastatus:sparkApplicationId: spark-5f4ba921c85ff3f1cb04bef324f9154c9applicationState:state: COMPLETEDcompletionTime: 2018-02-20T23:33:55ZdriverInfo:podName: spark-pi-83ba921c85ff3f1cb04bef324f9154c9-driverwebUIAddress: 35.192.234.248:31064webUIPort: 31064webUIServiceName: spark-pi-2402118027-ui-svcwebUIIngressName: spark-pi-ui-ingresswebUIIngressAddress: spark-pi.ingress.cluster.comexecutorState:spark-pi-83ba921c85ff3f1cb04bef324f9154c9-exec-1: COMPLETEDLastSubmissionAttemptTime: 2018-02-20T23:32:27Z

提交作業。

$kubectl apply -f spark-pi.yaml

對比來看 Operator 的作業提交方式似乎顯得更加的冗長復雜,但是這也是一種更 kubernetes 化的 api 部署方式,也就是 Declarative API,聲明式 API。

挑戰

基本上,目前市面的大部門公司都是使用上面兩種方式來做 Spark on Kubernetes 的,但是我們也知道在 Spark Core 里面對 Kubernetes 的這種 Native 方式支持其實并不是特別成熟,還有很多可以改善的地方:

1.scheduler 差異。

資源調度器可以簡單分類成集中式資源調度器和兩級資源調度器。兩級資源調度器有一個中央調度器負責宏觀資源調度,對于某個應用的調度則由下面分區資源調度器來做。兩級資源調度器對于大規模應用的管理調度往往能有一個良好的支持,比如性能方面,缺點也很明顯,實現復雜。其實這種設計思想在很多地方都有應用,比如內存管理里面的 tcmalloc 算法,Go 語言的內存管理實現。大數據的資源調度器 Mesos/Yarn,某種程度上都可以歸類為兩級資源調度器。

集中式資源調度器對于所有的資源請求進行響應和決策,這在集群規模大了之后難免會導致一個單點瓶頸,毋庸置疑。但是 Kubernetes 的 scheduler 還有一點不同的是,它是一種升級版,一種基于共享狀態的集中式資源調度器。Kubernetes 通過將整個集群的資源緩存到 scheduler 本地,在進行資源調度的時候在根據緩存的資源狀態來做一個 “樂觀” 分配(assume + commit)來實現調度器的高性能。

Kubernetes 的默認調度器在某種程度上并不能很好的 match Spark 的 job 調度需求,對此一種可行的技術方案是再提供一種 custom scheduler,比如 Spark on Kubernetes Native 方式的參與者之一的大數據公司 Palantir 就開源了他們的 custom scheduler,github repo: https://github.com/palantir/k8s-spark-scheduler。

2.集群規模瓶頸。

基本上現在可以確定的是 Kubernetes 會在集群規模達到五千臺的時候出現瓶頸,但是在很早期的時候 Spark 發表論文的時候就聲稱 Spark Standalone 模式可以支持一萬臺規模。Kubernetes 的瓶頸主要體現在 master 上,比如用來做元數據存儲的基于 raft 一致性協議的 etcd 和 apiserver 等。對此在剛過去的 2019 上海 KubeCon 大會上,阿里巴巴做了一個關于提高 master 性能的 session: 了解 Kubernetes Master 的可擴展性和性能,感興趣的可以自行了解。

3.Pod 驅逐(Eviction)問題。

在 Kubernetes 中,資源分為可壓縮資源(比如 CPU)和不可壓縮資源(比如內存),當不可壓縮資源不足的時候就會將一些 Pod 驅逐出當前 Node 節點。國內某個大廠在使用 Spark on kubernetes 的時候就遇到因為磁盤 IO 不足導致 Spark 作業失敗,從而間接導致整個測試集都沒有跑出來結果。如何保證 Spark 的作業 Pod (Driver/Executor) 不被驅逐呢?這就涉及到優先級的問題,1.10 之后開始支持。但是說到優先級,有一個不可避免的問題就是如何設置我們的應用的優先級?常規來說,在線應用或者 long-running 應用優先級要高于 batch job,但是顯然對于 Spark 作業來說這并不是一種好的方式。

4.作業日志。

Spark on Yarn 的模式下,我們可以將日志進行 aggregation 然后查看,但是在 Kubernetes 中暫時還是只能通過 Pod 的日志查看,這塊如果要對接 Kubernetes 生態的話可以考慮使用 fluentd 或者 filebeat 將 Driver 和 Executor Pod 的日志匯總到 ELK 中進行查看。

5.Prometheus 生態。

Prometheus 作為 CNCF 畢業的第二個項目,基本是 Kubernetes 監控的標配,目前 Spark 并沒有提供 Prometheus Sink。而且 Prometheus 的數據讀取方式是 pull 的方式,對于 Spark 中 batch job 并不適合使用 pull 的方式,可能需要引入 Prometheus 的 pushgateway。

結語

被稱為云上 OS 的 Kubernetes 是 Cloud Native 理念的一種技術承載與體現,但是如何通過 Kubernetes 來助力大數據應用還是有很多可以探索的地方。歡迎交流。

參考:

  1. https://spark.apache.org/docs/latest/running-on-kubernetes.html
  2. https://medium.com/palantir/spark-scheduling-in-kubernetes-4976333235f3
  3. https://github.com/palantir/k8s-spark-scheduler
  4. Kubecon: 了解 Kubernetes Master 的可擴展性和性能
  5. Kubecon: SIG-Scheduling Deep Dive
  6. https://github.com/operator-framework/awesome-operators
  7. https://github.com/coreos/etcd-operator
  8. https://github.com/GoogleCloudPlatform/spark-on-k8s-operator

從9月11日開始至10月15日截止,一共五周時間,每周二我會從公眾號底部留言+轉發+在看綜合最多的讀者中抽取一名讀者,免費包郵送實體新書《HBase原理與實踐》,留言互動起來吧~

上周獲獎名單:ZRTX

過往記憶大數據微信群,請添加微信:fangzhen0219,備注【進群】返回搜狐,查看更多

責任編輯:

聲明:該文章版權歸原作者所有,轉載目的在于傳遞更多信息,并不代表本網贊同其觀點和對其真實性負責。如涉及作品內容、版權和其它問題,請在30日內與本網聯系。
您閱讀這篇文章花了0
轉發這篇文章只需要1秒鐘
喜歡這篇 0
評論一下 0
凱派爾知識產權全新業務全面上線
相關文章
評論
試試以這些內容開始評論吧
登錄后發表評論
凱派爾知識產權全新業務全面上線
寧波城市站
金華城市站
×
#熱門搜索#
精選雙創服務
歷史搜索 清空

Tel:18514777506

關注微信公眾號

創頭條企服版APP

china0114.com-日韩欧美中文免费,免费视频一区,免费视频一区,国产精品色网
欧美在线你懂得| 中文字幕一区二区三区在线播放 | 夜夜亚洲天天久久| 国产激情一区二区三区| 91精品欧美福利在线观看| 国产精品国产自产拍高清av王其| 美女视频一区二区| 欧亚一区二区三区| 国产精品进线69影院| 精品一区二区三区免费观看 | 久久午夜免费电影| 三级成人在线视频| 91福利在线免费观看| 中文av一区二区| 国产中文字幕精品| 91麻豆精品国产91久久久| 一级特黄大欧美久久久| 99久久精品国产精品久久| 国产午夜亚洲精品理论片色戒 | 91天堂素人约啪| 中文字幕av一区二区三区免费看 | 久久久电影一区二区三区| 美女视频网站久久| 在线不卡一区二区| 亚洲一区二区精品3399| 91视频com| 中文字幕在线免费不卡| 粉嫩aⅴ一区二区三区四区五区| 精品粉嫩aⅴ一区二区三区四区| 日韩极品在线观看| 欧美精品日韩一本| 婷婷国产在线综合| 欧美日韩一区三区四区| 亚洲亚洲人成综合网络| 欧洲亚洲国产日韩| 一区二区三区波多野结衣在线观看| 99r国产精品| 亚洲三级电影网站| 91丨porny丨户外露出| 最新久久zyz资源站| 成人av电影免费在线播放| 国产精品午夜春色av| 粉嫩aⅴ一区二区三区四区五区 | 粉嫩av一区二区三区在线播放| 久久人人97超碰com| 激情五月婷婷综合| 久久亚洲精华国产精华液| 国产麻豆91精品| 欧美激情自拍偷拍| 不卡一区中文字幕| 亚洲免费电影在线| 在线免费亚洲电影| 爽好久久久欧美精品| 欧美一区二区三区在| 久久精品国产网站| 久久精品视频一区二区| 成人免费观看av| 亚洲欧美日韩一区二区| 欧美在线观看一二区| 婷婷久久综合九色综合绿巨人| 欧美一级二级三级蜜桃| 国产真实乱对白精彩久久| 国产亚洲欧美激情| 不卡一卡二卡三乱码免费网站| 亚洲人成在线观看一区二区| 欧美日韩综合在线免费观看| 日本欧洲一区二区| 久久久夜色精品亚洲| 成年人午夜久久久| 亚洲午夜电影网| 91精品福利在线一区二区三区| 紧缚奴在线一区二区三区| 国产农村妇女精品| 色婷婷av一区二区三区大白胸| 亚洲第一福利视频在线| 日韩三级视频在线观看| 国产成人av自拍| 一区二区三区久久| 欧美一级在线免费| 高清beeg欧美| 亚洲午夜久久久久| 精品美女被调教视频大全网站| 成人午夜激情影院| 一区二区三区成人| 欧美成va人片在线观看| 成熟亚洲日本毛茸茸凸凹| 一区二区高清在线| 精品日韩在线一区| 91亚洲精品久久久蜜桃网站| 日韩电影在线观看一区| 欧美国产精品劲爆| 欧美日韩精品一区视频| 国产精一品亚洲二区在线视频| 亚洲欧美aⅴ...| 日韩午夜激情免费电影| 99视频热这里只有精品免费| 视频一区二区国产| 国产欧美va欧美不卡在线| 欧洲亚洲国产日韩| 国产精品一区二区三区99| 亚洲尤物视频在线| 久久精品视频在线免费观看| 欧美羞羞免费网站| 国产主播一区二区| 亚洲高清视频的网址| 久久日一线二线三线suv| 在线亚洲一区二区| 国产麻豆成人精品| 天堂va蜜桃一区二区三区| 国产精品美女一区二区在线观看| 在线不卡中文字幕| 99久久精品国产毛片| 久久电影网站中文字幕| 亚洲免费av在线| 久久精品人人爽人人爽| 6080亚洲精品一区二区| 99re这里只有精品首页| 久久精品国产成人一区二区三区 | 国产成人啪免费观看软件| 三级久久三级久久久| 亚洲私人黄色宅男| 久久综合色鬼综合色| 欧美美女视频在线观看| 97成人超碰视| 国产成人精品www牛牛影视| 日韩国产欧美在线播放| 亚洲女同ⅹxx女同tv| 久久网这里都是精品| 91麻豆精品国产91久久久资源速度 | 中文字幕一区不卡| 精品国产凹凸成av人网站| 欧美日韩欧美一区二区| 91亚洲精品一区二区乱码| 国产成人夜色高潮福利影视| 麻豆免费精品视频| 丝袜亚洲精品中文字幕一区| 亚洲男人的天堂网| 国产精品三级av| 2020国产成人综合网| 91精品国产黑色紧身裤美女| 在线视频中文字幕一区二区| 成人黄动漫网站免费app| 国内精品伊人久久久久影院对白| 肉肉av福利一精品导航| 亚洲自拍偷拍九九九| 国产精品白丝在线| 国产精品网站在线观看| 久久精品免视看| 精品国产一区二区亚洲人成毛片| 9191成人精品久久| 欧美日韩视频不卡| 欧美三级日本三级少妇99| 91黄色激情网站| 91在线一区二区三区| www.日韩精品| 成人av片在线观看| 成人免费va视频| 成人免费三级在线| 成人网页在线观看| 成人毛片视频在线观看| 成人性生交大片免费看在线播放 | 91.xcao| 宅男噜噜噜66一区二区66| 欧美三片在线视频观看| 欧美在线观看视频一区二区 | 日韩欧美中文字幕一区| 日韩一级完整毛片| 91精品国产欧美一区二区成人| 欧美精品三级日韩久久| 91精品一区二区三区久久久久久 | 国产精品免费视频网站| 国产精品视频在线看| 国产精品久久久久天堂| 国产精品久久久久永久免费观看 | 成a人片国产精品| 不卡在线视频中文字幕| 成人黄色免费短视频| 99久久久久免费精品国产| 色综合天天视频在线观看 | 一区二区三区四区高清精品免费观看| 亚洲老司机在线| 亚洲第一精品在线| 秋霞午夜鲁丝一区二区老狼| 蜜桃在线一区二区三区| 精品一区二区三区在线视频| 国产精品一品视频| 99在线热播精品免费| 在线观看国产日韩| 欧美人妖巨大在线| 日韩欧美亚洲国产另类| 精品国产91久久久久久久妲己| 国产三级久久久| 综合色天天鬼久久鬼色| 亚洲综合男人的天堂| 日本va欧美va欧美va精品| 国内久久婷婷综合| av在线不卡观看免费观看| 欧美性大战久久久久久久蜜臀 | 亚洲柠檬福利资源导航| 香蕉成人伊视频在线观看|