本文是在centos6上安装hadoop成功后,写的一个安装手册,适用于有linux基本操作知识的人群。
1准备工作
本文使用的系统是CentOS-6.2-i386-minimal版;准备三台虚拟机,一台为hadoop-namenode,另外两台作为hadoopdatanode01,hadoopdatanode02;
下载:jdk-6u35-linux-i586-rpm.bin 36443.html
http://www.oracle.com/technetwork/java/javase/downloads/jdk6u35-downloads-18
hadoop-1.0.3.tar.gz
http://www.apache.org/dyn/closer.cgi/hadoop/common/
本文安装中不做特殊说明的均为hadoop-namenode机器。
1.1配置网络
登录linux系统修改网络配置:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
A、动态IP配置(建议使用静态ip为好)
修改为:ONBOOT=yes
添加 : BOOTPROTO=dhcp
B、静态IP配置(红色字体为必须配置项,其他可省略)
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet #网卡类型
HWADDR=00:0C:29:13:5D:74 #网卡设备MAC地址
DEVICE=eth0 #网卡接口名称
ONBOOT=yes #系统启动时是否自动加载
BOOTPROTO=static #启用地址协议 --static:静态协议 --bootp协议--dhcp协议
IPADDR=192.168.1.11 #网卡IP地址
NETMASK=255.255.255.0 #网卡网络地址
GATEWAY=192.168.1.1 #网卡网关地址
DNS1=10.203.104.41 #网卡DNS地址
BROADCAST=192.168.1.255 #网卡广播地址
1.2设置域内安装代理(仅安装hadoop此步可以跳过)
因为CentOS-6.2-i386-minimal版是精简版,很多需要的工具和软件没有安装,根据需要安装;因此需要借助internet。如果仅是安装hadoop不做其他应用可以省略本节,配置一下以后有安装工具需求会很方便。
#vi /etc/yum.conf
添加如下内容到yum.conf中,其中proxy_username为您的域账号名,proxy_password为密码(是明码)
配置完成。
现在安装一个下载工具wget测试一下:
# yum install wget
1.3配置ssh实现无密码访问(即公私钥访问)
该部分网络上和书籍中都有介绍,但是照做发现基本不成功(Centos),本文做了一下整理。
1.3.1添加hadoop用户
# groupadd hadoop 创建hadoop用户组
# useradd -g hadoop hadoop 添加用户hadoop到组
# passwd hadoop 设置用户hadoop权限
Changing password for user hadoop.
New password: 输入密码
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password: 再次输入密码
passwd: all authentication tokens updated successfully. 成功了
2认证登录配置
2.1修改配置文件
2.1.1修改ssh配置
$ vi /etc/ssh/sshd_config
找到以下内容,并去掉注释符”#
ServerKeyBits 1024
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
修改后保存;然后重新启动ssh服务
[root@ namenode ~]# service sshd restart
2.1.2修改hosts配置文件
hadoop-namenode上的hosts修改如下:
#vi /etc/hosts
添加
192.168.1.110 hadoop-namenode
192.168.1.111 hadoopdatanode01
192.168.1.112 hadoopdatanode02
注:# vi /etc/sysconfig/network 中的HOSTNAME= hadoop-namenode
hadoop-hadoopdatanode01上的hosts修改如下:
#vi /etc/hosts
添加
192.168.1.111 hadoopdatanode01
192.168.1.110 hadoop-namenode
注:# vi /etc/sysconfig/network 中的HOSTNAME= hadoopdatanode01
hadoop-hadoopdatanode02上的hosts修改如下:
#vi /etc/hosts
添加
192.168.1.112 hadoopdatanode02
192.168.1.110 hadoop-namenode
注:# vi /etc/sysconfig/network 中的HOSTNAME= hadoopdatanode02
2.2生成证书公私钥:
切换到hadoop用户
[root@ hadoop-namenode ~]# su – hadoop
# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
#cat ~/.ssh/id_dsa.pub>> ~/.ssh/authorized_keys
修改权限:
chmod 600 ~/.ssh/authorized_keys
测试登陆如下: $ ssh localhost
Last login: Wed Jul 13 14:04:06 2011 from hadoopdatanode01
如果让你输入密码说明配置失败。
2.3 认证登陆远程服务器
首先,在hadoopdatanode01,hadoopdatanode02上按照 “1.3.1添加hadoop用户“节添加组和用户;
其次,按照“1.3.2修改配置文件“章节修改hadoopdatanode01,hadoopdatanode02上的配置文件。
最后,创建.ssh文件夹。
创建文件夹:
# su – hadoop 切换到hadoop用户
#mkdir .ssh 创建.ssh文件夹
然后将1.3.3节成的authorized_keys拷贝到hadoopdatanode01,hadoopdatanode02上刚刚创建的.ssh文件夹。
#scp /home/hadoop/.ssh/authorized_keys hadoop@hadoopdatanode01:/home/hadoop/.ssh/authorized_key
需要你输入hadoopdatanode01上hadoop用户的密码。
拷贝到hadoopdatanode02上同上。
3安装hadoop
3.1安装jdk
本文安装的是jdk-6u35-linux-i586-rpm.bin
拷贝jdk-6u35-linux-i586-rpm.bin到linux机器的 /opt目录下
在root账户下/op0074目录下安装
#chmod +x jdk-6u35-linux-i586-rpm.bin
#./jdk-6u35-linux-i586-rpm.bin
#rpm –ivh jdk-6u35-linux-i586.rpm
安装完毕
3.2在hadoop-namenode上安装hadoop
本文使用的是hadoop-1.0.3版本,将hadoop-1.0.3.tar.gz拷贝到/home/hadoop目录下。
#chown hadoop:hadoop hadoop-1.0.3.tar.gz 修改文件拥有者
#su – hadoop 切换用户
# tar –zxvf hadoop-1.0.3.tar.gz 解压
3.3修改配置文件
3.31 修改机器环境
# su - root
# vi /etc/profile
在文件尾部添加:
export JAVA_HOME=/usr/java/jdk1.6.0_35
export JRE_HOME=/usr/java/jdk1.6.0_35/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_HOME=/home/hadoop/hadoop-1.0.3
export PATH=$HADOOP_HOME/bin:$PATH
3.3.2 修改hadoop配置文件
红色部分根据自己的机器名修改。
#su – hadoop 切换hadoop目录
#mkdir tmp 创建tmp目录,以后的文件系统目录
# cd hadoop/hadoop-1.0.3/conf 进入配置文件目录
3.3.2.1编辑环境配置文件
#vi hadoop-env.sh
在尾部添加
export JAVA_HOME=/usr/java/jdk1.6.0_35
3.3.2.2编辑core-site.xml
# vi core-site.xml
3.3.3.3编辑 mapred-site.xml
# vi mapred-site.xml
3.3.3.4编辑 hdfs-site.xml
# vi hdfs-site.xml
3.3.3.5 编辑masters
#vi master
加入:
hadoop-namenode
3.3.3.6 编辑slaves
#vi slaves
加入:
hadoopdatanode01
hadoopdatanode02
3.4 配置hadoopdatanode01、hadoopdatanode02
将/home/hadoop/hadoop-1.0.3复制到hadoopdatanode01和hadoopdatanode02的/home/hadoop目录下。
#scp –rv /home/hadoop/hadoop-1.0.3 hadoop@ hadoopdatanode01:/home/hadoop/
#scp –rv /home/hadoop/hadoop-1.0.3 hadoop@ hadoopdatanode02:/home/hadoop/
4 关闭防火墙
三台机器都需要关闭防火墙,如果知道端口,打开端口也可以,本文是直接关闭防火墙,需在root用户下操作
#service iptables stop
5运行hadoop
5.1格式化HDFS文件系统
# su – hadoop
$ cd hadoop-1.0.3
$ bin/hadoop namenode -format
5.2启动hadoop
$bin/start-all.sh
检查启动是否成功:
$jps
检查是否初始化成功
$ bin/hadoop fs -ls /
安装成功。
6验证
6.1 文件测试
$bin/hadoop fs –mkdir input 创建目录 input
$bin/hadoop fs –lsr
###把本地hadoop-core-1.0.3.jar上传到input中
#bin/hadoop fs -put hadoop-core-1.0.3.jar input
#bin/hadoop fs -lsr ###查看本件系统所有文件
存在文件并且大小不为0则hadoop文件系统搭建成功。
6.2 Web查看
Ie中输入http://192.168.1.110:50070/dfshealth.jsp
7安装遇见问题
7.1 safemode
bin/hadoop fs -put ./input input
put: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create directory /user/root/input. Name node is in safe mode.
解决方法:
NameNode在启动的时候首先进入安全模式,如果datanode丢失的block达到一定的比例(1-dfs.safemode.threshold.pct),则系统会一直处于安全模式状态即只读状态。
dfs.safemode.threshold.pct(缺省值0.999f)表示HDFS启动的时候,如果DataNode上报的block个数达到了元数据记录的block个数的0.999倍才可以离开安全模式,否则一直是这种只读模式。如果设为1则HDFS永远是处于SafeMode。
下面这行摘录自NameNode启动时的日志(block上报比例1达到了阀值0.9990)
The ratio of reported blocks 1.0000 has reached the threshold 0.9990. Safe mode will be turned off automatically in 18 seconds.
hadoop dfsadmin -safemode leave
有两个方法离开这种安全模式
(1)修改dfs.safemode.threshold.pct为一个比较小的值,缺省是0.999。
(2)hadoop dfsadmin -safemode leave命令强制离开
用户可以通过dfsadmin -safemode value 来操作安全模式,参数value的说明如下:
enter - 进入安全模式
leave - 强制NameNode离开安全模式
get - 返回安全模式是否开启的信息
wait - 等待,一直到安全模式结束。
7.2could only be replicated to 0 nodes, instead of 1
#执行 fs -put时,出现如下问题
hdfs.DFSClient: DataStreamer Exception: org.apache.hadoop
.ipc.RemoteException: java.io.IOException: ... could only be replicated to 0 nodes, instead of 1 ...
解决方法:
(1)防火墙原因
(2)磁盘空间原因
df –ah #查看磁盘空间
如果是磁盘空间不够,则调整磁盘空间(我就是该原因,折腾了很久) 。
3、DataNode error
代码
2010-06-25 11:40:12,473 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode:
java.io.IOException: Incompatible namespaceIDs in /tmp/hadoop-root/dfs/data:
namenode namespaceID = 647870650; datanode namespaceID = 466015089
解决方法:
删除 /tmp/hadoop-root/dfs目录下的所有目录,
执行hadoop namenode -format