Spark不同Cluster Manager下的資料本地性表現
一. 概述
Spark中的資料本地性分為兩種
executor 層面的資料本地性
task 層面的資料本地性
在兩種本地性中,task層面的資料本地性是由Spark本身決定的,而executor的分發則是Cluter Manager控制的,因此下文主要描述在不同Cluster Manager中的executor分發機制。
-
Spark Standalone
Standalone提供了兩種executor的分發模式。
由引數spark.deploy.spreadOut
控制,預設為true
,將會把executor分配到儘可能多的worker上,因此通常都能提供非常良好的資料本地性。如果設定為false(不建議),會將executor優先分配到一臺機器中,能提供更高的機器使用率。
Spark on Yarn
在Spark on Yarn方式下,如果啟用了Dynamic Allocation
並設定spark.dynamicAllocation.initialExecutors
為一個較低的值(例如0)。則在pending task申請executor時,就會判斷任務的資料本地性,並且在有資料的節點上啟動executor。-
Spark on Mesos
mesos會先offer給spark一個空閒的slave,spark會在上面啟動executor,直到slave佔滿,mesos會再發一個新的offer過來。這種做法類似於standalone關閉spreadOut的效果,因此會導致某些節點load非常高,而一些節點異常空閒情況。
解決方式有2個:修改spark原始碼解決這個問題(接收到一個offer的時候只啟動一個executor),在spark2.0的基礎上只需要改動
MesosCoarseGrainedSchedulerBackend
中buildMesosTasks
那段程式碼即可。配合docker,marathon解決。
修改mesos排程前:
修改mesos排程前
修改mesos排程後:
修改mesos排程後
觀察到本地性有較大的提升,執行時間縮短了25%左右。
同時離線任務執行時間波動減少,趨於穩定
這裡寫圖片描述
二. 結語
透過上述來看,目前Spark on Yarn + Dynamic Allocation
的方式在executor的資料本地性上有著一定的優勢。
分散式計算的瓶頸往往出現在IO上,因此良好的資料本地效能提高程式的整體執行速度。在機器較多的叢集中,為了擁有更好的資料本地性,最簡單的一種方式就是透過啟動更多的executor來實現。
例如需要一個<4 cores, 20G RAM>
的Spark Application。如果只啟動一個executor,那麼只會執行在一臺節點上,其他機器的資料則需要透過網路IO來獲取。如果啟動4個executor,每個executor使用<1 cores,5G RAM>
,那麼executor將能分佈到更多的節點上,獲取更好的資料本地性。
作者:breeze_lsw
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4369/viewspace-2818904/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- spark讀取hdfs資料本地性異常Spark
- Innodb 下null '' ' '的儲存表現的不同Null
- Redis Manager 建立 Redis Cluster —— Docker 安裝RedisDocker
- Redis Manager 建立 Redis Cluster —— 機器安裝Redis
- efcore 跨表查詢,實現一個介面內查詢兩個不同資料庫裡各自的表資料資料庫
- Dcat Admin from 表單 點選不同型別展示不同資料型別
- Spark:Yarn-client與Yarn-clusterSparkYarnclient
- 直播影片美顏SDK在不同場景下的表現效果分析
- 大資料實踐解析(下):Spark的讀寫流程分析大資料Spark
- PostgreSQL在不同的表空間移動資料檔案SQL
- 如何比較兩個資料庫表結構的不同資料庫
- 選擇排序中交換資料的不同方式出現的不同結果排序
- spark讀取hbase的資料Spark
- 8. MySQL Galera Cluster全解析 Part 8 Galera Cluster和傳統MySQL的不同點MySql
- 分享自研實現的多資料來源(支援同DB不同表、跨DB表、記憶體資料、外部系統資料等)分頁查詢工具類實現原理及使用記憶體
- Databricks 第6篇:Spark SQL 維護資料庫和表SparkSQL資料庫
- 2020年歐洲不同行業垂直的資本投入(附原資料表) 行業
- oracle net manager 資料傳輸安全Oracle
- 一個spark清洗資料的demoSpark
- Spring Boot應用中如何動態指定資料庫,實現不同使用者不同資料庫的場景Spring Boot資料庫
- 【Golang】基於beego/orm實現相同表結構不同表名的分表方法實現GolangORM
- Spark SQL外部資料來源與實現機制SparkSQL
- docker下的spark使用DockerSpark
- 不同資料夾使用不同的Git使用者Git
- Spark讀取MySQL資料SparkMySql
- spark寫入hive資料SparkHive
- 教你如何運用python實現不同資料庫間資料同步功能Python資料庫
- 【Spark篇】---Spark解決資料傾斜問題Spark
- 如何刪除資料庫下的所有表(mysql)資料庫MySql
- 基於 Spark 的資料分析實踐Spark
- 【VMware VCF】更新 SDDC Manager 中的 vSAN HCL 資料庫。資料庫
- 讀資料湖倉03不同型別的資料型別
- redis 單機和cluster資料遷移Redis
- redis cluster 故障後,主從位於不同節點的修復。Redis
- 如實實現不同資料庫之間的 (模型) Eloquent: 關聯資料庫模型
- 大資料框架對比 - Hadoop、Spark、Storm、Samza、Spark、Flink大資料框架HadoopSparkORM
- 大資料開發-資料表監控-實現大資料
- 客快物流大資料專案(四十四):Spark操作Kudu建立表大資料Spark