一、硬件环境
机器,通过hostname进行设置:
master(192.168.1.102)
slave1(192.168.1.101)
该环境目前只有2个节点,有资源的话可以增加slave2、slave3…
虚拟机上安装linux的话,用使用桥接的方式,在虚拟机系统名称上点右键——设置:
如果桥接不行可以选NAT
给每个linux设置固定的ip,因为不设置的话虚拟机每次启动的时候会重新分配ip.
二、相关软件
hadoop-0.20.2
jdk-6u30-linux-i586.bin
三、JDK1.6安装和配置
(1)在每台机器上运行二进制文件:./jdk-6u18-linux-x64-rpm.bin 或
(2)编辑每台机器的/etc/profile,增加如下内容
export JAVA_HOME=/usr/jdk1.6.0_21
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=
$PATH:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
注:环境变量视具体安装情况而定,下同
四、安装Hadoop 及配置
(1)以root登录,在master和 slave1上分别修改/etc/hosts,添加如下内容:
192.168. 1.102 master
192.168.1.101 slave1
(2)用root登陆,建立hadoop用户
useradd hadoop
passwd hadoop
输入容易记忆的密码:如hadoop
(3)进入hadoop目录,使用如下命令:(注意权限问题)
注意:如果是master和salve的IP有变化的话,需要重新执行此步。
(出现问题可使用root账户查看/var/log/secure日志文件)
su - hadoop #进入hadoop用户目录
ssh-keygen -t rsa #建立ssh目录,敲回车到底,这个命令将为hadoop上的用户
hadoop生成其密钥对,询问其保存路径时直接回车采用默认路径,当提示要为生成的密钥输入passphrase的时 候,直接回车,也就是将其设定为空密码。生成的密钥对id_rsa,id_rsa.pub,默认存储在/root/.ssh目录下
chmod 755 .ssh #赋予755权限
cd .ssh
#ls –l
id_rsa id_rsa.pub
(4)这一步骤仅在master上执行,下列命令会提示你输入slave1的密码,按照提示输入即可,如果失败可重新尝试执行命令
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
#把公用密匙添加到authorized_keys 文件中(此文件最后一定要赋予644权限)
ssh slave1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
#上面条命令是把其他slave节点的公钥拷贝到master节点中的authorized_keys,#有几个slave节点就需要运行几次命令,
slave1是节点名称
scp ~/.ssh/authorized_keys slave1:~/.ssh/authorized_keys
#把authorized_keys文件拷贝回每一个节点,slave1是节点名称
(5)在master上连接所有slave节点,输入如下命令,上有几个slave节点就要输入几次,注意每次输入后,要返回master节点,重新输入命令:
ssh slave1 #需要选择yes/no 选择yes即可
此时 ls .ssh 结果如下:
authorized_keys id_rsa id_rsa.pub known_hosts
(6)Hadoop的安装,将下载好的hadoop-0.20.2.tar.gz文件上传到四台机器上的/usr //解压文件
tar xvfz hadoop-0.20.2.tar.gz
//如出现问题可以用下面两句代替
gzip -d hadoop-0.20.2.tar.gz
tar xvf hadoop-0.20.2.tar
(7)配置/etc/profile
// 以root登录四台机器,编辑/etc/profile,增加如下内容
export HADOOP_HOME=/usr/hadoop-0.20.2
export PATH=$PATH:$HADOOP_HOME/bin
(8)修改Hadoop的配置文件,在hadoop文件的conf文件夹中
A 、masters文件里添加如下内容:
192.168.1.102
B、slaves文件添加如下内容:
192.168.1.101
注:配置IP的地方尽量不要用主机名,否则不通用,易出问题。
(9)修改以下共3个xml配置文件:
首先hadoop-env.sh中添加如下语句:
export JAVA_HOME=/usr/jdk1.6.0_21
core-site.xml添加如下语句在<configuration></configuration>之间:
<property>
<name>fs.default.name</name>
<value>hdfs:// 192.168.1.102:9000</value>
</ property >
注意,这样配成IP 192.168.1.102,不要用主机名master, 否则eclipse里连接不上。
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hexianghui/tmp</value>
</property>
mapred-site.xml添加如下语句在<configuration></configuration>之间:
<property>
<name>mapred.job.tracker</name>
<value>192.168.1.102:9001</value>
</property>
hdfs-site.xml添加如下语句在<configuration></configuration>之间,
replication 默认为3,如果不修改,datanode 少于三台就会报错
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
10、配置好的hadoop发送到salve1上:
Scp -r /usr/hadoop/hadoop-0.20.2 slave1:/usr/hadoop/
(11)配置好后在master机器上进入hadoop的bin目录 格式化文件系统(一定要)
./hadoop namenode -format #格式化文件系统
./start-all.sh #启动namenode上的hadoop
确保9001和9000端口是通的。
jps 查看是否启动正常!
(12)查看50070,54310,50030端口是否启动 或者远程访问如下链接
#1080
#50030
#50060
netstat -tnl
http://master:50070访问
http://master:50030
五、打开9000和9001端口方法
首先,我们需要在CentOS系统中编辑iptables Java代码
vi /etc/sysconfig/iptables-config
然后在CentOS系统中添加 Java代码
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9000 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9001 -j ACCEPT
最后CentOS系统要重新启动服务 Java代码
/sbin/service iptables restart
查看端口是否开放 Java代码
netstat –anp|grep 900
/sbin/iptables -L -n
六:常遇问题解决办法
1、关闭防火墙,每台机子都要关
/etc/init.d/iptables stop
开机就不启动防火墙:
vi /etc/sysconfig/selinux
#修改为 SELinux=disable
service iptables stop
chkconfig iptables off
reboot
这样开机就不启动防火墙了。
注:如果防火墙未关,可能出现如下错误:
File /home/hexianghui/tmp/mapred/system/jobtracker.info could only be
replicated to 0 nodes, instead of 1。
2、修改主机名和设置固定IP
修改主机名 vi /etc/sysconfig/network
设默认IP vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
#BOOTPROTO=dhcp
BOOTPROTO=static
IPADDR=192.168.131.50
NETMASK=255.255.255.0
TYPE=Ethernet
HWADDR=XX:XX:XX:XX:XX:XX
ONBOOT=yes
最后重启服务service network restart
3、更换IP需要做什么?
如果master或slave的IP换了,需要做如下操作:
1、清空Hadoop临时目录 /home/hadoop/tmp
2、重新执行hadoop namenode –format 格式化HDFS。
后果,HDFS上的目录文件会丢失。