5.分布式集群环境
1.虚拟机VMware Tools安装:
安装VMWare Tools非常简单,右键一个虚拟机,选择“安装VMware Tools” (其实,这时候就将VMware Tools安装包加载到光驱了) 。
以root用户登录该台服务器。将光驱挂载到任一目录下(我这里使用 /mnt):
mount /dev/cdrom /mnt
这时候,在 /mnt 目录可以看到文件 “VMwareTools-10.0.0-2977863.tar.gz”。
由于,我们要将该压缩文件解压,而/mnt目录当前挂载的是光驱,是不可写的,所以要将该文件拷贝到其他目录(我们就使用/tmp目录即可)。
cp VMwareTools-10.0.0-2977863.tar.gz /tmp/
cd /tmp
tar zxf VMwareTools-10.0.0-2977863.tar.gz
解压完成后,进入vmware-tools-distrib目录 ,执行脚本 vmware-install.real.pl
perl vmware-install.pl
后边,就一路使用默认项,回车,回车即可完成安装了。
安装完成后重启虚拟机。
2.分布式集群硬件规划和系统环境准备:
namenode建议使用raid1/raid5,datanode不建议使用raid。
1. Hadoop集群实验环境规划:
目前为止,我们需要在三台集群环境上规划我们的现有的Hadoop角色,我们需要设计下面的这些角色都安装到哪台服务器上:
HDFS : namenode 、 datanode 、 secondarynamenode
YARN : resourcemanager nodemanager
HISTORY: historyserver
2. 角色安装规划表:
Hadoop角色安装规划如果我们需要安装更多的角色,或者我们有更多的主机,也可以按照上表的方式来进行规划,然后按照这张表来进行环境的安装搭建。下面我们按照上表的配置来就行环境的搭建。
3. 准备系统环境:
注意:以下4个步骤的操作,需要在三个服务器上分别执行。
(1)关闭三台服务器的selinux和防火墙。
该操作需要使用root用户执行。
a). 关闭selinux,需要修改配置文件:
# vi /etc/sysconfig/selinux
修改配置:
SELINUX=disabled
b). 关闭防火墙:
修改后一次生效:
# service iptables stop
下次重启时也生效:
# chkconfig iptables off
(2)固定主机名:
我的三台主机名分别是 :
hadoop-senior01.pmpa.com
hadoop-senior02.pmpa.com
hadoop-senior03.pmpa.com
需要修改文件:
# vi /etc/sysconfig/network
修改下边一行:
HOSTNAME=hadoop-senior01.pmpa.com
(3)添加hosts文件:
修改/etc/hosts文件,添加下边内容:
192.168.8.128 hadoop-senior01.pmpa.com
192.168.8.129 hadoop-senior02.pmpa.com
192.168.8.130 hadoop-senior03.pmpa.com
(4) 在三个服务器上,都新建用户 natty:
# useradd natty
# echo 123456 | passwd --stdin natty
3.NTP时间同步:
NTP代表 Network Time Protocal , 也就是同步互联网上的时间服务器的时间。我们把第一台服务器hadoop-senior01.pmpa.com作为NTP服务器的Server端,其余两台服务器同步这个服务器的时间。
注意:该项操作需要使用root用户,但是在一台服务器上做即可,其他服务器同步这台服务器,我们在hadoop-senior01上做。
(1)修改服务器的时区:
如果操作系统在安装时,选择的不是上海的时区,要首先修改成shanghai时区,否则时间同步会失败。先将原来的时区文件(/etc/localtime)改名备份:
mv /etc/localtime /etc/localtime_bak
再创建一个软链接文件,指向上海的时区文件:
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
(2)同步服务器的时间:
使用ntpdate命令来同步时间。选择亚洲时间服务器来同步时间:
# ntpdate asia.pool.ntp.org
把当前时间写入硬件BIOS:
# hwclock -w
(3)修改NTP配置文件:
关于NTP配置文件的详细介绍,可以参考下链接:Linux NTP配置详解
ntp配置文件的位置在 /etc/ntp.conf
a. 去掉下边这行的注释,并改成自己机器IP的网段:
该行用来控制相关权限,语法为: restrict IP地址 mask 子网掩码 参数 。
其中,nomodify notrap 都是参数。
nomodify:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。
notrap :不提供trap远端登陆:拒绝为匹配的主机提供模式 6 控制消息陷阱服务。陷阱服务是 ntpdq 控制消息协议的子系统,用于远程事件日志记录程序。
restrict 192.168.8.0 mask 255.255.255.0 nomodify notrap
b. 下面3行加上注释:
这三行原本的作用是设定NTP主机来源,由于我们将hadoop-senior01设定为了NTP Server端,所以这几行都注释掉。
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org
以下两行去掉注释:
如果无法与上层ntp server通信以本地时间为标准时间。
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
(4)修改nptd服务配置:
重启nptd服务:
# service ntpd restart
设置ntpd服务,开机后启动(默认是开机后不启动ntpd服务):
# chkconfig ntpd on
(5)设置hadoop-senior02和hadoop-senior03两个服务器,每隔5分钟向hadoop-senior01同步一次时间,使用crontab来实现。
# crontab -e
*/10 * * * * /usr/sbin/ntpdate hadoop-senior01.pmpa.com
4.SSH无秘钥登录:
注意:该项操作,需要使用natty用户进行。
1. 使用SSH无秘钥登陆的作用:
(1)方便使用scp命令在 不同节点间拷贝文件;
(2)按模块启动服务, start-dfs.sh start-yarn.sh。
2. 配置无秘钥登陆:
配置hadoop-senior01可以无秘钥登陆 hadoop-senior01、hadoop-senior02、hadoop-senior03。在hadoop-senior01上执行:
$ ssh-keygen -t rsa
执行后,不输入任何内容,一直回车就可以。
下面步骤,将上一步在hadoop-senior01上生成的公钥copy到hadoop-senior02和hadoop-senior03上。第一次需要输一次密码。
$ ssh-copy-id natty@hadoop-senior01.pmpa.com
$ ssh-copy-id natty@hadoop-senior02.pmpa.com
$ ssh-copy-id natty@hadoop-senior03.pmpa.com
在hadoop-senior02和 hadoop-senior03上重复上边的步骤。
5.分布式环境搭建和测试启动:
1. 在02和03机器上,创建/opt/modules目录,并赋权限(跟01保持一致)。
# mkdir /opt/modules
# chown -R natty:natty /opt/modules/
2. 在02和03上配置环境变量
# vi /etc/profile
把java环境变量的配置复制到02和03的/etc/profile文件中。
3. 拷贝java安装目录到02和03服务器:
$ scp -r /opt/modules/jdk1.7.0_67/ natty@hadoop-senior02.pmpa.com:/opt/modules/
4. 修改 hadoop的配置文件:
需要修改以下4个组件:
datanode在$HADOOP_HOME/etc/hadoop/slaves 文件中配置。把所有作为datanode的节点的主机名列在这个文件中就可以。
5. 拷贝一个配置好的节点的haoop目录内容,到其他2个节点上。
在这里,由于我之前配置了伪分布式模式,在hadoop-senior01机器上,所以将hadoop-senior01配置好的内容,直接scp到hadoop-senior02和hadoop-senior03上。
$ scp -r hadoop-2.5.0/ natty@hadoop-senior02.pmpa.com:/opt/modules/ ; scp -r hadoop-2.5.0/ natty@hadoop-senior03.pmpa.com:/opt/modules/
6.删除02和03机器上已经安装好的java(操作系统默认安装的)
切换到root用户,查看已经安装的版本:
# rpm -qa | grep java
删除这些已经安装的java,进而使用我们安装jdk 1.7
# rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.50.1.11.5.el6_3.x86_64 tzdata-java-2012j-1.el6.noarch java-1.7.0-openjdk-1.7.0.9-2.3.4.1.el6_3.x86_64
执行环境变量(当然重启系统也是可以的):
# source /etc/profile
7. 格式化hdfs:
$ bin/hdfs namenode -format
8. 启动hdfs、yarn 和 jobhistory组件:
根据在文章最开始时候,我设计的安装规划表,namenode是安装在hadoop-senior01上的,所以启动hdfs需要在hadoop-senior01上执行;ResourceManager是安装在hadoop-senior02上的,所以在hadoop-senior02 上启动yarn。 jobhistoryserver是在hadoop-senior03上安装的,jobhistory启动在hadoop-senior03上。
在第一台服务器上启动hdfs:
$ sbin/start-dfs.sh
在第二台服务器上启动yarn(配置的resourcemanager在hadoop-senior02上)
$ sbin/start-yarn.sh
在第三台服务器上启动 jobhistory 服务:
$ sbin/mr-jobhistory-daemon.sh start historyserver
9.测试集群有效性:
可以执行一些hdfs的命令来进行测试:
$ bin/hdfs dfs -mkdir /input
$ bin/hdfs dfs -ls /
$ bin/hdfs dfs -put etc/hadoop/core-site.xml /input/
$ bin/hdfs dfs -text /input/core-site.xml
运行 yarn上的mapreduce来测试:
$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount /input/core-site.xml /output01
$ bin/hdfs dfs -text /output01/part*
修改windows本地的hosts文件(C:\Windows\System32\drivers\etc\hosts)添加映射,来用浏览器来测试:
HDFS访问页面(hdfs-site.xml): http://hadoop-senior01.pmpa.com:50070/
YARN访问页面(可以进入yarn的管理页面,默认配置):http://hadoop-senior02.pmpa.com:8088
在上一个页面,点击“History” 可以跳转到第三个服务器的地址。
yarn管理界面点击了History直接跳转:
JobHistory服务器界面