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。