Hadoop是什麼
- Hadoop是一個開源的大數據框架
- Hadoop是一個分佈式計算的解決方案
- Hadoop = HDFS(分佈式文件系統)+ MapReduce(分佈式計算)
Hadoop核心
- HDFS分佈式文件系統:存儲是大數據技術的基礎
- MapReduce編程模型:分佈式計算是大數據應用的解決方案
Hadoop基礎架構
HDFS概念
數據塊
NameNode
DataNode
數據塊:抽象塊而非整個文件作爲存儲單;默認大小64MB一般設置爲128M,備份X3。
NameNode:管理文件系統的命名空間,存放文件元數據;維護着文件系統的所有文件和目錄,文件與數據塊的映射;記錄每個文件中各個塊所在數據節點的信息。
DataNode:存儲並檢索數據塊;向NameNode更新所存儲塊的列表。
HDFS優點
- 適合大文件存儲,支持TB、PB級的數據存儲,並有副本策略。
- 可以構建在廉價的機器上,並有一定的容錯和恢復機制。
- 支持流式數據訪問,一次寫入多次讀取最高效。
HDFS缺點
- 不適合大量小文件存儲
- 不適合併發寫入,不支持文件隨機修改。
- 不支持隨機讀取等低延時的訪問方式。
Hadoop各個功能模塊的理解
1、HDFS模塊
HDFS負責大數據的存儲,通過將大文件分塊後進行分佈式存儲方式,突破了服務器硬盤大小的限制,解決了單臺機器無法存儲大文件的問題,HDFS是個相對獨立的模塊,可以爲YARN提供服務,也可以爲HBase等其他模塊提供服務。
2、YARN模塊
YARN是一個通用的資源協同和任務調度框架,是爲了解決Hadoop1.x中MapReduce裏NameNode負載太大和其他問題而創建的一個框架。
YARN是個通用框架,不止可以運行MapReduce,還可以運行Spark、Storm等其他計算框架。
3、MapReduce模塊
MapReduce是一個計算框架,它給出了一種數據處理的方式,即通過Map階段、Reduce階段來分佈式地流式處理數據。它只適用於大數據的離線處理,對實時性要求很高的應用不適用。
延伸思考
- 如何通過Hadoop存儲小文件?
a、在客戶端將小文件合併爲大文件。
Hadoop會把每一個小文件傳遞給map()函數,而Hadoop在調用map()函數時會創建一個映射器,這樣就會創建了大量的映射器,應用的運行效率並不高。如果使用和存儲小文件,通常就會創很多的映射器。解決小文件問題的主要目的就是通過合併小文件爲更大的文件來加快Hadoop的程序的執行,解決小文件問題可以減少map()函數的執行次數,相應地提高hadoop作業的整體性能。
b、使用Hadoop的CombineFileInputFormat<K,V>實現小文件的合併。
使用Hadoop API(抽象類CombineFileInputFormat)來解決小文件的問題。抽象類CombineFileInputFormat的基本思想是通過使用一個定製的InputFormat允許將小文件合併到Hadoop的分片(split)或塊(chunk)中。 - 當有節點故障的時候,集羣是如何繼續提供服務的,如何讀、寫?
- 哪些是影響MapReduce性能的因素?
a、硬件(或者資源)因素,如CPU、磁盤I/O、網絡帶寬和內存大小。
b、底層存儲系統。
c、輸入數據、分揀(shuffle)數據以及輸出數據的大小,這與作業的運行時間緊密相關。
d、作業算法(或者程序),如map、reduce、partition、combine和compress。有些算法很難在MapReduce中概念化,或者在MapReduce中效率可能會降低。
HDFS寫流程
1、客戶端想NameNode發起寫數據請求
2、分塊寫入DataNode節點,DataNode自動完成副本備份
3、DataNode向NameNode彙報存儲完成,NameNode通知客戶端
HDFS讀流程
1、客戶端向NameNode發起讀數據請求
2、NameNode找出距離最近的DataNode節點信息
3、客戶端從DataNode分塊下載文件
MapReduce
MapReduce是一種編程模型,是一種編程方法,是抽象的理論。
- YARN概念(通用的資源協同和任務調度框架)
- ResourceManager
分配和調度資源、啓動並監控ApplicationMaster、監控NodeManager - ApplicationMaster
爲MR類型的程序申請資源,並分配給內部任務、負責數據的切分、監控任務的執行及容錯 - NodeManager
管理單個節點的資源、處理來自ResourceManager的命令、處理來自ApplicationMaster的命令
- ResourceManager
MapReduce四個階段
- Split階段
- Map階段(需要編碼)
- Shuffle階段
- Reduce階段(需要編碼)
MapReduce編程模型
- 輸入一個大文件,通過split之後將其分爲多個分片
- 每個文件分片由單獨的機器去處理,這就是Map方法
- 將各個機器計算的結果進行彙總並得到最終的結果,這就是Reduce方法。