HDFS:Hadoop Distributed File System,Hadoop分佈式文件系統,主要用來解決海量數據的存儲問題。node
爲各種分佈式運算框架(如:MapReduce,spark,hive.....)提供數據存儲服務。
數據庫
數據切塊、副本存放、元數據安全
- 首先,它是個文件系統。用於存儲文件,經過統一的命名空間——目錄樹來定位文件。
- 其次,它是分佈式的。由不少服務器聯合起來實現其功能,集羣中的服務器有各自的角色。
經過上面的描述,hdfs有不少特色:服務器
如上圖所示,HDFS也是按照Master和Slave的結構。分爲NameNode(NN)、SecondaryNameNode、DataNode(DN)這幾個角色。網絡
NameNode:名稱節點。框架
- 是HDFS的主節點、管理員。
- 是接收客戶端(命令行、Java API程序 )的請求:建立目錄、上傳數據、下載數據、刪除數據等等。
- 管理和維護HDFS的日誌和元信息
DataName:數據節點。 負責存儲client發來的數據庫block;執行數據塊的讀寫操做。分佈式
SecondaryNameNode:是NameNode的冷備份;合併fsimage和fsedits而後再發給namenodeoop
fsimage:元數據鏡像文件(文件系統的目錄樹)
edits:元數據的操做日誌(針對文件系統作的修改操做記錄)
namenode內存中存儲的是=fsimage+edits。
SecondaryNameNode負責定時默認1小時,從namenode上,獲取fsimage和edits來進行合併,而後在發送給namenode,減小namenode的工做量。性能
1.低延時數據訪問。在yoghurt交互性的應用上,應用須要在ms或者幾個s的時間內獲得響應。因爲HDFS爲高吞吐率作了設計,也所以犧牲了快速響應。對於低延時的應用,能夠考慮HBase或者Cassandra。
2.大量的小文件。標準的HDFS數據塊的大小是128M(2.x),存儲小文件並不會浪費實際的存儲空間,可是無疑會增長在NameNode上的元數據。大量的小文件會影響整個集羣的性能。
Btrfs爲小文件作了優化-inline file,對於小文件有很好的空間優化和訪問時間優化。
3.多用戶寫入、修改文件。HDFS的文件只能有一個寫入者,並且寫操做只能在文件結尾以追加的方式進行。它並不支持多個寫入者,也不支持在文件寫入後,對文件的任意位置的修改。大數據
可是在大數據領域,分析的是已經存在的數據。這些數據一旦產生就不會修改。所以,HDFS的這些特性和設計的侷限也就容易理解了。HDFS爲大數據領域的數據分析,提供了很是重要並且十分基礎的文件存儲功能。
1.冗餘備份:每一個文件存儲成一系列數據塊(Block)。爲了容錯,文件的全部數據塊都會有副本(副本數量即複製因子,dfs.replication)。
2.副本存放:採用機架感知(Rak-aware)的策略來改進數據的可靠性、高可用和網絡帶寬的利用率。
3.心跳檢測:NameNode週期性地從集羣種的每個DataNode接收心跳包和塊報告,收到心跳包說明該DataNode工做正常。
4.安全模式:系統啓動時,NameNode會進入安全模式。此時不容許出現數據塊的寫操做。
5.數據完整性檢測:HDFS客戶端軟件實現了對HDFS文件內容的校驗(CheckSum)和檢查(dfs.bytes-per-checksum)。
若是NameNode失效,那麼客戶端或者MapReduce做用均沒法讀寫查看文件。
1.啓動一個擁有文件系統元數據的新NameNode(這個通常不採用,由於複製元數據很是消耗時間)。 2.配置一對活動-備用(Active-Standby)NameNode,活動NameNode失效時,備用NameNode當即接管,用戶不會有明顯中斷的感受。