下文给出了HDFS联合的总体概述,并且和1.x比较,最后是如何管理和配置集群。
图1是1.x HDFS架构:
从上图中,可以看出,HDFS分为两层,Namespace和Block Storage,下面分别回顾一下:
2,x提供NameNode水平扩展,但是NameNodes之间是相互独立,并不需彼此之间合作。DataNodes则被所有的NameNodes用作通用的块存储,每一个DataNode注册在集群中所有的NameNodes上。
DataNodes发送周期性心跳和块报告到NameNodes,并且处理NameNodes发送的命令。
2.x HDFS联盟的架构图如下:
主要优点:
联合配置是向下兼容(backword compatibale),允许存在单个NameNode配置运行并且不需要修改任何配置。新的配置被设计成集群中的所有结点具有相同的配置文件,而不需要根据集群中的结点类型部署不同的配置文件。
联合中增加一个叫NameServiceID的新的抽象。NameNode和它对应的二级/备份/检查点(secondary/backup/checkpointer)属于此。为了支持单配置文件,NameNode和第二/备份/检查点配置参数会加上NameServiceID,并且添加到相同配置文件中。
step1:增加下面的参数到你的配置文件中:dfs,nameservices:配置带以逗号隔开的NameServicesIDs列表。这个被DataNodes使用来确定集群中所有的NameNodes。
step2:对每个NameNode和二级NameNode/BackupNode/Checkpointer 增加如下的配置后缀对应的NameServiceID到公共配置文件中:
守护进程 | 配置参数 |
---|---|
Namenode | dfs.namenode.rpc-address dfs.namenode.servicerpc-address dfs.namenode.http-address dfs.namenode.https-address dfs.namenode.keytab.file dfs.namenode.name.dir dfs.namenode.edits.dir dfs.namenode.checkpoint.dir dfs.namenode.checkpoint.edits.dir |
Secondary Namenode | dfs.namenode.secondary.http-address dfs.secondary.namenode.keytab.file |
BackupNode | dfs.namenode.backup.address dfs.secondary.namenode.keytab.file |
下面是有两个NameNodes的配置文件:
<configuration> <property> <name>dfs.nameservices</name> <value>ns1,ns2</value> </property> <property> <name>dfs.namenode.rpc-address.ns1</name> <value>nn-host1:rpc-port</value> </property> <property> <name>dfs.namenode.http-address.ns1</name> <value>nn-host1:http-port</value> </property> <property> <name>dfs.namenode.secondary.http-address.ns1</name> <value>snn-host1:http-port</value> </property> <property> <name>dfs.namenode.rpc-address.ns2</name> <value>nn-host2:rpc-port</value> </property> <property> <name>dfs.namenode.http-address.ns2</name> <value>nn-host2:http-port</value> </property> <property> <name>dfs.namenode.secondaryhttp-address.ns2</name> <value>snn-host2:http-port</value> </property> .... Other common configuration ... </configuration>
step 1:使用下面的命令格式化一个NameNode:
> $HADOOP_PREFIX_HOME/bin/hdfs namenode -format [-clusterId <cluster_id>]
step 2:使用如下的命令格式化其他的NameNode:
> $HADOOP_PREFIX_HOME/bin/hdfs namenode -format -clusterId <cluster_id>
老版本支持单NameNode,下面步骤可以升级到联合HDFS:
step1:升级集群到新的版本,在升级的时候,可以提供一个ClusterID:
> $HADOOP_PREFIX_HOME/bin/hdfs start namenode --config $HADOOP_CONF_DIR -upgrade -clusterID <cluster_ID>
步骤如下:
- 增加配置参数dfs.nameservices到配在文件
- 升级配置NameServiceID后缀。配置键值名在0.20版本后已经改变。对于联盟HDFS,需要使用新的配置参数名
- 增加新的NameNode相关的配置到配置文件
- 发送配置文件到所有的集群结点
- 启动新的NameNode,二级/备份NameNode
- 通过以下命令刷新的DataNodes以包括新的增加的NameNode
> $HADOOP_PREFIX_HOME/bin/hdfs dfadmin -refreshNameNode <datanode_host_name>:<datanode_rpc_port>上面的命令必须在所有的集群中的datanodes中运行一遍管理集群
开启集群命令:
> $HADOOP_PREFIX_HOME/bin/start-dfs.sh关闭集群命令:
> $HADOOP_PREFIX_HOME/bin/stop-dfs.sh
这些命令可以在任何HDFS配置可以的结点执行。命令使用配置决定集群中的NameNodes,开启这些结点中的NameNode进程。结点中启动的DataNodes是在slave文件中指定的。上面的脚本可以在创建自己的启动和停止集群的脚本时作为参考。
为了平衡集群 ,平衡器已经改变去协调多个NameNodes(Balancer has been changed to work with multiple Namenodes in the cluster to balance the cluster)。平衡器可以通过下面命令执行:
“$HADOOP_PREFIX”/bin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script "$bin"/hdfs start balancer [-policy <policy>]
- node--这是默认的策略(policy)。这样可以在DataNode级平衡存储。这个和之前版本的平衡策略相似
- blockpool--这样可以在块池级别平衡存储。在块池级别平衡存储,也同时在DataNode级别
注意:这个平衡仅仅平衡数据,不会平衡namespace。
Decommissioning(?排除,撤销)
这个规则和之前版本类似,需要撤销的结点增加到所有NameNode的排除文件中。每个NameNode排除各种的块池。当所有的NameNode完成排除一个DataNode,这个DataNode才被认为被排除。
step1:分派一个排除文件到所有的NameNodes:
"$HADOOP_PREFIX"/bin/distributed-exclude.sh <exclude_file>
step2:刷新所有的NameNodes:
"$HADOOP_PREFIX"/bin/refresh-namenodes.sh
上面的命令使用HDFS配置去决定配置在集群的NameNodes,并且刷新所有的NameNode去使用新的排除文件。
集群web控制台
和NameNode状态web页相似,一个集群web控制台增加去监控联盟集群: http://<any_nn_host:port>/dfsclusterhealth.jsp,任何集群中的NameNode都可以访问。
【hadoop 2学习】联合的HDFS,布布扣,bubuko.com
原文:http://blog.csdn.net/richerg85/article/details/23536953