HDFS Federationnode
1 Backgroundweb
2.1 關鍵好處性能
3 聯合配置spa
3.1 配置設計
3.4 增長新的namenode到已經存在的cluster進程
4 管理集羣rpc
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。
爲了水平擴展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。
· Namespace擴展聯合增長了namespace的水平擴展。大的部署或者大量小文件的集羣能夠經過增長namenode得到好處。
· 性能文件系統吞吐不會被單個namenode限制。另外增長namenode會擴展文件系統的讀寫吞吐量。
· 隔離單個namenode不會對用戶進行隔離。好比,一個應用overload namenode會致使其餘應用性能降低。使用多個namenode,不一樣的應用分類,能夠隔離到不一樣的namenode上。
聯合配置是向後兼容的而且容許已經存在的單個namenode配置,不須要其餘修改。新的配置被設計用來全部的node均可以使用同樣的配置,不須要node不一樣的配置。
聯合增長了一個新的NameServiceID。Namnode和相關的secondary/backup/checkpointer node都屬於一個nameserviceid。爲了支持一個配置文件,namenode和secondary/backup/checkpointer node使用nameserviceid前綴。
步驟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 |
配置例子:
步驟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不是聯合集羣的一部分。
老的release只支持一個namenode。更新cluster到新的release而且提供一個clusterid:
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start namenode -upgrade -clusterId <cluster_ID>
若是沒有提供會自動生成。
步驟以下:
· 增長dfs.nameservices配置
· 使用nameserviceid前綴來更新配置。
· 增長一個新的namenode。
· 把配置文件發到全部的node
· 啓動新的namenode和secondary/backup
· 刷新datanode獲取新的namenode:
[hdfs]$ $HADOOP_HOME/bin/hdfs dfsadmin -refreshNamenodes <datanode_host_name>:<datanode_rpc_port>
啓動集羣命令:
[hdfs]$ $HADOOP_HOME/sbin/start-dfs.sh
關閉集羣命令:
[hdfs]$ $HADOOP_HOME/sbin/stop-dfs.sh
這個命令能夠集羣中的任何節點運行。命令使用配置決定集羣的namenode,而後在這些node啓動namenode進程。Workfile 中的node 啓動Datanode。能夠參考這個腳本設計本身的腳原本啓動和關閉集羣。
均衡器由於要運行在多個namenode被改變。均衡器可使用如下方法啓動:
[hdfs]$ $HADOOP_HOME/bin/hdfs --daemon start balancer [-policy <policy>]
Policy參數有2個:
· Datanode 這個是默認的策略,均衡datanode級別的存儲。和之前差很少。
· Blockpool會均衡blockpool級別,也會均衡datanode級別。
注意均衡器只會均衡data不會均衡namespace。
中止運行和以前的相似,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文件。
和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。