倒騰了一天,終于在CentOS上裝上了hadoop-0.21.0,特此記錄,以備后用。
操作系統:CentOS 5.5
Hadoop:hadoop-0.21.0
JDK:1.6.0_17
namenode主機名:master,namenode的IP:192.168.90.91
datanode主機名:slave,datanode的IP:192.168.90.94
第一步:安裝并啟動ssh服務
CentOS 5.5安裝完畢之后以及默認啟動了sshd服務,可以在“系統”->“管理”->“服務”中查看sshd服務是否啟動。當然了,如果機器上沒有安裝ssh服務,則執行命令sudo yum install ssh來安裝。安裝rsync,它是一個遠程數據同步工具,可通過 LAN/WAN 快速同步多臺主機間的文件,執行命令sudo yum install rsync。修改每個節點的/etc/hosts文件,將 namenode和datanode的IP信息加入到該文件的尾部:
192.168.90.91 master
192.168.90.94 slave
第二步,配置SSH服務
(1),(2)是針對每一臺機器
(1)創建hadoop用戶名與用戶組
運行命令su - root,注意,不是命令su root,后者不能攜帶root用戶的參數信息,是不能執行創建用戶組和用戶命令的。執行命令:groupadd hadoop和命令useradd -g hadoop hadoop。注意不能在/home目錄下創建hadoop目錄,否則創建hadoop用戶會失敗。創建好用戶以后最好是重新啟動計算機,以hadoop用戶登錄系統。這樣在之后的操作中就不需要su到hadoop用戶下,而且也不會糾纏于文件的owner問題。
(2)生成ssh密鑰
如果是其他用戶登錄的則切換到hadoop用戶下,執行命令su - hadoop,在/home/hadoop目錄下執行命令:ssh-keygen -t rsa(一路回車,選擇默認的保存路徑),密鑰生成成功之后,進入.ssh目錄,執行cd .ssh,執行命令:cp id_rsa.pub authorized_keys。這個時候運行ssh localhost,讓系統記住用戶,之后ssh localhost就不需要再輸入密碼了。
(3)交換公鑰
將namenode上的公鑰拷貝到datanode,在hadoop用戶的用戶目錄下(/home/hadoop)下執行命令ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@slave。同理,也可以將datanode上的公鑰拷貝到namenode,但這不是必須的。這樣兩臺機器在hadoop用戶下互相ssh就不需要密碼了。
第三步,安裝JDK1.6或以上(每臺機器)
(1)執行命令yum install jdk
(2)如果第一步沒有找到源碼包,那么就需要到官網上下載了,https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jdk-6u22-oth-JPR@CDS-CDS_Developer。
(3)新建目錄/usr/java,將源碼包jdk-6u22-linux-i586.bin復制到該目錄下,執行命令chmod a+x jdk-6u22-linux-i586.bin
使當前用戶擁有對jdk-6u22-linux-i586.bin的執行權限。執行命令sudo ./jdk-6u22-linux-i586.bin進行安裝
(4)修改/etc/profile來添加環境變量,/etc/profile中設置的環境變量就像Windows下環境變量中的系統變量一樣,所有用戶都可以使用。
用文本編輯器打開/etc/profile
# vi /etc/profile
在最后加入以下幾行:
export JAVA_HOME=/usr/java/jdk1.6.0_22
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
這樣我們就設置好了JDK,在centos下 source /etc/profile 就可以生效了.
運行命令java -version可以判斷是否安裝成功
第四步,安裝hadoop
原來現在才開始安裝hadoop,準備工作也作得太多了,廢話少說。
(1)新建目錄/usr/local/hadoop,將hadoop-0.21.0.tar.gz解壓縮到該目錄下,執行命令sudo tar -xvzf hadoop-0.21.0.tar.gz,修改/etc/profile文件,將hadoop的安裝目錄append到文件最后:
export HADOOP_HOME=/usr/local/hadoop/hadoop-0.21.0
export PATH=$HADOOP_HOME/bin:$PATH
(2)配置/conf/hadoop-env.sh文件,修改java_home環境變量
export JAVA_HOME=/usr/java/jdk1.6.0_22/
export HADOOP_CLASSPATH=.
(3)配置 core-site.xml 文件
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/hadoop-0.21.0/tmp</value>
(注意,請先在 hadoopinstall 目錄下建立 tmp 文件夾)
<description>A base for other temporary directories.</description>
</property>
<!-- file system properties -->
<property>
<name>fs.default.name</name>
<value>hdfs://master:54310</value>
</property>
</configuration>
(4)配置 hdfs-site.xml 文件
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>(這里共兩臺機器,如果將主節點也配置為datanode,則這里可以寫2)
</property>
<configuration>
(5)配置 mapred-site.xml 文件
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:54311</value>
</property>
</configuration>
(6)配置 conf/masters 文件,加入 namenode 的 ip 地址
master
(7)配置 slaves 文件, 加入所有 datanode 的 ip 地址
slave
(如果之前的hdfs-site.xml文件中的拷貝數設置為2,則需要將master也加入到slaves文件中)
(8)將 namenode 上 配 置 好 的 hadoop 所 在 文 件 夾 hadoop-0.21.0 復 制 到
datanode 的/usr/lcoal/hadoop/目錄下(實際上 masters,slavers 文件時不必要的, 復制了也
沒問題)。
(9)配置datanode的/etc/profile 文件,在文件尾append下列內容:
export HADOOP_HOME=/usr/local/hadoop/hadoop-0.21.0
export PATH=$HADOOP_HOME/bin:$PATH
第五步,啟動hadoop
首先記得關閉系統的防火墻,root用戶下執行命令/etc/init.d/iptables stop,運行命令/etc/init.d/iptables status檢查防火墻狀態。hadoop用戶下,在namenode的/usr/local/hadoop/hadoop-0.21.0/bin目錄下打開終端,執行命令hadoop namenode -format,格式化目錄節點。注意,/usr/local/hadoop/hadoop-0.21.0/tmp目錄是可以寫的,否則在格式化時會出現異常。執行命令start-all.sh啟動hadoop集群,執行命令jps查看進程,執行命令hadoop dfsadmin -report查看狀態。在瀏覽器中輸入http://master:50070以web方式查看集群狀態。查看jobtraker的運行狀態:http://www.ibm.com/developerworks/cn/linux/l-hadoop-2/index.html
PS:格式化namenode的時候最好將節點的tmp目錄清空、刪除logs目錄中的文件。
到這里,基于CentOS5.5的hadoop集群搭建完畢!
參考資料:http://www.ibm.com/developerworks/cn/linux/l-hadoop-2/index.html