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效能優化--資料本地性Spark優化
- spark讀取hdfs資料本地性異常Spark
- Innodb 下null '' ' '的儲存表現的不同Null
- 不同資料型別在程式中的表現形式資料型別
- 一個表單中的資料新增到不同的資料表中
- Install the Oracle Cluster Manager 9.2.0.7 PatchOracle
- Spark開發-Yarn cluster模式SparkYarn模式
- Redis Manager 建立 Redis Cluster —— Docker 安裝RedisDocker
- 不同表結構或者不同資料型別之間的集合操作資料型別
- efcore 跨表查詢,實現一個介面內查詢兩個不同資料庫裡各自的表資料資料庫
- 把資料匯入到不同的表空間
- 如何把資料匯入不同的表空間
- Redis Manager 建立 Redis Cluster —— 機器安裝Redis
- 根據條件動態更新不同表的資料
- oracle中的cluster表Oracle
- 直播影片美顏SDK在不同場景下的表現效果分析
- Spark:Yarn-client與Yarn-clusterSparkYarnclient
- Dcat Admin from 表單 點選不同型別展示不同資料型別
- 選擇排序中交換資料的不同方式出現的不同結果排序
- 大資料實踐解析(下):Spark的讀寫流程分析大資料Spark
- PostgreSQL在不同的表空間移動資料檔案SQL
- 如何比較兩個資料庫表結構的不同資料庫
- 將一個實體資料儲存到不同的資料表中<EntityFramework6.0>Framework
- 使用EXPDP IMPDP傳輸不同資料庫的不同表空間(新增網路傳輸)資料庫
- 不同 OS , 不同 Cluster 軟體對心跳線網路卡數量的要求
- spark讀取hbase的資料Spark
- cluster table及其屬表的table與普通表在資料塊block中儲存storage的區別BloC
- 分享自研實現的多資料來源(支援同DB不同表、跨DB表、記憶體資料、外部系統資料等)分頁查詢工具類實現原理及使用記憶體
- Databricks 第6篇:Spark SQL 維護資料庫和表SparkSQL資料庫
- Spark資料收藏--------Spark執行架構Spark架構
- 9207 Patchset does not contain OraCM (Oracle Cluster Manager) for RACAIACMOracle
- 8. MySQL Galera Cluster全解析 Part 8 Galera Cluster和傳統MySQL的不同點MySql
- 使用過載方法實現不同型別資料的計…型別
- OCP課程18:SQL之管理不同時區下的資料SQL
- 一個spark清洗資料的demoSpark
- 【Golang】基於beego/orm實現相同表結構不同表名的分表方法實現GolangORM
- Spark SQL外部資料來源與實現機制SparkSQL
- 同步整合不同系統、不同資料庫中資料的問題資料庫