使用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