首先做一下简要说明, 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
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$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 连接自己
apt-get update
apt-get install openssh-server
cd /root/.ssh
cp id_rsa.pub authorized_keys
ssh hadoop-namenode
在 datanode 节点做一下同样的操作,然后把 id_rsa.pub 拷到 datanode 的 /root/.ssh 下面,好多资料上都是这样写的, scp id_rsa.pub hadoop-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 安装根路径,如下:
export JAVA_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>A base 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 conf hadoop-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