Hadoop 2.x HDFS新特性
Hadoop 2.x HDFS新特性
HDFS聯邦
HDFS HA(要用到zookeeper等,留在后面再講)
HDFS快照
回顧: HDFS兩層模型
Namespace: 包括目錄、文件和塊。它支持所有命名空間相關的文件操作,如創建、刪除、修改,查看所有文件和目錄。
Block Storage Service(塊存儲服務) 包括兩部分:
1 在namenode中的塊的管理:提供datanode集群的注冊、心跳檢測等功能。處理塊的報告信息和維護塊的位置信息。支持塊相關的操作,如創建、刪除、修改、獲取塊的位置信息。管理塊的冗余信息、創建副本、刪除多余的副本等。
2 存儲: datanode提供本地文件系統上塊的存儲、讀寫、訪問等。
1.x HDFS架構的弱點
HDFS架構在整個集群中允許且僅允許一個單獨的命名空間。命名空間被一個單獨的namenode節點所管理。這種架構決策實現簡單。但也會產生單點,內存瓶頸,性能瓶頸等限制。
HDFS聯邦
目的:水平擴展名稱服務
使用多個獨立的namenode和namespaces。每個namenode是獨立的,不需要和其它namenode協調合作。
datanode作為統一的塊存儲設備被所有namenode節點使用。
每一個datanode節點都在所有的namenode進行注冊。 datanode發送心跳信息、塊報告到所有namenode,同時執行所有namenode發來的命令。
塊池( Block Pool)
塊池是屬于單個命名空間的一組塊。
每一個datanode為所有的block pool存儲塊。
Datanode是一個物理概念,而block pool是一個重新將block劃分的邏輯概念。
同一個datanode中可以存著屬于多個block pool的多個塊。
Block pool允許一個命名空間在不通知其他命名空間的情況下為一個新的block創建Block ID。
一個Namenode失效不會影響其下的datanode為其他Namenode的服務。
HDFS聯邦的好處
Namespace的可擴展性, 1.x中集群存儲可以水平擴展(增加節點),但namespace不可以。
1.x的Namenode 存在單點瓶頸,在2.x中可以通過增加 namenode解決
隔離性。在1.x中,一個拙劣的應用可能耗盡namenode的性能資源從而影響其他應用運行, 2.x的多namenode可以將不同類型的應用和用戶隔離在不同的namespaces
命名空間管理細節
https://issues.apache.org/jira/secure/attachment/12453067/high-leveldesign.pdf
不采用文件名Hash這一在分布式系統里常用的手段,因為同一目錄下的文件可能散布于各個命名空間,性能很差
采用Client Side Mount Table,如下圖
聯邦未解決問題
并非真正HA, namenode失效會造成部分數據無法訪問
負載均衡難以自勱完成
HDFS快照
在2.x終于實現了快照
設置一個目錄為可快照:
hdfs dfsadmin -allowSnapshot <path>
取消目錄可快照:
hdfs dfsadmin -disallowSnapshot <path>
生成快照:
hdfs dfs -createSnapshot <path> [<snapshotName>]
刪除快照:
hdfs dfs -deleteSnapshot <path> <snapshotName>
快照位置
可快照目錄下的.snapshot子目錄
其它快照操作
列出所有可快照目錄:
hdfs lsSnapshottableDir
比較快照之間的差異:
hdfs snapshotDiff <path> <fromSnapshot> <toSnapshot>