天天看點

hadoop之shuffle------>MapReduce的心髒i

一 、shuffle簡介

   什麼是shuffle

    一句話:Reducer端擷取Mapper端的資料的過程

二、shuffle工作流程

hadoop之shuffle------>MapReduce的心髒i

1.Map讀取輸入檔案

------>進行map計算

------>Mapper将資料寫入到環形緩沖區

  注意:1.一個Mapper對應一個環形緩沖區

   2.環形緩沖區存在于記憶體中,預設100M,mappered-site.xml中可以配置值

------>當環形緩沖區中内容超過80%(預設門檻值時0.8)時,背景線程開始把内容寫向磁盤的小檔案中(spill過程)

------>當一個小檔案滿了之後,開始寫向下一個小檔案

      注意:寫向磁盤的小檔案之前會對Mapper中資料進行Partitioner分區(HashPartitioner)

---> 小檔案中對每個分區按照分區号進行排序'

--->再對小檔案中每個分區中的内容按鍵(key)進行内排序,

  ---> 如果有combiner(combiner可有可無),則會在排序後進行combiner運算

------>然後将所有小檔案合并成一個大檔案,相同分區号的進行合并

------>合并成一個大檔案後再次進行排序

        最終得到一個分區且排序的大檔案,Mapper的任務完成

2.每個Reducer對應一個分區号,(0号Reducer對應0号分區的内容,1号Reducer對應1号分區的内容......)

------>  Ruducer從大檔案中去讀取相應分區的檔案

------>(每個Mapper會産生一個大檔案,故讀取後會到很多檔案)然後進行合并

------>排序

------>給Reducer計算

------>輸出

三 、shuffle拉取資料過程

   在上文中提到“Ruducer從大檔案中去讀取相應分區的檔案”,那麼問題來了,那麼多map産生的檔案,reducer如何知道去哪一個map中的哪一個分區中去拉取資料呢?

hadoop之shuffle------>MapReduce的心髒i

 ResourceManager會告訴NodeManager開始工作

------>NodeManager此時啟動子程序yarnChild

------>ResourceManager會與MrAppMaster進行RPC通信,(MrAppMaster會配置設定到其中一個yarnChild所在的機器上)ResourceManager要求MrAppMaster啟動任務監控程序

------>MrAppMaster會向ResourceManager申請資源

------>MrAppMaster會啟動yarnChild子程序開始進行工作

------>執行Map任務的yarnChild會向MrAppMaster彙報輸出資訊(如Mapper完成後的資料存儲在哪台機器,哪個分區,每個分區的偏移量等映射關系)

------>其他機器的Reducer會向MrAppMaster詢問這種映射關系

------>根據映射關系,Reducer知道去哪台機器,哪個分區,哪個偏移量中擷取資料

------>開始去相應的分區中下載下傳資料,進行Reducer計算

繼續閱讀