天天看點

Hadoop三大元件剖析【精】

概述

Hadoop三大元件剖析【精】

該篇文章主要解釋Hadoop2.0三大元件HDFS+MapReduce+Yarn.其中HDFS負責存儲,MapRduce負責計算,Yarn負責資源管理。

HDFS架構圖

Hadoop三大元件剖析【精】
  1. namenode,名位元組點,最主要管理HDFS的中繼資料資訊
  2. datanode,資料節點,存儲檔案塊、
  3. replication,檔案塊的副本,目的是確定資料存儲的可靠性
  4. rack機器
  5. Client用戶端。凡是通過指令或代碼操作的一端都是用戶端。
  6. Client的Read(從HDFS下載下傳檔案到本地)
  7. Client的Write(上傳檔案到HDFS上)

HDFS讀取檔案過程

Hadoop三大元件剖析【精】

1.用戶端向namenode發起Open File。目的是擷取要下載下傳的檔案的輸入流。

2.用戶端在發起Open File的同時,還會調用GetBlockLocation.當第一步的檢查通過以後namenode會将檔案的塊資訊(中繼資料資訊)封裝到輸入流,交給用戶端。

3,4用戶端用輸入流,根據中繼資料資訊,去指定的datanode讀取檔案塊(按blockid順序讀取)

5.檔案下載下傳完後關閉。

BlockSender介紹

  1. 當使用者向HDFS讀取某一個檔案時,用戶端會根據資料所在的位置轉向到具體的DataNode節點請求對應資料塊的資料,此時DataNode節點會用BlockSender向該用戶端發送資料;
  2. 當NameNode節點發現某個Block的副本不足時,它會要求某一個存儲了該Block的DataNode節點向其他DataNode節點複制該Block,當然此時仍然會采用流水線的複制方式,隻不過資料來源變成 了一個DataNode節點;
  3. HDFS開了一個調節DataNode負責均衡的工具Balancer,當它發現某一個DataNode節點存儲的Block過多時,就會讓這個DataNode節點轉移一部分Blocks到新添加到叢集的DataNode節點或者存儲負載輕的DataNode節點上;

    sh start-balancer.sh -t %10

    百分數時磁盤使用變差率,一般調節的範圍在10%~20%間。

  4. DataNode會定義利用BlockSender來檢查一個Block的節點資料是否損壞。

HDFS寫的過程

Hadoop三大元件剖析【精】

1.用戶端發去CreeteFile,目的時擷取HDFS檔案的輸出流,namenode收到請求後會檢測路徑的合法性,以及權限。原生Hadoop的權限管理不是很完善,工作中用的是CDH(商業版Hadoop)

如果檢測通過,namenode會為這個檔案生成塊的中繼資料資訊(比如:1為檔案切塊2配置設定塊id3配置設定每個塊存在那個datanode上),然後将原屬資訊封裝到輸出流中,傳回給用戶端。

2.3Client拿出輸出流之後,采用PipeLine(資料流管道)機制做資料的上傳發送,這樣設計的目的在于利用每台服務的帶寬,最小化推送資料的延時。

packet是一個64Kb大小的資料包,即用戶端在發送檔案塊時,會在檔案塊變成一個一個的資料發送。

4.5. 每台datanode收到packet,會向上遊datanode做ack确認,如果接受失敗,會進行重發

6. 當一個檔案上傳完後,關流。

HDFS删檔案流程

  1. 當用戶端發起一個删除指令:Hadoop fs -rm /park01/.txt,這個指令會傳給namenoe
  2. 當namenode收到指令後,做路徑和權限檢測,如果檢測都通過,會将對應的檔案資訊從記憶體裡删除,此時,檔案資料并不是馬上就從叢集上被删除。
  3. datanode向namenode發送心跳時(預設時3s周期),會領取删除指令,然後從磁盤上将檔案删除。

MapReduce

概述

MapReduce是一個分布式的計算架構(程式設計模型)。

MapReduce架構的節點組成結構

ResourceManager:任務排程者,管理多個

ResourceManager是hadoop2.0版本之後引入了yarn,有yarn來管理Hadoop.

NodeManager:任務執行者

Hadoop三大元件剖析【精】

MapReudce計算架構抽象出兩個任務階段,Map任務階段和Reduce任務階段。

由于叢集工作過程中,需要用到RPC操作,是以MR處理的對象必須可以進行序列化/反序列操作。Hadoop利用的是avro實作的序列化和反序列化,并且在其基礎上提供了便捷的API,要序列化對象必須實作相關的接口:Writable接口-WritableComparable。

partitioner分區操作

1.Hadoop預設的reduce數量是一個,即預設的分區是1個

2.假設有多個分區,Hadoop預設是用簡單哈希雜湊演算法,計算Mapper輸出的key值,然後進行分區。這樣能夠確定同一個Key落到同一個分區。

3.有幾個分區,就會有幾個結果檔案

4.先分區,然後再按key合并。

shuffle

其實說MR階段最核心的也就是shuffle過程

Hadoop三大元件剖析【精】

流程詳解

上面的流程是整個mapreduce最全工作流程

1)maptask收集我們的map()方法輸出的kv對,放到記憶體緩沖區中

2)從記憶體緩沖區不斷溢出本地磁盤檔案,可能會溢出多個檔案

3)多個溢出檔案會被合并成大的溢出檔案

4)在溢出過程中,及合并的過程中,都要調用partitoner進行分組和針對key進行排序

5)reducetask根據自己的分區号,去各個maptask機器上取相應的結果分區資料

6)reducetask會取到同一個分區的來自不同maptask的結果檔案,reducetask會将這些檔案再進行合并(歸并排序)

7)合并成大檔案後,shuffle的過程也就結束了,後面進入reducetask的邏輯運算過程(從檔案中取出一個一個的鍵值對group,調用使用者自定義的reduce()方法)

Hadoop三大元件剖析【精】
Hadoop三大元件剖析【精】
Hadoop三大元件剖析【精】
Hadoop三大元件剖析【精】
Hadoop三大元件剖析【精】
Hadoop三大元件剖析【精】
Hadoop三大元件剖析【精】

Yarn

yarn是一種新的Hadoop資料總管,它是一個通用管理原理系統,可為上層應用提供統一的資源管理和排程,它的引入為叢集在資源使用率、資源同意管理和資料共享等方面帶來的巨大的好處。

YARN的基本思想是将jobTracker的兩個主要功能(資源管理和作業排程/監控)分離。

要了解yarn首先要了解yarn的核心思想

a.一個全局的資料總管ResourceManager

b.ResourceManager的每個節點代理NodeManager

c.表示每個應用的ApplicationMaster

d.每一個ApplicationMaster擁有多個Container在NodeManager上運作。

yarn架構圖

Hadoop三大元件剖析【精】

要想明白yarn架構可以通過執行MapReduce job來看Shared FileSystem(檔案共享系統)以及ResouceManager、NodeManager、ApplicationMaster之間的關系。

1、 用戶端通過送出MR的job.ResouceManager會會收集Job環境資訊,比如輸入路徑、輸出結果路徑等資訊,如果有錯誤就會抛出異常,并終止job的後續送出。

2、ResouceManager确認無誤後會給Job傳回一個new application。

3、4、job得到application的資源資訊,會copy到共享檔案系統,并且送出給ResourceManager。

5、 然後ResourceManager會開啟一個資源容器告訴NodeManager,然後ResourceManager會開啟一個資源容器通知到NodeManager,

6 、7 、8、 NodeManager詢問applicationMaster這個job執行需要多少資源,ApplicationMaster初始化任務,向SharedFileSystem(檔案共享系統)詢問這個job所擁有的資源,并且得到的資源資訊告訴nodeManager和ResouceManager。

9、10 、11、 NodeManager收到ApplicationMaster的資源資訊後後開啟一個子程序,根據共享檔案系統給的資源執行對應的MapTask任務。

繼續閱讀