使用hadoop-0.23 搭建hdfs, namenode + datanode
1. HDFS-1052引入了多namenode, HDFS架构变化较大, 可以参考hortonworks的文章: http://hortonworks.com/an-introduction-to-hdfs-federation/.
我将在接下来的博客里把此文章翻译一下(另外还有: http://developer.yahoo.com/blogs/hadoop/posts/2011/03/mapreduce-nextgen-scheduler/).
所有namenode共享datanode, 各个namenode相互独立, 互不影响, 每个namenode都有一个backupNode和SecondaryNamenode,提供主备切换功能和备份元数据的功能.
下文的配置信息主要参考HDFS-2471.
2. 环境:
a) 五台机器 ,linux系统,
b) 互相添加ssh-key,后应该可以不用密码互连
c) 编译好的0.23版本的包: hadoop-0.23.0-SNAPSHOT.tar.gz
d) 每台机器需要安装java1.6或以上版本.并把JAVA_HOME加到$PATH中.
e) 最好加上pssh和pscp工具.
这里把五台机器命名为:
Myhost1
Myhost2
Myhost3
Myhost4
Myhost5
假设我们需要搭建如下集群:
Myhost1和Myhost2开启 namenode, 另外三台机器启动datanode服务.
3. 首先把分配到五台机器上,然后解压.(推荐使用pscp, pssh命令)
4. 然后在五台机器上安装java,并把JAVA_HOME加到$PATH中
5. 进入解压后的hadoop目录, 编辑 etc/hadoop/hdfs-site.xml
a) Myhost1的配置如下(其中hadoop存放在/home/yuling.sh/目录下):
<property>
<name>fs.defaultFS</name>
<value>hdfs:// Myhost1:9000</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/yuling.sh/cluster-data</value>
</property>
b) Myhost2的配置如下(其中hadoop存放在/home/yuling.sh/目录下):
<property>
<name>fs.defaultFS</name>
<value>hdfs:// Myhost2:9000</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/yuling.sh/cluster-data</value>
</property>
c) 这里把Myhost1集群起名ns1, Myhost1集群起名ns2, 三台slava的etc/hadoop/hdfs-site.xml配置如下:
<property>
<name>dfs.federation.nameservices</name>
<value>ns1,ns2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns1</name>
<value>hdfs:// Myhost1:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.ns1</name>
<value> Myhost1:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns2</name>
<value>hdfs:// Myhost2:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.ns1</name>
<value> Myhost2:50070</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/yuling.sh/datanode</value>
</property>
d) 解释:namenode需要指定两个参数, 用于存放元数据和文件系统的URL. Datanode需指定要连接的namenode 的rpc-address和http-address. 以及数据存放位置dfs.datanode.data.dir.
6. 然后编辑两台namenode的hadoop目录下 etc/hadoop/slaves文件. 加入三台slave机器名:
Myhost3
Myhost4
Myhost5
7. 现在需要格式化namenode, 由于namenode共享datanode, 因此它们的clusterid需要有相同的名字.这里我们把名字设为 yuling .命令如下:
bin/hdfs namenode –format –clusterid yuling
两台机器格式话之后会在/home/yuling.sh/cluster-data下生成元数据目录.
8. 启动Myhost1和Myhost2上的namenode和slave上datanode服务. 命令如下:
sbin/start-hdfs.sh
分别在Myhost1和Myhost2下运行.
9. 启动之后打开浏览器, 分别查看两namenode启动后状态. URL为:
Myhost1:50070和Myhost2:50070
10. 这期间可能会遇到许多问题, 但是可以根据抛出的异常自己解决, 我这里就不多说了.
下一篇博客将讲述如何启动backupNode和SecondaryNamenode