By TANG Jia
本Hadoop案例中涉及4台机器,其中1台namenode和2台datanode构成HDFS系统,另外还有1台client。
角色定位 主机名
Namenode master
Datanode slave1
Datanode slave2
Client client
1. 安装前准备工作:
1.1.更改4台机器主机名为master,slave1,slave2,client
修改/etc/sysconfig/network文件
1.2. 为4台机器配置静态IP,并加上DNS(1个以上)
修改/etc/sysconfig/network-scripts/ifcfg-eth0文件
更改为:
DEVICE=eth0
BOOTPROTO=static
HWADDR=10:78:D2:99:3B:EA
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.0.10
NETMASK=255.255.255.0
GATEWAY=192.168,0.2
BROADCAST=192.168.0.255
DNS1=192.168.0.2
1.3. 为4台机器写入主机名IP映射
修改/etc/hosts文件
1.4. 重启网络,执行更改
/etc/init.d/network restart
(此操作会将2中的DNS写入文件/etc/resolv.conf中)
1.5. 为3台机器(master,slave1,slave2)创建hadoop用户,为client机器创建viewlog用户
groupadd hadoop
useradd -g hadoop hadoop
赋予hadoop用户sudo权限,
gedit /etc/sudoers
在root ALL=(ALL:ALL) ALL行后添加
hadoop ALL=(ALL:ALL)ALL行
(同样的操作添加viewlog用户并赋予sudo权限)
2. jdk安装(4台机器)
2.1.创建目录/usr/java
2.2.下载jdk(案例中为jdk-7u17-linux-x64.rpm)至/usr/java中
2.3.安装
cd /usr/java
rpm -ivh jdk-7u17-linux-x64.rpm
2.4.安装完成,配置java环境文件/etc/profile
vim /etc/profile
最后行添加以下内容:
export JAVA_HOME=/usr/java/jdk1.7.0_17
export JRE_HOME=/usr/java/jdk1.7.0_17/jre
export PATH=$PATH:$JAVA_HOME/bin
exportCLASSPATH=.:$JRE_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
2.5.更新环境变量source/etc/profile
3. ssh配置
3.1.关闭防火墙/etc/init.d/iptables stop
切换至hadoop用户
3.2.安装ssh协议服务(4台机器)并启用
sudo yum install openssh-server
sudo /etc/init.d/ssh restart
3.3.查询ssh服务有无启动
ps -e | grep ssh
-----sshd(存在sshd进程代表ssh服务已启用)
3.4.master上配置无密码登录slave1,slave2,client
仅在master上:
ssh-keygen -t rsa -P “”(此时在/home/hadoop/.ssh目录下产生秘钥id_rsa和公钥id_rsa.pub)
cd /home/hadoop/.ssh
修改.ssh(700)与id_rsa.pub(644)权限
cat id_rsa.pub >> authorized_keys(追加公钥为信任)
3.5.将master上公钥传送给所有slaves
Master上hadoop用户:
scp authorized_keys hadoop@slave1:/home/hadoop/.ssh
scp authorized-keys hadoop@slave2:/home/hadoop/.ssh
scp authorized_keys hadoop@client:/home/hadoop/.ssh
3.6.在master机器上,可ssh 主机名或IP 登陆其他机器
4. Hadoop安装(4台机器,可仅在master上操作,然后scp/rsync至其他节点)
4.1.下载hadoop包至/home/hadoop/hadoopinstall下 /home/hadoop/hadoopinstall/hadoop-1.2.1.tar.gz
4.2.解压包、hadoop目录更名
Hadoop用户:cd ~/hadoopinstall
tar -zxf hadoop-1.2.1.tar.gz
mv -r hadoop-1.2.1 hadoop(更改目录名,方便后续操作)
4.3.再次修改环境变量文件/etc/profile
sudo vim /etc/profile
最后行添加:
export HADOOP_HOME=/home/hadoop/hadoopinstall/hadoop
export Path=$PATH:$HADOOP_HOME/bin
保存退出
4.4.更新环境配置source /etc/profile
4.5.配置conf目录下hadoop-env.sh, core-site.xml, hdfs-site.xml, mapred-site.xml四个文件
4.5.1. 配置hadoop-env.sh
cd ~/hadoopinstall/hadoop/conf
vim hadoop-env.sh
更改export JAVA_HOME为
export JAVE_HOME=/usr/java/jdk1.7.0_17
与/etc/profile中一致
4.5.2. 配置core-site.xml
先在$HADOOP_HOME下建立tmp文件夹
修改core-site.xml
4.5.3. 配置hdfs-site.xml
修改hdfs-site.xml(先在/home/hadoop/hadoopinstall/hadoop目录下建立hdfs目录,在其下建立data和name文件夹)
4.5.4. 配置mapred-site.xml
修改mapred-site.xml
4.6.配置masters,slaves文件
masters:master(主机名 或 IP)
slaves:slave1,slave2
4.7.将配置好的hadoop目录发送至slave1,slave2,client的~/hadoopinstall下
slave1,slave2:
scp ~/hadoopinstall/hadoop hadoop@slave1:/home/hadoop/hadoopinstall
scp ~/hadoopinstall/hadoop hadoop@slave2:/home/hadoop/hadoopinstall
Client:
scp ~/hadoopinstall/hadoop viewlog@client:/home/viewlog/hadoopinstall
4.8.更改client机器的hdfs-site.xml文件(重点注意)
添加一个条目:
5. 启动HDFS(仅在namenode上操作)
5.1. 进入hadoop目录
cd /home/hadoop/hadoopinstall/hadoop
5.2. 运行bin目录下的hadoop文件,格式化namenode节点
bin/hadoop namenode -format
5.3. 运行bin目录下的start-all.sh文件,启动hadoop集群
bin/start-all.sh
5.4. jps验证进程是否启动
成功运行时namenode应有进程:
jps
namenode
jobtracker
secondarynamenode
5.5. ssh登陆至其他机器
slave1,slave2上应有进程:
jps
datanode
tasktracker
client上仅有:
jps
5.6. 在各节点上实践操作HDFS系统
hadoop fs -ls 查看
hadoop fs -put 上传
hadoop fs -get 下载
小结:
namenode, datanode, client节点配置文件大抵相同,不同之处寥寥无几,分别为:
1) Core-site.xml与mapred-site.xml文件中指定的是namenode的IP:端口号,不是datanode和client的
2) Masters文件中指定的是namenode主机名,不是datanode和client的
3) Slaves文件中指定的是datanode的主机名,不是namenode和client的
4) Client节点对于Hdfs-site.xml文件增加了条目hadoop.job.ugi