共计 2600 个字符,预计需要花费 7 分钟才能阅读完成。
最早接触 Federation 这个词还是第一家公司用的 DB2 联邦数据库。
第一代 Hadoop HDFS:
结构上由一个 namenode 和众多 datanode 组成。
功能上划分为 namespace 和 block storage service 两部分。
所谓的 HDFS Federation 就是有多个 namenode(或者说 namespace)。
如图:
这里有 block pool 的概念,每一个 namespace 都有一个 pool,datanodes 会存储集群中所有的 pool,block pool 之间的管理是独立的,一个 namespace 生成一个 block id 时不需要跟其它 namespace 协调,一个 namenode 的失败也不会影响到 datanode 对其它 namenodes 的服务。
一个 namespace 和它的 blockpool 作为一个管理单元,删除后,对应于 datanodes 中的 pool 也会被删除。集群升级时,这个管理单元也独立升级。
这里引入 clusterID 来标示集群所有节点。当一个 namenode format 之后,这个 id 生成,集群中其它 namenode 的 format 也用这个 id。
多 namenode 的好处:
1、namespace 可扩展性。原来只有 hdfs 存储可以水平扩展,现在 namenode 也可以做到了,减轻单 namenode 的内存和服务压力。
2、性能方面。多个 namenode 可以提高读写时的吞吐量。
3、隔离性。隔离不同类型的程序,一定程度上控制资源的分配。
联邦的配置:
联邦的配置是向后兼容的,允许在不改变任何配置的情况下让当前运行的单节点环境转换成联邦环境。新的配置方案确保了在集群环境中的所有节点的配置文件都是相同的。
这里引入了 NameServiceID 概念,作为 namenodes 们的后缀。
第一步:配置属性 dfs.nameservices,用于 datanodes 们识别 namenodes。
第二步:
为每个 namenode 加入这个后缀。
例子:
<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.secondaryhttp-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>
管理集群:
启动和停止用 start-dfs.sh 和 stop-dfs.sh
跟第一代 hadoop 不同的是:这里允许集群中任何一台有效节点运行这两个命令,根据配置启动 namenode 和 datanode,而第一代 hadoop 则是以运行启动脚本的节点为单一 namenode。
均衡器:
由于多 namenode 了,均衡器也做了改变,运行命令:
"$HADOOP_PREFIX"/bin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script "$bin"/hdfs start balancer [-policy <policy>]
策略可以是 node,之前也有的,增加了 block pool,既在 datanode 级别又在 block pool 级别均衡。
下线节点:
跟之前版本的类似,把需要下线的节点添加到每台 namenode 的 exclude 文件中。
第一步:
"$HADOOP_PREFIX"/bin/distributed-exclude.sh <exclude_file>
第二步:
"$HADOOP_PREFIX"/bin/refresh-namenodes.sh
集群控制台:
http://<any_nn_host:port>/dfsclusterhealth.jsp
相关阅读 :
Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm
Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm
Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm
Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm
单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm
搭建 Hadoop 环境(在 Winodws 环境下用虚拟机虚拟两个 Ubuntu 系统进行搭建)http://www.linuxidc.com/Linux/2011-12/48894.htm
更多 Hadoop 相关信息见 Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13