HDFS Federation HDFS Federation. 1 1 Background. 1 2.多個namenode/namespace. 1 2.1 關鍵好處... 1 3 聯合配置... 1 3.1 配置... 1 3.2 格式化namenode. 1 3.3 更新老的release並 ...
HDFS Federation
1 Background
HDFS主要有2層
· Namespace
o 由目錄,文件和塊組成
o 支持所有namespace相關的文件系統操作,create,delete,modify和查看文件和目錄
· Block 存儲服務
o Block管理
§ 提供datanode clusterc成員,通過註冊和定期心跳控制。
§ 處理block report並且維護block位置。
§ Block的相關操作,比如創建,修改,刪除和獲取block位置。
§ 管理副本位置,block複製,如果超出刪除block副本。
o Storage 用來提供保存block,保存在本地文件系統,允許讀寫訪問。
之前的HDFS體繫結構允許一個namespace。在這個配置,一個namenode管理namespace。HDFS聯合支持多個namenode,namespace。
2.多個namenode/namespace
為了水平擴展name service,聯合使用多個獨立的namenode/namespace。Namenode是聯合的,獨立的不需要互相協助。Datanode作為通用存儲來保存所有的namenode的block。每個datanode會在所有的namenode中註冊。Datanode定期的發送心跳和block report。也處理來自namenode 的命令。
用戶使用ViewFS來創建個人的namespace view。ViewFs客戶端的mount table一樣。
Block Pool
Block pool是屬於一個namespace的block集合。Datanode保存了所有cluster的block pool的block。每個block pool都是獨立的。不需要其他namespace協助,允許一個namespace生成一個新的block id。一個Namenode錯誤不會阻止datanode為其他namenode服務。
Namespace和block pool一起稱為NameSpace Volume。是一個管理單元。當namenode/namespace被刪除,相關的block pool也會被刪除。當集群升級,每個namespace volume也是作為一個單元被更新的。
ClusterID
ClusterID用來標識cluster中所有的node。當namenode被格式化,標識符可以提供也可以自動生成。這個ID需要用來格式化其他namenode。
2.1 關鍵好處
· Namespace擴展聯合增加了namespace的水平擴展。大的部署或者大量小文件的集群可以通過增加namenode獲得好處。
· 性能文件系統吞吐不會被單個namenode限制。另外增加namenode會擴展文件系統的讀寫吞吐量。
· 隔離單個namenode不會對用戶進行隔離。比如,一個應用overload namenode會導致其他應用性能下降。使用多個namenode,不同的應用分類,可以隔離到不同的namenode上。
3 聯合配置
聯合配置是向後相容的並且允許已經存在的單個namenode配置,不需要其他修改。新的配置被設計用來所有的node都可以使用一樣的配置,不需要node不同的配置。
聯合增加了一個新的NameServiceID。Namnode和相關的secondary/backup/checkpointer node都屬於一個nameserviceid。為了支持一個配置文件,namenode和secondary/backup/checkpointer node使用nameserviceid首碼。
3.1 配置
步驟1:增加dfs.nameservices參數來配置使用逗號分隔。被datanode使用來決定cluster中的namenode。
步驟2:對於每個namenode和secondary/backup/checkpointer node增加以下配置使用nameserviceid作為首碼:
Daemon |
Configuration Parameter |
Namenode |
dfs.namenode.rpc-address |
Secondary Namenode |
dfs.namenode.secondary.http-address |
BackupNode |
dfs.namenode.backup.address |
配置例子:
3.2 格式化namenode
步驟1:格式化namenode使用以下命令:
[hdfs]$ $HADOOP_HOME/bin/hdfs namenode -format [-clusterId <cluster_id>]
選擇一個文藝的clusterid不能和環境中的其他cluster衝突。如果cluster_id不提供會自動生成一個唯一的cluster_id。
步驟2:格式化其他namenode:
[hdfs]$ $HADOOP_HOME/bin/hdfs namenode -format -clusterId <cluster_id>
註意這裡的clusterid要和上面的clusterid一樣。如果不同,另外的namenode不是聯合集群的一部分。
3.3 更新老的release並且配置聯合
老的release只支持一個namenode。更新cluster到新的release並且提供一個clusterid:
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start namenode -upgrade -clusterId
<cluster_ID>
如果沒有提供會自動生成。
3.4 增加新的namenode到已經存在的cluster
步驟如下:
· 增加dfs.nameservices配置
· 使用nameserviceid首碼來更新配置。
· 增加一個新的namenode。
· 把配置文件發到所有的node
· 啟動新的namenode和secondary/backup
·
刷新datanode獲取新的namenode:
[hdfs]$ $HADOOP_HOME/bin/hdfs dfsadmin -refreshNamenodes <datanode_host_name>:<datanode_rpc_port>
4 管理集群
4.1 啟動和關閉集群
啟動集群命令:
[hdfs]$ $HADOOP_HOME/sbin/start-dfs.sh
關閉集群命令:
[hdfs]$ $HADOOP_HOME/sbin/stop-dfs.sh
這個命令可以集群中的任何節點運行。命令使用配置決定集群的namenode,然後在這些node啟動namenode進程。Workfile 中的node 啟動Datanode。可以參考這個腳本設計自己的腳本來啟動和關閉集群。
4.2 均衡器
均衡器因為要運行在多個namenode被改變。均衡器可以使用以下方法啟動:
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start balancer [-policy <policy>]
Policy參數有2個:
· Datanode 這個是預設的策略,均衡datanode級別的存儲。和以前差不多。
· Blockpool會均衡blockpool級別,也會均衡datanode級別。
註意均衡器只會均衡data不會均衡namespace。
4.3 停止運行
停止運行和之前的類似,node需要被停運的,會增加到exclude文件中。當一個datanode中的所有namenode都停運,那麼datanode被認為停運了。
步驟1:複製exclude文件到所有的namenode,並執行一下命令:
[hdfs]$ $HADOOP_HOME/sbin/distribute-exclude.sh <exclude_file>
步驟2:刷新所有的namenode,獲取新的exclude文件的內容:
[hdfs]$ $HADOOP_HOME/sbin/refresh-namenodes.sh
上面的命令使用HDFS配置來決定cluster的namenode並且刷新exclude文件。
4.4 Cluster Web Console
和namenode狀態web page相似,當使用聯合可以使用cluster web Console可以通過http://<any_nn_host:port>/dfsclusterhealth.jsp監控聯合cluster。任何cluster中的namenode都可以在這個web中訪問。
這個Cluster Web Console提供以下信息:
· Cluster summary顯示了文件個數,block個數,總配置的存儲容量和可用的,已經使用的存儲。
· 列出namenode,summaryb包括文件個數,block,丟失的block和live和dead datanode。這個可以通過namenode的web UI訪問。
· 停止運行的datanode。