Hdfs:
hdfs寫流程:
![](http://static.javashuo.com/static/loading.gif)
- 客戶端經過DistributedFileSystem請求namenode上傳文件
- Namenode進行檢查,好比父路徑 文件自己,是否容許上傳
- Namenode相應信息給client 是否容許上傳
- 請求上傳第一個block塊
- Namenode根據元數據信息判斷,須要在哪些datanode上上傳,返回datanode列表,根據複本數返回datanode節點數。
- 客戶端經過FSDataOutputStream創建通道,客戶端先與datanode1創建通道,data1與data2,data2與data3創建通道
- 響應通道的應答消息
- 上傳block塊,在客戶端會造成數據隊列(block以pachage爲單位進行劃分),以pakage爲單位(默認大小爲64k)進行上傳
- 客戶端先傳給data1,先存儲在data1的內存中,而後再寫入磁盤。Data1將package傳給data2 ,data2傳給data3
- 10.響應pachage應答消息,響應給客戶端,從數據隊列中刪除package
block上傳完成當上傳其餘的block塊的時候 從4步開始執行 node
11.最後客戶端通知namenode上傳完成了緩存
hdfs 讀流程:
![](http://static.javashuo.com/static/loading.gif)
- 客戶端經過DistributedFileSystem與namenode進行通訊,請求下載文件
- Namenode經過查找本身的元數據信息,得到文件對應的block塊及其位置信息,響應給客戶端
- 客戶端經過網絡拓撲,選擇一臺datanode(就近原則),進行請求讀取,請求讀取的時候經過FSDataInputStream
- 客戶端以package爲單位進行讀取,先寫入到客戶單的本地的緩存中(內存中),而後同步到磁盤。
Yarn:
resourcemanager的基本職能歸納:服務器
- 與客戶端進行交互,處理來自於客戶端的請求,如查詢應用的運行狀況
- 啓動和管理各個應用的ApplicationMaster,而且爲ApplicationMaster申請第一個Container用於啓動和運行失敗時將它從新啓動
- 管理NodeManager,接受來自NodeManager的資源和節點健康狀況彙報,並向NodeManager下達管理資源命令,例如kill掉某個container
- 資源管理和調度,接受來自ApplicationMaster的資源申請,而且爲其進行分配。這個是他的最重要的只能。
MapReduce1 |
Yarn |
Jobtrack |
資源管理器(Resourcemanager)、applicationMaster、時間軸服務器 |
Tasktrack |
節點管理器(nodemanager) |
slot |
容器(container) |
MapReduce: