共计 3712 个字符,预计需要花费 10 分钟才能阅读完成。
上一篇文章《Hadoop2.0 federation 介绍》(见 http://www.linuxidc.com/Linux/2014-05/101179.htm)介绍了 hadoop2.0 federation 的基本架构和基本原理,本文接着先介绍单独配置 federation,在下一篇文章中会继续介绍同时配置 HA 和 federation。
1 准备
文中描述的机器角色包含 2 个 namenode:
namenode1
namenode2
其他机器角色本文中不涉及的可以参考《Hadoop2.0 的安装和基本配置》一文 http://www.linuxidc.com/Linux/2014-05/101173.htm。
2 federation 的结构
我们假定 hadoop 集群的 clusterid 是 hellokitty,有 2 个 namespace/name service,分别是“mycluster”和“yourcluster”,分别在 namenode1 和 namenode2 上,分别挂载在 viewfs 的“/my”和“/your”目录下。如下图所示:
3 federation 的配置
federation 的配置只涉及到 core-site.xml 和 hdfs-site.xml 两个配置文件,其他配置可以文件参考《hadoop2.0 的安装和基本配置》一文。
3.1 core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>viewfs:///</value>
</property>
<property>
<name>fs.viewfs.mounttable.default.link./my</name>
<value>hdfs://namenode1/</value>
</property>
<property>
<name>fs.viewfs.mounttable.default.link./your</name>
<value>hdfs://namenode2/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/tmp/hadoop2.0</value>
</property>
</configuration>
fs.defaultFS
这里是配置 viewfs,为各个 namespace 提供一个统一的视图(viewfs)
fs.viewfs.mounttable.default.link./my
把 namespace(name service)“mycluster”挂载到“/my”目录下
fs.viewfs.mounttable.default.link./your
把 namespace(name service)“yourcluster”挂载到“/your”目录下
说明:以上 3 项的配置值是为了方便统一查看各个 namespace/name service 的目录和文件,不是必须的,可以不用配置。
3.2 hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/dfs/data</value>
</property>
<property>
<name>dfs.datanode.edit.dir</name>
<value>/home/dfs/edit</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>mycluster,yourcluster</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster</name>
<value>namenode1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.yourcluster</name>
<value>namenode2:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster</name>
<value>namenode1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.yourcluster</name>
<value>namenode2:50070</value>
</property>
</configuration>
4 启动
在 namenode1 上执行格式化
$HADOOP_HOME/bin/hdfs namenode -format –clusterId hellokitty
在 namenode2 上执行格式化
$HADOOP_HOME/bin/hdfs namenode -format –clusterId hellokitty
注意:namenode1 和 namenode2 上的 clusterid 要保持一致。
在 namenode1 启动 namenode
$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
在 namenode2 启动 namenode
$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
然后启动各个 datanode
$HADOOP_HOME/sbin/hadoop-daemon.sh start datanode
5 检查
每个 datanode 都会连接到 namenode1 和 namenode2,在 namenode1 和 namenode2 的 HDFS 监控页面都能看到所有的 datanode
http://namenode1:50070/dfshealth.jsp
http://namenode2:50070/dfshealth.jsp
6 测试
因为配置了 viewfs 和挂载目录(注意在 hadoop 客户机上也需要同样的配置),你可以运行
$HADOOP_HOME/bin/hdfs dfs -ls /
你可以看到 namespace(name service)“mycluster”和“yourcluster”对应的目录“/my”和“/your”。
你也可以不通过 viewfs 直接查看每个 namenode/namespace 的目录和文件
$HADOOP_HOME/bin/hdfs dfs -ls hdfs://namenode1/
$HADOOP_HOME/bin/hdfs dfs -ls hdfs://namenode2/
上面两个命令分别等价于以下两个命令:
$HADOOP_HOME/bin/hdfs dfs -ls /my
$HADOOP_HOME/bin/hdfs dfs -ls /your
7 实战 tips
federation 虽然有多个 namenode,但还是存在单点的问题,需要把每个 federation 的每个 namenode 配置成 HA。
在下一篇文章中,我们会继续介绍在 federation 的基础上配置 HA。(见 http://www.linuxidc.com/Linux/2014-05/101181.htm)
参考资料:
http://hadoop.apache.org/docs/r2.2.0/hadoop-project-dist/hadoop-hdfs/Federation.html
更多 Hadoop 相关信息见 Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13