Hadoop是什麼:
1)Hadoop 是一個由 Apache 基金會所開發的分佈式系統基礎架構
2)主要解決,海量數據的存儲和海量數據的分析計算問題。
3)廣義上來說,HADOOP 通常是指一個更廣泛的概念——HADOOP 生態圈
Hadoop的組件構成:
1)Hadoop HDFS:一個高可靠、高吞吐量的分佈式文件系統。
2)Hadoop MapReduce:一個分佈式的離線並行計算框架。
3)Hadoop YARN:作業調度與集羣資源管理的框架。
4)Hadoop Common:支持其他模塊的工具模塊(Configuration、RPC、序列化機制、日誌操作)。
1.1 HDFS 產生背景
隨着數據量越來越大,在一個操作系統管轄的範圍內存不下了,那麼就分配到更多的操作系統管理的磁盤中,但是不方便管理和維護,迫切需要一種系統來管理多臺機器上的文件, 這就是分佈式文件管理系統。HDFS 只是分佈式文件管理系統中的一種。
1.2 HDFS 概念
HDFS,它是一個文件系統,用於存儲文件,通過目錄樹來定位文件;其次,它是分佈式的,由很多服務器聯合起來實現其功能,集羣中的服務器有各自的角色。
HDFS 的設計適合一次寫入,多次讀出的場景,且不支持文件的修改。適合用來做數據分析,並不適合用來做網盤應用。
1.3 HDFS 優缺點
1.3.1 優點
1)高容錯性
(1)數據自動保存多個副本。它通過增加副本的形式,提高容錯性。
(2)某一個副本丟失以後,它可以自動恢復。
2)適合大數據處理
(1)數據規模:能夠處理數據規模達到 GB、TB、甚至 PB 級別的數據。
(2)文件規模:能夠處理百萬規模以上的文件數量,數量相當之大。
3)流式數據訪問
(1)一次寫入,多次讀取,不能修改,只能追加。
(2)它能保證數據的一致性。
4)可構建在廉價機器上,通過多副本機制,提高可靠性。
1.3.2 缺點
1)不適合低延時數據訪問,比如毫秒級(Mysql)的存儲數據,是做不到的。
2)無法高效的對大量小文件進行存儲
(1)存儲大量小文件的話,它會佔用 NameNode 大量的內存來存儲文件、目錄和塊信息。這樣是不可取的,因爲 NameNode 的內存總是有限的。
(2)小文件存儲的尋址時間會超過讀取時間,它違反了 HDFS 的設計目標。
3)併發寫入、文件隨機修改
(1)一個文件只能有一個寫,不允許多個線程同時寫。
(2)僅支持數據 append(追加),不支持文件的隨機修改。
1.4 HDFS 架構
主要由四個部分組成,分別爲 HDFS Client、NameNode、DataNode 和 SecondaryNameNode。下面我們分別介紹這四個組成部分。
1)Client:就是客戶端。
(1)文件切分。文件上傳 HDFS 的時候,Client 將文件切分成一個一個的 Block,然後進行存儲。
(2)與 NameNode 交互,獲取文件的位置信息。
(3)與 DataNode 交互,讀取或者寫入數據。
(4)Client 提供一些命令來管理 HDFS,比如啓動或者關閉 HDFS。
(5)Client 可以通過一些命令來訪問 HDFS。
2)NameNode:就是 master,它是一個主管、管理者。
(1)管理 HDFS 的名稱空間。
(2)管理數據塊(Block)映射信息
(3)配置副本策略
(4)處理客戶端讀寫請求。
3) DataNode:就是 Slave(從節點)。NameNode 下達命令,DataNode 執行實際的操作。
(1)存儲實際的數據塊。
(2)執行數據塊的讀/寫操作。
4)Secondary NameNode:並非 NameNode 的熱備。當 NameNode 掛掉的時候,它並不能馬上替換 NameNode 並提供服務。
(1)輔助 NameNode,分擔其工作量。
(2)定期合併 Fsimage 和 Edits,並推送給 NameNode。
(3)在緊急情況下,可輔助恢復 NameNode。
1.5 HDFS 文件塊大小
HDFS 中的文件在物理上是分塊存儲(block),塊的大小可以通過配置參數( dfs.blocksize)來規定,默認大小在 hadoop2.x 版本中是 128M,老版本中是 64M。