大資料入門 2 Hadoop shuffle

2021-09-25 09:54:10 字數 2096 閱讀 1425

過程:

map---shuffle---->reduce

19/07/13 19:55:31 info mapreduce.job: map 0% reduce 0%

19/07/13 19:55:42 info mapreduce.job: map 50% reduce 0%

19/07/13 19:55:43 info mapreduce.job: map 100% reduce 0%

19/07/13 19:55:50 info mapreduce.job: map 100% reduce 100%

map階段:就是程式設計師編寫好的map函式了,因此map函式效率相對好控制,而且一般map操作都是本地化操作也就是在資料儲存節點上進行;

shuffle階段:將map的輸出作為reduce的輸入的過程就是shuffle了,這個是mapreduce優化的重點地方。講講shuffle階段的原理,因為大部分的書籍裡都沒講清楚shuffle階段。shuffle一開始就是map階段做輸出操作,一般mapreduce計算的都是海量資料,map輸出時候不可能把所有檔案都放到記憶體操作,因此map寫入磁碟的過程十分的複雜,更何況map輸出時候要對結果進行排序,記憶體開銷是很大的,map在做輸出時候會在記憶體裡開啟乙個環形記憶體緩衝區,這個緩衝區專門用來輸出的,預設大小是100mb,並且在配置檔案裡為這個緩衝區設定了乙個閥值,預設是0.80(這個大小和閥值都是可以在配置檔案裡進行配置的),同時map還會為輸出操作啟動乙個守護執行緒,如果緩衝區的記憶體達到了閥值的80%時候,這個守護執行緒就會把內容寫到磁碟上,這個過程叫spill,另外的20%記憶體可以繼續寫入要寫進磁碟的資料,寫入磁碟和寫入記憶體操作是互不干擾的,如果快取區被撐滿了,那麼map就會阻塞寫入記憶體的操作,讓寫入磁碟操作完成後再繼續執行寫入記憶體操作,前面我講到寫入磁碟前會有個排序操作,這個是在寫入磁碟操作時候進行,不是在寫入記憶體時候進行的,如果我們定義了combiner函式,那麼排序前還會執行combiner操作。每次spill操作也就是寫入磁碟操作時候就會寫乙個溢位檔案,也就是說在做map輸出有幾次spill就會產生多少個溢位檔案,等map輸出全部做完後,map會合併這些輸出檔案。這個過程裡還會有乙個partitioner操作,對於這個操作很多人都很迷糊,其實partitioner操作和map階段的輸入分片(input split)很像,乙個partitioner對應乙個reduce作業,如果我們mapreduce操作只有乙個reduce操作,那麼partitioner就只有乙個,如果我們有多個reduce操作,那麼partitioner對應的就會有多個,partitioner因此就是reduce的輸入分片,這個程式設計師可以程式設計控制,主要是根據實際key和value的值,根據實際業務型別或者為了更好的reduce負載均衡要求進行,這是提高reduce效率的乙個關鍵所在。到了reduce階段就是合併map輸出檔案了,partitioner會找到對應的map輸出檔案,然後進行複製操作,複製操作時reduce會開啟幾個複製執行緒,這些執行緒預設個數是5個,程式設計師也可以在配置檔案更改複製執行緒的個數,這個複製過程和map寫入磁碟過程類似,也有閥值和記憶體大小,閥值一樣可以在配置檔案裡配置,而記憶體大小是直接使用reduce的tasktracker的記憶體大小,複製時候reduce還會進行排序操作和合併檔案操作,這些操作完了就會進行reduce計算了。

reduce階段:和map函式一樣也是程式設計師編寫的,最終結果是儲存在hdfs上的。

job counters

launched map tasks=2

launched reduce tasks=1 預設值 控制最終輸出的檔案個數

簡而言之shuffle: 洗牌的,相同的key通過網路傳輸拉到一起,但當某個key的資料量特別大,會有資料傾斜。

spark 調優的

大資料入門

處理過程 cpu處理記憶體資料,記憶體資料從硬碟中讀取 瓶頸 當資料量大時,會增加硬碟到記憶體的io 單機為縱向擴充套件,成本較高,要求硬碟要大,記憶體要大,cpu速度要快 分布式儲存 大資料用n臺伺服器存放乙份大的資料,對資料進行並行處理,io比單臺裝置整整提公升n倍。解決伺服器成本問題和io讀寫...

大資料入門 2 Hadoop HDFS詳解1

以前64m,現在128m 容量規格 也可dfs.blocksize 128m調整為256m,基於生產環境決定。hdfs 適應場景 大檔案儲存,小檔案是致命的 生產上 1.小檔案閾值,自己去看一下,取個中間值。2.如何合併小檔案 資料未落地到hdfs之前合併,資料已經落到hdfs,spark serv...

大資料基礎Hadoop 2 x入門

儲存和分析網路資料 三大元件 hdfs yarn common hive 蜜蜂 通過使用sql語句來執行hadoop任務 hbase 儲存結構化資料的分布式資料庫 zookeeper 維護節點狀態 使用docker安裝 docker run i t p 50070 50070 p 9000 9000...