在Ubuntu10.04上分布式部署Hadoop0.20.2
首先做一下简要说明,Ubuntu是装在虚拟机上的,虚拟机既存在不同的主机上,寄存主机在同一个内网里,这里有一个注意点,Network的连接方式要用桥接(Bridged),这样能使VM的IP和Host在同一个网段,能保证VM之间能够互相ping的通。
分布式结构如下,一个namenode和一个datanode:
172.28.0.73 hadoop-namenode
172.28.0.77 hadoop-datanode1
下面进入正文,安装配置:
一、hostname的配置操作
1、修改hosts文件,如下:
sudo su root
gedit /etc/hosts 修改内容如下:
172.28.0.73 hadoop-namenode
172.28.0.77 hadoop-datanode1
2、修改hostname,namenode上修改为hadoop-namenode,datanode修改为hadoop-datanode1,我这里只演示namenode上的操作,以下同上,有特别的地方我会说明的。
hostname hadoop-namenode
这样不能彻底修改hostname(主机名),重启后还会还原到默认的Ubuntu,要彻底修改要修改/etc/hostname,namenode和datanode各自修改为自己的hostname
gedit /etc/hostname hadoop-namenode
把原来的Ubuntu删掉,不要用#注释,直接删掉,因为#没用,修改内容:
hadoop-namenode
退出shell客户端,重新进入,并且换成root操作
exit
sudo su root
3、这些工作都做好了,ping一下看看能不能ping通,用节点名称ping
ping hadoop-datanode1
二、安装jdk用的是截至2011/1/6最新的版本 jdk-6u23-linux-i586.bin
1、把jdk安装文件拷贝到/usr/lib目录下,然后安装
cp jdk-6u23-linux-i586.bin /usr/lib
cd /usr/lib
chmod u+x chmod
./jdk-6u23-linux-i586.bin
2、安装已完成修改环境变量并且把java安装到系统
配置环境变量,编写一个java.sh放到/etc/profile.d下面,内容如下:
#set jdk environment
export JAVA_HOME=/usr/lib/jdk1.6.0_23
export JRE_HOME=/usr/lib/jdk1.6.0_23/jre
exportCLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
exportPATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
提升java.sh的权限:
chmod 775 /etc/profile.d/java.sh
把Java安装到系统:
ln –s /usr/lib/jdk1.6.0_23/bin/java /usr/bin/java
查看Java版本确定已经安装到系统:
java –version
如果看到版本说明安装成功
三、SSH无密码验证配置
ssh-keygen –t rsa
会在/root下生成一个.ssh目录,.ssh目录下会生成一个id_rsa的私钥和id_rsa.pub的公钥,把公钥拷贝成authorized_keys,这样可以通过ssh连接自己
cd /root/.ssh
cp id_rsa.pub authorized_keys
ssh hadoop-namenode
在datanode节点做一下同样的操作,然后把id_rsa.pub拷到datanode的/root/.ssh下面,好多资料上都是这样写的,scp id_rsa.pubhadoop-datanode:/root/.ssh 172.28.0.73,一开始我也这样做的但是考不过去,后来我直接用U盘拷到datanode节点上然后拷贝到/root/.ssh下面,在追加到datanode的authorized_keys上面
cp id_rsa.pub /root/.ssh 172.28.0.73
cat 172.28.0.73 >> authorized_keys
此时,我们的namenode可以无密码访问datanode了,回到hadoop-namenode上
ssh hadoop-datanode1
现在可以连接了,至于想让datanode访问namenode原理是一样的,但我觉得没有这个必要。
四、关闭防火墙
ufw disable
五、安装Hadoop
1、在/opt目录下建立hadoop目录,把hadoop-0.20.2.tar.gz拷贝到/opt/hadoop目录下,然后解压:
mkdir /opt/hadoop
cp hadoop-0.20.2.tar.gz /opt/hadoop
cd /opt/hadoop
tar –zxvf hadoop-0.20.2.tar.gz
cd hadoop-0.20.2
2、配置Hadoop
1、编辑conf/hadoop-env.sh文件,把JAVA_HOME设置成Java安装根路径,如下:
exportJAVA_HOME=/usr/lib/jdk1.6.0_23
记住把export前面的#去掉
2、配置core-site.xml
gedit /conf/core-site.xml
修改内容如下:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/tmp</value>
(注意,请先在hadoop目录下建立tmp文件夹)
<description>Abase for other temporary directories.</description>
</property>
<!--file system properties -->
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop-namenode:9000</value>
</property>
</configuration>
3、配置hdfs-site.xml
gedit conf/hdfs-site.xml
内容如下:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
(replication是数据副本数量,默认为3,datanode少于3台就会报错)
</property>
<property>
<name>dfs.name.dir</name>
<value>/opt/hadoop/hdfs/name</name>
</property>
<property>
<name>dfs.data.dir</name>
<value>/opt/hadoop/hdfs/data</name>
</property>
(以上两项很多教程上是没有的,但是我试过没有会出错,应该是namenode和datanode的filesystem的问题,另外/opt/hadoop/hdfs要自己建)
</configuration>
4、配置mapred-site.xml
gedit conf/mapred-site.xml
内容如下:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hadoop-namenode:9001</value>
</property>
</configuration>
5、配置masters和slaves来设置主从节点,注意最好使用主机名,并且保证VM之间可以通过主机名可以互相访问,每个主机名一行
masters:
hadoop-namenode
salves:
hadoop-datanode1
因为之前配置了SSH无密码验证,所以现在可以使用scp命令把hadoop的配置直接拷到datanode上,也可以不用在datanode上安装hadoop,把整个的拷过去,但是太大,传输不方便,建议在datanode端装好了,拷贝配置就可以了,原则上masters配置只要在namenode端,而slaves在datanode端,不过都配也无所谓。命令如下:
scp confhadoop-datanode1:/opt/hadoop/hadoop-0.20.2
到这里hadoop的分布式安装就完成了,现在我们就来初始配置:
1、格式化hadoop
./bin/hadoop namenode -format
2、启动hadoop
./bin/start-all.sh
通过日志可以看出,首先启动namenode,然后启动datanode
3、在namenode上查看集群状态:
./bin/hadoop –dfsadmin –report
Web查看方式:http://hadoop-namenode:50070
修改环境变量
[plain] view plaincopyprint?
1. vim ~/.bashrc
vim~/.bashrc
添加:
[plain] view plaincopyprint?
1. export PATH=/home/sunlylorn/hadoop/bin:$PATH
exportPATH=/home/sunlylorn/hadoop/bin:$PATH
保存退出,输入以下命令使之立即生效。
[plain] view plaincopyprint?
1. source ~/.bashrc
测试 hadoop version