上一篇博客介紹了mapreduce的移動流量分析的實戰案例,本篇將繼續分享mapreduce的並行度原理。node
1、mapTask並行度的決定機制服務器
一個job的map階段並行度由客戶端在提交Job是決定,而客戶端對map階段並行度的規劃的基本邏輯爲:將待處理數據執行邏輯切片(即按照一個特定切片大小,將待處理數據劃分紅邏輯上的多個split),而後每個split分配一個mapTask並行實例處理;這段邏輯及造成的切片規劃描述文件,由FileInputFormat實現類的getSplits()方法完成,其過程以下圖:併發
(1)FileInputFormat切片機制jvm
切片定義在InputFormat類中的getSplit()方法;FileInputFormat中默認的切片機制:a.簡單地按照文件的內容長度進行切片,b.切片大小,默認等於block大小,c.切片時不考慮數據集總體,而是逐個針對每個文件單獨切片
好比待處理數據有兩個文件:
file1.txt 320M
file2.txt 10M
通過FileInputFormat的切片機制運算後,造成的切片信息以下:
file1.txt.split1-- 0~128
file1.txt.split2-- 128~256
file1.txt.split3-- 256~320
file2.txt.split1-- 0~10M oop
(2)FileInputFormat中切片的大小的參數配置
經過分析源碼,在FileInputFormat中,計算切片大小的邏輯:Math.max(minSize, Math.min(maxSize, blockSize)); 切片主要由這幾個值來運算決定
minsize:默認值:1 配置參數: mapreduce.input.fileinputformat.split.minsize
maxsize:默認值:Long.MAXValue 配置參數:mapreduce.input.fileinputformat.split.maxsize
blocksize
所以,默認狀況下,切片大小=blocksize
maxsize(切片最大值):參數若是調得比blocksize小,則會讓切片變小,並且就等於配置的這個參數的值
minsize (切片最小值):參數調的比blockSize大,則可讓切片變得比blocksize還大大數據
選擇併發數的影響因素:一、運算節點的硬件配置,二、運算任務的類型:CPU密集型仍是IO密集型,三、運算任務的數據量3d
(3)map並行度的經驗之談
若是硬件配置爲2*12core + 64G,恰當的map並行度是大約每一個節點20-100個map,最好每一個map的執行時間至少一分鐘。
若是job的每一個map或者 reduce task的運行時間都只有30-40秒鐘,那麼就減小該job的map或者reduce數,每個task(map|reduce)的setup和加入到調度器中進行調度,這個中間的過程可能都要花費幾秒鐘,因此若是每一個task都很是快就跑完了,就會在task的開始和結束的時候浪費太多的時間。
配置task的JVM重用[JVM重用技術不是指同一Job的兩個或兩個以上的task能夠同時運行於同一JVM上,而是排隊按順序執行。]能夠改善該問題:
(mapred.job.reuse.jvm.num.tasks,默認是1,表示一個JVM上最多能夠順序執行的task數目(屬於同一個Job)是1。也就是說一個task啓一個JVM)調試
若是input的文件很是的大,好比1TB,能夠考慮將hdfs上的每一個block size設大,好比設成256MB或者512MBcode
2、ReduceTask並行度的決定
reducetask的並行度一樣影響整個job的執行併發度和執行效率,但與maptask的併發數由切片數決定不一樣,Reducetask數量的決定是能夠直接手動設置:orm
//默認值是1,手動設置爲4 job.setNumReduceTasks(4);
若是數據分佈不均勻,就有可能在reduce階段產生數據傾斜
注意: reducetask數量並非任意設置,還要考慮業務邏輯需求,有些狀況下,須要計算全局彙總結果,就只能有1個reducetask
儘可能不要運行太多的reduce task。對大多數job來講,最好rduce的個數最多和集羣中的reduce持平,或者比集羣的 reduce slots小。這個對於小集羣而言,尤爲重要。
3、mapreduce調試
能夠在本地運行mapreduce,配置遠程的namenode主機對應的輸入路徑和輸出路徑進行遠程調試,調試入口: boolean res = job.waitForCompletion(true);
強烈建議小夥伴們進行一次完整的調試以理解mapreduce的切片規劃和提交原理。
4、切片規劃
切片規劃是通常會造成幾個文件: job.xml(hadoop配置參數)、job.split(切片信息)、job.splitmetainfo(切片meta信息)
最後寄語,以上是博主本次文章的所有內容,若是你們以爲博主的文章還不錯,請點贊;若是您對博主其它服務器大數據技術或者博主本人感興趣,請關注博主博客,而且歡迎隨時跟博主溝通交流。