Hadoop是什麼
一個提供分佈式存儲和計算的軟件框架,具有無共享,高可用,彈性可擴展特點,適合處理海量數據
1.Hadoop生態圈
2.Hadoop架構
2.1 HDFS
2.1.1 HDFS的架構
- NameNode
NameNode是HDFS的大腦,維護整個系統的目錄樹, - SecondaryNameNode
幫助NameNode合併文件系統元數據Log,並負責定期備份元數據,相當於NameNode的冷備。爲了解決熱備的問題,2.2後NameNode HA實現了對NameNode的熱備。 - DataNode
DataNode用於存放數據塊,在NameNode指導下完成I/O任務。可以在dfs.data.dir/current中看到這些塊(看起來一個普通文件)HDFS最小儲存單位是“塊”,默認64M,可由hdfs-site.xml中的dfs.block.size配置。每個塊在HDFS中的默認備份數是3,可由hdfs-site.xml中的dfs.relication配置。
2.1.2 HDFS容錯機制
- 心跳機制:DataNode向NameNode發送心跳包,如無心跳則進行檢測,遷移副本
- 檢測文件完整性:NameNode記錄校驗和,檢索和讀取時確認校驗,不一致則從其他備份獲取副本
- 節點塊容量負載均衡
- 備份NameNode上的元數據:通過SecondaryName備份
- 文件刪除:不立即刪除,存放在/trash目錄,由hdfs-site.xml-fs.trash.internal配置留存時間
2.1.3 HDFS數據讀寫
塊的分佈:
- 第一個副本隨機選擇節點
- 第二個副本和第一個副本放在不同機架
- 第三個副本和第二個放在同一機架 ,其他副本隨機安放
數據讀寫
- 數據讀取
- 數據寫入
2.1.4 HDFS訪問
- 命令行
- Web UI
http://localhost:9870/
參考之前mac上安裝hadoop的文章,安裝完畢後打開本地環境的webUI,可以看到剛剛介紹的關於NameNode,DataNode,Block等信息
2.2 YARN
在之前安裝hadoop的時候配置過yarn的xml,YARN是hadoop的資源管理和調度平臺,採用雙層調度器結構,由ResourceManager和NodeManager兩類進程組成。
如下圖所示,container是YARN的資源表示模型。ResourceManager是一級調度器,ApplicationMaster是二級調度器,運行在container中。
下圖是當客戶端提交一個應用後的操作,YARN有自己的命令行,終端中輸入yarn可以查看。通過yarn命令行,可以配置各種資源管理機制和參數。
2.3 MapReduce
MapReduce使用Map和Reduce兩個簡單思想處理對數據的作業。Map輸出鍵值對,Reduce對相同進行累加計數。安裝好hadoop後可以通過mapred-site.xml配置相關參數。
2.3.1 MapReduce實現WordCount
- split :InputSplit只做邏輯上的分割,MinSize由mapred-site.xml中的mapreduce.input.fileinputformat.split,minsize決定。MaxSize由FileInputFormat的setMaxInputSplitSize決定,SplitSize可以和BlockSize不一樣。splite可以將行號作爲鍵,把鍵值對傳給map函數
- map :Map函數對split輸出的鍵值對進行處理,生產中間的鍵值對,並輸入在內層緩存區中,並做partion和sort操作。緩存區大小由mapreduce.task.io.sort.mb配置。當文件大小超過緩存區,則寫入mapreduce.cluster.local.dir指定的硬盤。map函數的輸出可以壓縮,由mapreduce.output.fileoutputformat.compress=true指定
- combiner: combiner相當於在map端做一次reduce,count,sum,min,max可以使用combiner,減輕reduce端壓力。如果指定了combiner,會在map結果寫入磁盤前,對map後的partion做排序和統計
- shuffle:類比洗牌,把相同花色(相同鍵值)都洗在一起,發給對應都reduce
- reduce :對輸入進行reduce操作,規約出結果集