Hadoop與Spark並行度設置問題(mr、spark任務提交參數的設置、spark-submit參數調優)

並行度的影響

合理的並行度,不能太小也不要過大。

並行度較小:
併發度小,執行效率低;(失去分佈式計算的意義)

並行度過大:
資源申請上的劣勢。導致ApplicationMaster在向yarn提交資源申請時不能做到數據本地化(分配執行任務的機器不是數據所在機器,yarn resourcemanager在分配資源時選擇 數據本地、同機架、集羣隨機三種方式,優先級從前到後),甚至由於集羣剩餘資源不足而處於排隊等待狀態,申請資源時間成爲整個任務執行時間的瓶頸;
每個task的初始化時間拖了任務執行時間的後腿(一個數據量小、處理邏輯簡單的任務本身執行時間已經比大量task初始化所消耗時間小);

合理的並行度

任務的合理並行度取決於

集羣的資源
一個合理的並行度,肯定是需要考慮到現有集羣的可用資源,這個決定了你申請資源的上限。
集羣的資源可以劃分爲兩種:1、整個集羣的資源;2、hdfs數據所在機器的資源情況。

任務處理的數據量、文件數
你要處理的數據量是你任務並行度大小的關鍵。
查看hdfs文件信息:
hadoop fsck /xxx/xxx/your_path
可以加 -files -blocks -racks參數查看目錄下每個文件的明細信息:files:文件數;blocks:數據塊數;racks:機架地址
blocks決定了讀取數據時的並行度(一般讀取task數等於block數)

數據處理的業務邏輯
io密集型 or cpu密集型
io密集型 —— 較小的並行度,可以儘可能保證數據的本地化或同機架,避免數據的網絡傳輸;
cpu密集型 —— 偏向於更大的並行度(spark任務可以通過DAG、數據緩存等輔助優化手段)

總之,任務的並行度取決因素有很多,並且這些因素不是一成不變的,在任務調優的過程中,可以通過控制變量來多次嘗試,選擇出最理想的一個資源大小、任務的並行度大小

並行度的設置

spark並行度強轉操作:

reparation/coalesce 兩者區別參考:https://blog.csdn.net/zx_blog/article/details/100168367

hdfs文件數據讀取時的並行度:

文件所佔block數(一個block對應一個task)。

通過spark參數進行調整:

spark參數:spark.default.parallelism(可設置在sparkhome中全局配置文件中,或在代碼sparkconf中進行設置)
spark sql的參數:spark.sql.shuffle.partition(spark sql中shuffle操作的並行度,如sql中join,group by等操作,默認爲200)

spark shuffle算子中設置並行度: rdd.groupByKey(100)、rdd.leftjoin(secondRdd, 50)

mr任務,FileInputFormat的並行度:

並行度=fileSize / Math.max(minSize, Math.min(maxSize, blockSize)),默認minSize爲1,maxSize爲Long.MAXValue,所以默認並行度等於fileSize / blockSize
minSize和maxSize可通過mapreduce.input.fileinputformat.split.minsize、mapreduce.input.fileinputformat.split.maxsize進行調整;blockSize即hdfs的blockSize,可以通過
hdfs-site.xml中dfs.blocksize進行配置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章