1. 程式人生 > >Hadoop學習筆記—10.Shuffle過程那點事兒

Hadoop學習筆記—10.Shuffle過程那點事兒

一、回顧Reduce階段三大步驟

  在第四篇博文《初識MapReduce》中,我們認識了MapReduce的八大步驟,其中在Reduce階段總共三個步驟,如下圖所示:

reduce stage

  其中,Step2.1就是一個Shuffle操作,它針對多個map任務的輸出按照不同的分割槽(Partition)通過網路複製到不同的reduce任務節點上,這個過程就稱作為Shuffle。

PS:Hadoop的shuffle過程就是從map端輸出到reduce端輸入之間的過程,這一段應該是Hadoop中最核心的部分,因為涉及到Hadoop中最珍貴的網路資源,所以shuffle過程中會有很多可以調節的引數,也有很多策略可以研究,這方面可以看看大神董西成

的相關文章或他寫的MapReduce相關書籍。

二、Shuffle過程淺析

  上圖中分為Map任務和Reduce任務兩個階段,從map端輸出到reduce端的紅色和綠色的線表示資料流的一個過程,也我們所要了解的Shuffle過程。

2.1 Map端

  (1)在map端首先接觸的是InputSplit,在InputSplit中含有DataNode中的資料,每一個InputSplit都會分配一個Mapper任務,Mapper任務結束後產生<K2,V2>的輸出,這些輸出先存放在快取,每個map有一個環形記憶體緩衝區,用於儲存任務的輸出。預設大小100MB(io.sort.mb屬性),一旦達到閥值0.8(io.sort.spil l.percent),一個後臺執行緒就把內容寫到(spill)Linux本地磁碟中的指定目錄(mapred.local.dir)下的新建的一個溢位寫檔案。

總結:map過程的輸出是寫入本地磁碟而不是HDFS,但是一開始資料並不是直接寫入磁碟而是緩衝在記憶體中,快取的好處就是減少磁碟I/O的開銷,提高合併和排序的速度。又因為預設的記憶體緩衝大小是100M(當然這個是可以配置的),所以在編寫map函式的時候要儘量減少記憶體的使用,為shuffle過程預留更多的記憶體,因為該過程是最耗時的過程。

  (2)寫磁碟前,要進行partition、sort和combine等操作。通過分割槽,將不同型別的資料分開處理,之後對不同分割槽的資料進行排序,如果有Combiner,還要對排序後的資料進行combine。等最後記錄寫完,將全部溢位檔案合併為一個分割槽且排序的檔案。

  (3)最後將磁碟中的資料送到Reduce中,從圖中可以看出Map輸出有三個分割槽,有一個分割槽資料被送到圖示的Reduce任務中,剩下的兩個分割槽被送到其他Reducer任務中。而圖示的Reducer任務的其他的三個輸入則來自其他節點的Map輸出。

補充:在寫磁碟的時候採用壓縮的方式將map的輸出結果進行壓縮是一個減少網路開銷很有效的方法!關於如何使用壓縮,在本文第三部分會有介紹。

2.2 Reduce端

  (1)Copy階段:Reducer通過Http方式得到輸出檔案的分割槽。

  reduce端可能從n個map的結果中獲取資料,而這些map的執行速度不盡相同,當其中一個map執行結束時,reduce就會從JobTracker中獲取該資訊。map執行結束後TaskTracker會得到訊息,進而將訊息彙報給JobTracker,reduce定時從JobTracker獲取該資訊,reduce端預設有5個數據複製執行緒從map端複製資料。

  (2)Merge階段:如果形成多個磁碟檔案會進行合併

  從map端複製來的資料首先寫到reduce端的快取中,同樣快取佔用到達一定閾值後會將資料寫到磁碟中,同樣會進行partition、combine、排序等過程。如果形成了多個磁碟檔案還會進行合併,最後一次合併的結果作為reduce的輸入而不是寫入到磁碟中。
  (3)Reducer的引數:最後將合併後的結果作為輸入傳入Reduce任務中。

總結:當Reducer的輸入檔案確定後,整個Shuffle操作才最終結束。之後就是Reducer的執行了,最後Reducer會把結果存到HDFS上。

三、Hadoop中的壓縮

  剛剛我們在瞭解Shuffle過程中看到,map端在寫磁碟的時候採用壓縮的方式將map的輸出結果進行壓縮是一個減少網路開銷很有效的方法。其實,在Hadoop中早已為我們提供了一些壓縮演算法的實現,我們不用重複造輪子了。

3.1 解壓縮演算法的實現:Codec

  Codec是Hadoop中關於壓縮,解壓縮的演算法的實現,在Hadoop中,codec由CompressionCode的實現來表示。下面是一些常見壓縮演算法實現,如下圖所示:

3.2 MapReduce的輸出進行壓縮

  (1)MapReduce的輸出屬性如下所示

  (2)在Java中如何針對輸出設定壓縮 ★★★

  上圖中在reduce端輸出壓縮使用了剛剛Codec中的Gzip演算法,當然你也可以使用bzip2演算法;

參考資料

作者:周旭龍

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。

相關推薦

Hadoop學習筆記10.Shuffle過程事兒

一、回顧Reduce階段三大步驟   在第四篇博文《初識MapReduce》中,我們認識了MapReduce的八大步驟,其中在Reduce階段總共三個步驟,如下圖所示:   其中,Step2.1就是一個Shuffle操作,它針對多個map任務的輸出按照不同的分割槽(Partition)通過網路複製到不

hadoop學習筆記-HDFS的REST接口

字段 edi -o created hadoop ftw rar hdfs lang 在學習HDFS的過程中,重點關註了HDFS的REST訪問接口。以前對REST的認識非常籠統,這次通過對HDFS的REST接口進行實際操作,形成很直觀的認識。 1? 寫文件操作 寫文件

SRS學習筆記10-SrsConnection及其子類分析

when red ins parse discovery bsp for port std SrsConnection類代表一個client的連接,其中封裝了st thread,用於在一個單獨的st thread裏處理一個client的服務請求. SrsConnection

Android:日常學習筆記(10)———使用LitePal操作數據庫

分享 數據 turn find netstat price 彈出 category 模式 Android:日常學習筆記(10)———使用LitePal操作數據庫 引入LitePal 什麽是LitePal   LitePal是一款開源的Android數據庫框架,采用了對象關系

Hadoop 學習筆記 (2) -- 關於MapReduce

規模 pre 分析 bsp 學習筆記 reduce 數據中心 階段 圖例 1. MapReduce 定義: 是一種可用於數據處理的編程的模型 優勢: MapReduce 本質上是並行運行的,因此可以將大規模的數據分析任務,分發給任何一個擁有足夠多機器

swift學習筆記(五)構造過程

不能 學習筆記 結構體 rri -a 依據 類的屬性 去掉 trac 構造過程是為了使用某個類、結構體或枚舉類型的實例而進行的準備過程。在構造過程中,對每一個屬性進行了初始值預設和其它必要的準備和初始化工作。 與OC相比,swift的構造函數。不須要返回值。同一時候,在

mybatis學習筆記(10)-一對一查詢

creat art ota div system spl 指定 tor block mybatis學習筆記(10)-一對一查詢

hadoop學習筆記(1)

ppi datanode ati fonts 管理系 ive 監控 system 分配 1.HDFS架構: NameNode保存元數據信息,包含文件的owner,permission。block存儲信息等。存儲在內存。 2.HDFS設計思想

hadoop入門筆記MapReduce Shuffle簡介(五)

單位 海量數據 並行處理 詳細 但是 信息 不能 utf 適合 1. MapReduce 定義   Hadoop 中的 MapReduce是一個使用簡單的軟件框架,基於它寫出來的應用程序能夠運行在由上千個商用機器組成的大型集群上,並以一種可靠容錯式並行處理TB級別的數據集

Hadoop學習筆記:MapReduce框架詳解

object 好的 單點故障 提高 apr copy 普通 exce 代表性 開始聊mapreduce,mapreduce是hadoop的計算框架,我學hadoop是從hive開始入手,再到hdfs,當我學習hdfs時候,就感覺到hdfs和mapreduce關系的緊密。這個

MySQL學習筆記10復制錯誤處理(一)表已存在的問題

opp upd char execute set 現在 try state error: (1)錯誤情況 在slave上已經有數據表test,而master上並沒有這張表,現在在master上新建test表,則slave上的復制過程會出錯。 MySQL的log記錄中相關信息

七、Hadoop學習筆記————調優之Hadoop參數調優

node 參數 受限 .com 資源 mage 預留空間 嘗試 nod dfs.datanode.handler.count默認為3,大集群可以調整為10 傳統MapReduce和yarn對比 如果服務器物理內存128G,則容器內存建議為100比較合理 配置總

八、Hadoop學習筆記————調優之Hive調優

需要 cnblogs log logs nbsp .cn 集中 bsp 9.png 表1表2的join和表3表4的join同時運行 此法需要關註是否有數據傾斜(大量數據集中在某一區間段) 八、Hadoop學習筆記————調優之Hive調優

Hadoop學習筆記—5.自定義類型處理手機上網日誌

clas stat 基本 手機上網 oop interrupt pil 依然 手機號碼 一、測試數據:手機上網日誌 1.1 關於這個日誌   假設我們如下一個日誌文件,這個文件的內容是來自某個電信運營商的手機上網日誌,文件的內容已經經過了優化,格式比較規整,便於學習研究。

Hadoop學習筆記—18.Sqoop框架學習

max lec sql數據庫 creat rec apt 成功 不同的 mysql數據庫 一、Sqoop基礎:連接關系型數據庫與Hadoop的橋梁 1.1 Sqoop的基本概念     Hadoop正成為企業用於大數據分析的最熱門選擇,但想將你的數據移植過去並不容易。Apa

Hadoop學習筆記系列文章導航

集群 影子 1.5 .com 日誌分析 尋找 思想 硬件 力量 一、為何要學習Hadoop?   這是一個信息爆炸的時代。經過數十年的積累,很多企業都聚集了大量的數據。這些數據也是企業的核心財富之一,怎樣從累積的數據裏尋找價值,變廢為寶煉數成金成為當務之急。但數據增長的速

Hadoop學習筆記—16.Pig框架學習

rar 開發人員 ava 大型 arr 壓縮包 上網 結構化數據 模式 一、關於Pig:別以為豬不能幹活 1.1 Pig的簡介   Pig是一個基於Hadoop的大規模數據分析平臺,它提供的SQL-LIKE語言叫Pig Latin,該語言的編譯器會把類SQL的數據分析請求

Hadoop學習筆記—15.HBase框架學習(基礎知識篇)

dfs hdfs keep 負載均衡 包含 兩個 列族 文件存儲 version HBase是Apache Hadoop的數據庫,能夠對大型數據提供隨機、實時的讀寫訪問。HBase的目標是存儲並處理大型的數據。HBase是一個開源的,分布式的,多版本的,面向列的存儲模型,它

Hadoop學習筆記—19.Flume框架學習

暫存 ssh lin hadoop 兩個 move hdf 裝包 ons START:Flume是Cloudera提供的一個高可用的、高可靠的開源分布式海量日誌收集系統,日誌數據可以經過Flume流向需要存儲終端目的地。這裏的日誌是一個統稱,泛指文件、操作記錄等許多數據。

Hadoop學習筆記—21.Hadoop2的改進內容簡介

做的 說明 後者 實踐 管理系 一個 變化 它的 軟件 Hadoop2相比較於Hadoop1.x來說,HDFS的架構與MapReduce的都有較大的變化,且速度上和可用性上都有了很大的提高,Hadoop2中有兩個重要的變更: (1)HDFS的NameNode可以以集群的方式