1. 程式人生 > >初步瞭解HDFS與MapReduce

初步瞭解HDFS與MapReduce

hadoop是一個開源框架,可編寫和執行分散式應用和處理大規模資料

核心是HDFS以及MapReduce


HDFS 分散式檔案系統

HDFS具備的優點:

1)高容錯性,資料自動儲存多個副本在不同機架上,提高容錯性,副本數低於最小副本數時會自動備份,我們無需關心具體實現

2)適合批處理,通過移動計算,而不是移動資料

3)適合大資料,處理資料達到TB甚至PB級,能夠處理百萬以上規模的檔案(由於NN的構造,不適合處理數量多的小檔案)

4)流式檔案訪問,檔案只能進行讀寫操作,不能進行修改操作(修改檔名不算),參考網盤的概念

5)可構建在廉價的機器上,因為是靠叢集的性質來實現的,所以不需要太好的機器,通過儲存多副本(增加了冗餘)提高可靠性,不易丟失

不適用的場景

1)低延遲資料訪問,無法做到毫秒內的讀寫資料,它適合高吞吐率的場景,比如某一時刻寫入大量資料

2)小檔案儲存,這樣NN會消耗大量記憶體,NN儲存的是metadata,這些資料都在記憶體中,讀取小檔案尋道時間會超過讀寫時間,違反HDFS設計思路

3)併發寫入,檔案隨機修改,不允許多執行緒同時寫一個檔案,只支援檔案的增刪,不能修改

HDFS如何儲存資料:

HDFS採用Master/Slave的架構儲存資料,由4個部分組成HDFS Client、NameNode、DataNode、SecondaryNameNode。

Client:客戶端,切割檔案,把檔案切分成固定大小的block塊(預設64MB),與NN互動獲取檔案位置資訊,與DN互動讀寫檔案

NameNode(NN):Master角色,管理HDFS的名稱空間,管理block的對映資訊,配置副本策略(block儲存在哪裡),處理客戶端讀寫請求

DataNode(DN):Slave角色,儲存block,NN下達命令,DN執行。

SecondaryNameNode(SNN):輔助NN,定期合併fsimage與fsedits,減少NN啟動時間,並推送給DN,假如NN掛掉了,SNN可幫助其恢復一部分資料(它不是NN的備份,但是可以做備份,DNN儲存了上次合併的fsimage與edits資訊,推送到SNN後生成的edits檔案會丟失)。 合併fsimage後把新生成的fsimage推送給DN,替換原來的檔案。

------根據配置檔案fs.checkpoint.period設定合併的時間間隔,預設3600s

------根據配置檔案設定edits log大小fs.checkpoint.size規定edits檔案的最大值合併,預設64MB

HDFS如何讀寫檔案,以及副本儲存參加下節。

MapReduce:分散式資料處理模型和執行環境

包含map函式與reduce函式,map相當於對檔案進行簡單的整理合並。reduce寫的才是核心的業務邏輯(我暫時這麼理解)

map任務處理:讀取輸入檔案,解析成key-value,對輸入檔案的每一行解析成key-value形式,每個鍵值對呼叫一次map函式,用自己的邏輯處理這些資料,比如把key相同的value合併,排序。。

reduce任務處理:對多個map的輸出分配到不同的reduce節點,編寫自己的邏輯,最終輸出到文字中

設計思想:

把大資料拆成幾份,並行處理,隱藏具體的實現細節,讓程式設計師更關注業務邏輯處理。

PS:

metedata(元資料,除檔案內容外的資料,檔案大小,字尾,許可權。。。。)

block儲存在哪個DN重不會儲存在fsimage中,但是啟動時DN會重新上報到記憶體中,fsimage儲存的是元資料資訊