倒腾了一天,终于在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