1.1 Linux环境配置
1.1.1 修改主机名
1.1.1.1 Gn-M01节点
使用vi编辑主机名:
vi /etc/sysconfig/network
配置信息如下所示,主要修改配置文件中第二行的HOSTNAME这一属性,这个属性若为你想要配置的主机名,这不不需要配置;否则,修改为Gn-M01(或者你想要配置的属性):
修改后保存退出(:wq)
修改后生效命令,如下所示:
hostname Gn-M01(或者你所配置的主机名)
检测主机名是否修改成功,在操作之前需关闭当前终端,重新打开另一个终端:
hostname
执行完hostname命令后,出现下图所示,说明修改成功:
1.1.1.2 Gn-M02节点
使用vi编辑主机名:
vi /etc/sysconfig/network
配置信息如下所示,主要修改配置文件中第二行的HOSTNAME这一属性,这个属性若为你想要配置的主机名,这不不需要配置;否则,修改为Gn-M02(或者你想要配置的属性):
修改后保存退出(:wq)
修改后生效命令,如下所示:
hostname Gn-M02(或者你所配置的主机名)
检测主机名是否修改成功,在操作之前需关闭当前终端,重新打开另一个终端:
hostname
执行完hostname命令后,出现下图所示,说明修改成功:
1.1.1.3 Gn-S01节点
使用vi编辑主机名:
vi /etc/sysconfig/network
配置信息如下所示,主要修改配置文件中第二行的HOSTNAME这一属性,这个属性若为你想要配置的主机名,这不不需要配置;否则,修改为Gn-M01(或者你想要配置的属性):
修改后保存退出(:wq)
修改后生效命令,如下所示:
hostname Gn-S01(或者你所配置的主机名)
检测主机名是否修改成功,在操作之前需关闭当前终端,重新打开另一个终端:
hostname
执行完hostname命令后,出现下图所示,说明修改成功:
1.1.2 关闭防火墙
注:Gn-M01、Gn-M02、Gn-S01三台服务器关闭防火墙这一操作步骤一致
我们以Gn-M01为例:
(1)查看防火墙状态,命令如下:
serviceiptables status
这说明防火墙是开启状态。
(2)关闭防火墙
临时关闭防火墙,命令如下所示:
serviceiptables stop
设置开机后自动关闭防火墙,命令如下所示:
chkconfig--list |grep iptables
chkconfigiptables off
出现上图效果,说明服务器开机后自动关闭防火墙。
注:Gn-M02、Gn-S01上操作和Gn-M01一致,按照上面步骤进行操作即可。
1.1.3 关闭selinux
注:Gn-M01、Gn-M02、Gn-S01三台服务器关闭selinux这一操作步骤一致
我们以Gn-M02为例
(1)查看selinux状态,命令如下:
sestatus
说明selinux状态为enabled,处于开启状态。
(2)修改selinux配置文件
用vi编辑器selinux配置文件,命令如下:
vi/etc/selinux/config
将selinux状态修改为disabled,具体修改如下图所示;
(3)selinux修改后生效
检测selinux是否关闭成功,需要先重启服务器,然后执行以下命令查看selinux命令:
sestatus
出现上图所示的,说明selinux关闭成功。
注:Gn-M02、Gn-S01的selinux的操作和Gn-M01的操作一致,执行以上操作即可。
1.1.4 配置ntp时间同步
配置部署的思路:将集群中的其中一台服务作为ntp时间服务器(注:这台时间服务器可以和网络时间进行同步),其他的机器作为从服务器(客户端),让其他这些服务器去同步之前已经选好的ntp时间服务器,这样就能是实现整个集群的时间一致。
我们将Gn-M01作为ntp时间服务器,首先让Gn-M01这台服务器与网络时间进行同步,然后,再让Gn-M02、Gn-S01同步Gn-M01的时间,这样就实现了三台服务器的时间一致。 部署分布如下表所示:
主机名 | 角色 |
Gn-M01 | 时间服务(要与网络时间进行同步) |
Gn-M02 | 要同步的服务器(客户端) |
Gn-S01 | 要同步的服务器(客户端) |
注:时间同步时,从服务器(客户端)的ntp服务是停止的,因为从服务公用一个ntp时间服务器
说的更通俗就是Gn-M02、Gn-S01公用Gn-M01的ntp时间服务器
1.1.4.1 Gn-M01节点
(1) 查看ntp服务器状态
service ntpd status
说明服务是停止的。
(2) 查看时间
date
Windows下的实际时间:
所以两个图的时间对比后,说明时间和网络时间不一致。
(3) ntp时间服务与网络时间同步
命令如下所示:
ntpdate cn.pool.ntp.org
windows下实际时间:
(4) 配置ntp server
用vi编辑器编辑ntp服务器配置文件,命令如下:
vi /etc/ntp.conf
修改ntp服务的配置文件:
将
restrict default kod nomodify notrap nopeer noquery
改成:
restrict default nomodify
同时添加两行:
server 127.127.1.0 prefer #local clock
fudge 127.127.1.0 stratum 1
将
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
注释掉。
(5) 启动ntp服务
cd /etc/init.d/
启动ntp 服务:
service ntpd start
将时间服务器开机启动:
chkconfig ntpd on
如有错误信息可查看错误日志:
tail /var/log/message
出现上图说明配置正确,并启动成功。
观察启动端口:
netstat –tlunp | grep ntp
(6) 同步上层时间服务
由于把本机作为时间服务器则很快就可以同步时间服务器
ntpstat
显示ntp服务器与上层服务器状态:
ntpq -p
(该配置完成后需要重启服务器生效)
1.1.4.2 Gn-M02节点
配置时间服务器客户端
(1) 查看ntp服务器状态
service ntpd status
(2)同步Gn-M01的ntp服务器
手动同步:
ntpdate 192.168.219.148(Gn-M01的IP地址)
自动同步:
crontab -e
添加以下内容,进行没五分同步一次时间
*/5 * * * * /usr/sbin/ntpdate 192.168.219.14
1.1.4.3 Gn-S01节点
配置时间服务器客户端
注:Gn-S01的操作与Gn-M02的操作一致,详细配置参见Gn-M02
1.1.5 配置网络环境
配置网络的目的是要保证集群的间的网络能够互通
注:Gn-M01、Gn-M02、Gn-S01的操作一致
以Gn-M01为例
ifconfig
分别ping Gn-M02、Gn-S01的IP地址
ping通即可。
注:Gn-M02、Gn-S01的网络的配置和Gn-M01配置一致,详细配置重复以上操作即可
1.1.6 配置hosts列表
注:配置hosts列表来解析主机名,Gn-M01、Gn-M02、Gn-S01的操作一致
以Gn-M01为例进行操作
用vi编辑主机名列表,命令如下所示:
vi /etc/hosts
(建议填写所有的集群主机名映射)
注:IP地址要和主机名对应,并且是IP地址在前,主机名在后
验证是否配置成功:
pingGn-M01
pingGn-M02
pingGn-S01
出现上图说明配置成功,通过IP地址解析了主机名。
注:Gn-M02、Gn-S01的主机名解析的配置和Gn-M01配置一致,详细配置重复以上操作即可
1.1.7 安装JDK
安装JDK的目的是用来为程序的运行提供java环境
由于所有的软件包都安装在/opt/software
进入安装目录:
cd /opt/software
1.1.7.1 软件版本
Java | version | 1.7.0_71 |
download |
| |
备注 | Gn-M01、Gn-M02、Gn-S01都配置JDK |
1.1.7.2 解压JDK安装包
unzipjdk1.7.0_71.zip
解压之后出现jdk1.7.0_71目录说明解压成功,然后进入jdk1.7.0_71目录:
cd jdk1.7.0_71
1.1.7.3 配置环境变量
用vi编辑/etc/profile,命令如下所示:
vi/etc/profile
配置环境变量内容如下:
# set java environment
exportJAVA_HOME=/opt/software/jdk1.7.0_71
export PATH=$PATH:$JAVA_HOME/bin
修改之后保存退出(:wq)
1.1.7.4 配置生效及验证
配置完环境变量,使得环境变量生效的命令如下所示:
source/etc/profile
验证配置是否成功:
java
javac
java –version
出现上图所示说明JDK部署成功。
注:Gn-M02、Gn-S01的JDK的配置和Gn-M01配置一致,详细配置重复以上操作即可
1.1.8 免秘钥登陆配置
免秘钥登陆是通过sshd这个服务,通过命令ssh-keygen-t rsa来生成服务器自己的公钥和私钥,实现免秘钥就是将一台机器(如:Gn-M01)的公钥复制到另一台机器(Gn-M02)的~/.ssh目录下,就可以实现提供公钥的那台机器(Gn-M01)免秘钥登陆复制到的那台机器(Gn-M02)上。
在hadoop的HA集群上(集群上机器的分布有2个管理节点和n个数据节点)要实现一种免秘钥的方式就是2台管理节点要实现互相免秘钥登陆,同时管理节点要免秘钥登陆n个数据节点。
Hadoop的HA(管理节点:Gn-M01、Gn-M02;数据节点:Gn-S01)
注:ssh面秘钥登陆配置是要注意用户,在那个用户下安装hadoop,就在那个用户下配置,我们是在root用户下安装hadoop,那么,我们就以root用户为例:
1.1.8.1 Gn-M01节点
在终端上生成秘钥,命令如下(一路点击回车生成秘钥)
ssh-keygen-t rsa
生成的秘钥在~/.ssh目录下如下图所示:
复制公钥文件,命令如下所示:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
修改authorized_keys文件的权限,命令如下:
chmod 600 ~/.ssh/authorized_keys
将authorized_keys文件复制在Gn-M01上,命令如下所示:
scp ~/.ssh/authorized_keys root@Gn-M02:~/
如果提示yes/no的时候,则输入yes
密码:输入密码
1.1.8.2 Gn-M02节点
在终端上生成秘钥,命令如下(一路点击回车生成秘钥)
ssh-keygen-t rsa
生成的秘钥在~/.ssh目录下如下图所示:
将~/authorized_keys文件复制到~/.ssh目录下,命令如下所示:
mv ~/authorized_keys ~/.ssh/
复制公钥文件,命令如下所示:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
再将authorized_keys文件传到Gn-M01上,这样就可以实现hadoop的HA的管理节点Gn-M01、Gn-M02之间可以互相无秘钥登陆,实现互通,具体命令如下所示:
scp ~/.ssh/authorized_kyes root@Gn-M01:~/.ssh/
如果提示yes/no的时候,则输入yes
密码:输入密码
在authorized_keys文件中即有Gn-M01的公钥,又有Gn-M02的公钥,要实现hadoop的HA的管理节点(Gn-M01、Gn-M01)免秘钥登陆数据节点(Gn-S01),只需将这个authorized_keys文件复制到Gn-S01的~/.ssh目录下,先将authorized_keys文件复制到Gn-S01的~/目录下,命令如下所示:
scp ~/.ssh/authorized_kyes root@Gn-S01:~/
如果提示yes/no的时候,则输入yes
密码:输入密码
1.1.8.3 Gn-S01节点
在终端上生成秘钥,命令如下(一路点击回车生成秘钥)
ssh-keygen-t rsa
生成的秘钥在~/.ssh目录下如下图所示:
将~/authorized_keys文件复制到~/.ssh目录下,命令如下所示:
mv ~/authorized_keys ~/.ssh/
1.1.8.4 验证
Gn-M01无秘钥登陆Gn-M02,命令如下:
sshGn-M02
Gn-M02无秘钥登陆Gn-M01,命令如下:
sshGn-M01
Gn-M01无秘钥登陆Gn-S01,命令如下:
sshGn-S01
Gn-M02无秘钥登陆Gn-S01,命令如下:
sshGn-S01
1.2 Zookeeper安装部署
1.2.1 Zookeeper集群规划
Zookeeper是一个分布式的开放源码的应用程序协调服务,是Hadoop和Hbase的重要组件。具体在集群的部署分布如下表所示:
服务 | 主机名 | 版本及下载 | 备注 |
Zookeeper | Gn-M01 | 版本:Zookeeper-3.4.6 下载: http://apache.dataguru.cn/zookeeper/stable/
| Zookeeper的部署一般都奇数个节点,这是由zookeeper的选举算法决定的,hadoop的HA的zookeeper的个数至少为3台 |
Gn-M02 | |||
Gn-S01 |
注:由于zookeeper的配置在Gn-M01、Gn-M02、Gn-S01都是一致,直接用一台及其配置后远程复制,略加修改即可。
1.2.2 解压安装包
进入安装目录,命令如下:
cd /opt/software
ls(查看是否有zookeeper的安装包)
如果有zookeeper的安装包,则解压zookeeper安装包,命令如下所示:
tar -zxvf zookeeper-3.4.6.tar.gz
1.2.3 配置环境变量
注:在Gn-M01、Gn-M02、Gn-S01上都进行配置环境变量,方便zookeeper服务的启动、停止、状态的查看等操作
进入zookeeper的解压目录下,命令如下:
cd /opt/software/zookeeper-3.4.6
pwd
用vi编辑/etc/profile文件,命令如下:
vi /etc/profile
配置的zookeeper环境变量的内容如下所示:
在/etc/profile文件中增加以下配置
export ZOOKEEPER_HOME=/opt/software/zookeeper-3.4.6
exportPATH=$PATH:$ZOOKEEPER_HOME/bin
修改完成后保存退出(:wq)
修改完成后,让配置的环境变量生效,命令如下所示:
source /etc/profile
1.2.4 修改配置文件
进入zookeeper的配置目录:
cd /opt/software/zookeeper-3.4.6/conf/
复制/opt/software/zookeeper-3.4.6/conf/目录下的zoo_sample.cfg到zoo.cfg,命令如下所示:
cd /opt/software/zookeeper-3.4.6/
cp zoo_sample.cfg zoo.cfg
用vi编辑zoo.cfg文件,配置内容如下所示:
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/opt/software/zookeeper-3.4.6/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
#http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purgefeature
#autopurge.purgeInterval=1
server.1=192.168.219.148:2888:3888
server.2=192.168.219.149:2888:3888
server.3=192.168.219.150:2888:3888
配置完成后保存退出(:wq)
然后在/opt/software/zookeeper-3.4.6目录下创建data目录,命令如下所示:
mkdir -p /opt/software/zookeeper-3.4.6/data
在/opt/software/zookeeper-3.4.6/data文件夹下新建文件:myid命令如下
cd/opt/software/zookeeper-3.4.6/data
touch myid
添加server序号到myid中,如: server.1 机器的myid 只需要加入数字 1 ,server.2机器的myid 只需要加入数字2,server.3 机器的myid只需要加入数字3即可。
在Gn-M01上:
vi myid
Gn-M01节点:
修改完保存退出(:wq)
修改zookeeper的log日志的路径,以便于管理和维护:
进入zookeeper的启动目录:
cd /opt/software/zookeeper-3.4.6/bin/
用vi编辑zkEnv.sh文件,命令如下:
vi zkEnv.sh
添加内容如下所示:
ZOO_LOG_DIR=/opt/software/zookeeper-3.4.6/logs
在/opt/software/zookeeper-3.4.6/目录创建logs日志存放目录,命令如下所示:
mkdir -p /opt/software/zookeeper-3.4.6/logs
1.2.5 部署集群到其他节点
将Gn-M01上的/opt/software/zookeeper-3.4.6目录分别远程复制到Gn-M02、Gn-S01的/opt/softwate目录下,命令如下所示:
scp -r /opt/software/zookeeper-3.4.6 root@Gn-M02:/opt/software/
scp -r /opt/software/zookeeper-3.4.6 root@Gn-S02:/opt/software/
复制完成之后,应该注意/opt/software/zookeeper-3.4.6/data目录下myid的内容,修改myid的内容:Gn-M02中为2,Gn-S01中为3
Gn-M02节点:
Gn-S01节点:
1.2.6 启动、停止服务和查看服务的状态
启动zookeeper集群:
分别在Gn-M01、Gn-M02、Gn-S01上启动zookeeper服务,命令如下所示:
zkServer.shstart (或者/opt/software/zookeeper-3.4.6/bin/zkServer.shstart)
以Gn-M01为例截图,其他节点的命令都一致:
查看zookeeper集群的状态:
zkServer.shstatus(或者/opt/software/zookeeper-3.4.6/bin/zkServer.shstatus)
以Gn-M01为例截图,其他节点的命令都一致:
1.2.7 验证
用jps命令查看每台节点的zookeeper进程,命令如下:
jps
以Gn-M01为例截图,看到QuorumPeerMain进程说明zookeeper启动成功;
1.3 Hadoop安装部署
1.3.1 Hadoop集群部署规划
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
Hadoop-2.6.0的HA配置部署分布如下表所示:
主机名 | 角色 | 进程 | 备注 |
Gn-M01 | 管理节点 | namenode、resourcemanager、journalnode DFSZKFailoverController | 配置hadoop的之前注意zookeeper、Linux环境配置是前提,根据节点角色进行区分进程 |
Gn-M02 | 管理节点 | Namenode、resourcemanager、journalnode DFSZKFailoverController | |
Gn-S01 | 数据节点 | datanode、nodemanager、journalnode |
注意:
部署思路:选择从Gn-M01开始安装,然后远程复制到Gn-M02、Gn-S01各个节点上
1.3.2 解压安装包
进入安装目录,命令如下:
cd /opt/software
ls(查看是否有hadoop的安装包)
如果有hadoop的安装包,则解压hadoop安装包,命令如下所示:
tar -zxvf hadoop-2.6.0.tar.gz
1.3.3 配置环境变量
注:在Gn-M01、Gn-M02、Gn-S01上都进行配置环境变量,方便hadoop相关服务的启动、停止、状态的查看等操作
进入hadoop的解压目录下,命令如下:
cd /opt/software/zookeeper-3.4.6
pwd
用vi编辑/etc/profile文件,命令如下:
vi /etc/profile
配置的hadoop环境变量的内容如下所示:
在/etc/profile文件中增加以下配置
export HADOOP_HOME=/opt/software/hadoop-2.6.0
exportPATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/bin
修改完成后保存退出(:wq)
修改完成后,让配置的环境变量生效,命令如下所示:
source /etc/profile
1.3.4 修改配置文件
进入hadoop的配置目录:
cd /opt/software/hadoop-2.6.0/etc/hadoop
1.3.4.1 core-site.xml
用vi编辑/opt/software/hadoop-2.6.0/etc/hadoop/目录下的core-site.xml文件,命令如下所示:
vi core-site.xml
添加内容如下所示(红色字体是主要添加的内容):
<?xmlversion="1.0" encoding="UTF-8"?>
<?xml-stylesheettype="text/xsl" href="configuration.xsl"?>
<!--Licensed under the Apache License, Version 2.0 (the "License"); you
may not use this file except incompliance with the License. You may obtain
a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0 Unless
required by applicable law or agreed toin writing, software distributed
under the License is distributed on an"AS IS" BASIS, WITHOUT WARRANTIES
OR CONDITIONS OF ANY KIND, either expressor implied. See the License for
the specific language governingpermissions and limitations under the License.
See accompanying LICENSE file. -->
<!--Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://green</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/software/hadoop-2.6.0/tmp</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>Gn-M01:2181,Gn-M02:2181,Gn-S01:2181</value>
</property>
</configuration>
1.3.4.2 hdfs-site.xml
用vi编辑/opt/software/hadoop-2.6.0/etc/hadoop/目录下的hdfs-site.xml文件,命令如下所示:
vi hdfs-site.xml
添加内容如下所示(红色字体是主要添加的内容):
<?xmlversion="1.0" encoding="UTF-8"?>
<?xml-stylesheettype="text/xsl" href="configuration.xsl"?>
<!--Licensed under the Apache License, Version 2.0 (the "License"); you
may not use this file except incompliance with the License. You may obtain
a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0 Unless
required by applicable law or agreed toin writing, software distributed
under the License is distributed on an"AS IS" BASIS, WITHOUT WARRANTIES
OR CONDITIONS OF ANY KIND, either expressor implied. See the License for
the specific language governingpermissions and limitations under the License.
See accompanying LICENSE file. -->
<!--Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.nameservices</name>
<value>green</value>
</property>
<property>
<name>dfs.ha.namenodes.green</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.green.nn1</name>
<value>Gn-M01:9000</value>
</property>
<property>
<name>dfs.namenode.rpc-address.green.nn2</name>
<value>Gn-M02:9000</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.green</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa_nn1</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://Gn-M01:8485;Gn-M02:8485;Gn-S01:8485/journal</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/software/hadoop-2.6.0/tmp/journalnode</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled.green</name>
<value>true</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<property>
<name>dfs.namenode.http-address.green.nn1</name>
<value>Gn-M01:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.green.nn2</name>
<value>Gn-M02:50070</value>
</property>
<property>
<name>dfs.namenode.servicerpc-address.green.nn1</name>
<value>Gn-M01:53310</value>
</property>
<property>
<name>dfs.namenode.servicerpc-address.green.nn2</name>
<value>Gn-M02:53310</value>
</property>
</configuration>
1.3.4.3 mapred-site.xml
由于/opt/software/hadoop-2.6.0/etc/hadoop/目录下没有mapred-site.xml文件,需要将/opt/software/hadoop-2.6.0/etc/hadoop/目录下的mapred-site.xml.template文件复制到mapred-site.xml文件,命令如下所示:
cp /opt/software/hadoop-2.6.0/etc/hadoop/mapred-site.xml.template/opt/software/hadoop-2.6.0/etc/hadoop/mapred-site.xml
用vi编辑/opt/software/hadoop-2.6.0/etc/hadoop/目录下的mapred-site.xml文件,命令如下所示:
vi mapred-site.xml
添加内容如下所示(红色字体是主要添加的内容):
<?xmlversion="1.0"?>
<?xml-stylesheettype="text/xsl" href="configuration.xsl"?>
<!--Licensed under the Apache License, Version 2.0 (the "License"); you
may not use this file except incompliance with the License. You may obtain
a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0 Unless
required by applicable law or agreed toin writing, software distributed
under the License is distributed on an"AS IS" BASIS, WITHOUT WARRANTIES
OR CONDITIONS OF ANY KIND, either expressor implied. See the License for
the specific language governingpermissions and limitations under the License.
See accompanying LICENSE file. -->
<!--Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>Gn-M01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.adress</name>
<value>Gn-M01:19888</value>
</property>
</configuration>
1.3.4.4 yarn-site.xml
用vi编辑/opt/software/hadoop-2.6.0/etc/hadoop/目录下的yarn-site.xml文件,命令如下所示:
vi yarn-site.xml
添加内容如下所示(红色字体是主要添加的内容):
<?xmlversion="1.0"?>
<!--Licensed under the Apache License, Version 2.0 (the "License"); you
may not use this file except incompliance with the License. You may obtain
a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0 Unless
required by applicable law or agreed toin writing, software distributed
under the License is distributed on an"AS IS" BASIS, WITHOUT WARRANTIES
OR CONDITIONS OF ANY KIND, either expressor implied. See the License for
the specific language governingpermissions and limitations under the License.
See accompanying LICENSE file. -->
<configuration>
<!-- Sitespecific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>green</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>Gn-M01</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>Gn-M02</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>Gn-M01:2181,Gn-M02:2181,Gn-S01:2181</value>
</property>
</configuration>
1.3.4.5 slaves
用vi编辑/opt/software/hadoop-2.6.0/etc/hadoop/目录下的slaves文件,命令如下所示:
vi slaves
添加内容(添加内容为数据节点的主机名)如下所示(红色字体是主要添加的内容):
Gn-S01
1.3.4.6 hadoop-env.sh
用vi编辑/opt/software/hadoop-2.6.0/etc/hadoop/目录下的hadoop-env.sh文件,命令如下所示:
vi hadoop-env.sh
添加内容如下所示(红色字体是主要添加的内容):
exportJAVA_HOME=/opt/software/jdk1.7.0_71
1.3.4.7 yarn-env.sh
用vi编辑/opt/software/hadoop-2.6.0/etc/hadoop/目录下的yarn-env.sh文件,命令如下所示:
vi yarn-env.sh
添加内容如下所示(红色字体是主要添加的内容):
exportJAVA_HOME=/opt/software/jdk1.7.0_71
配置完成后给/opt/software/hadoop-2.6.0/etc/hadoop/目录下的.sh结尾的文件增加可执行权限,命令如下所示:
chmod +x *.sh
1.3.5 部署集群到其他节点
将Gn-M01上的/opt/software/hadoop-2.6.0目录分别远程复制到Gn-M02、Gn-S01的/opt/softwate目录下,命令如下所示:
scp -r /opt/software/hadoop-2.6.0 root@Gn-M02:/opt/software/
scp -r /opt/software/hadoop-2.6.0 root@Gn-S02:/opt/software/
Gn-M02上查看/opt/software目录下的hadoop-2.6.0,如下图所示:
说明Gn-M01远程复制到Gn-M02成功
Gn-M02上查看/opt/software目录下的hadoop-2.6.0,如下图所示:
说明Gn-M01远程复制到Gn-M02成功
1.3.6 启动及验证
注:单步启动集群时的方式
1.3.6.1 启动验证namenode的HA
(1) 检查zookeeper的状态
查看zookeeper的状态,命令如下所示:
zkServer.shstatus (或者/opt/software/zookeeper-3.4.6/bin/zkServer.sh status)
在启动hadoop的HA相关程序前必需保证zookeeper服务正常,因为zookeeper是提供HA协调通信的,是前提基础,所以必须保证zookeeper服务正常。
若zookeeper服务不正常,则启动zookeeper服务,启动命令如下:
zkServer.shstart (或者/opt/software/zookeeper-3.4.6/bin/zkServer.sh start)
在每个节点上用jps命令查看zookeeper进程:
jps
以Gn-M01为例截图,看到QuorumPeerMain进程说明zookeeper启动成功;
(2) 创建hdfs的zookeeper命名空间
注:在某一个管理节点上启动(以Gn-M01为例)
创建hdfs的zookeeper命名空间命令如下所示:
hdfs zkfc -formatZK(或者/opt/software/hadoop-2.6.0/bin/hdfs zkfc -formatZK)
(3) 启动journalnode集群
($HADOOP_HOME/etc/hadoop/hdfs-site.xml中dfs.namenode.shared.edits.dir属性的value配置了journalnode节点名称),配置了那几台节点上就启动在那些节点上。
我们是在Gn-M01、Gn-M02、Gn-S01上配置了journal,所以分别Gn-M01、Gn-M02、Gn-S01启动journalnode,启动命令如下(以Gn-M01例):
hadoop-daemon.sh start journalnode (或者/opt/software/hadoop-2.6.0/sbin/ hadoop-daemon.sh start journalnode)
(4) 格式化hadoop集群
注:在某一个管理节点上启动(以Gn-M01为例)
格式化集群的命令如下所示:
hdfs namenode -format green(或者/opt/software/hadoop-2.6.0/bin/hdfs namenode -format green)
用以上命令在主namenode格式化namenode和journalnode目录。
注:green是cluster-id,是由配置文件core-site.xml决定里面的fs.defaultFS属性决定的
(5) 单点启动主namenode
在主namenode节点单点启动守护进程(以Gn-M01为例)
hadoop-daemon.shstart namenode(或者/opt/software/hadoop-2.6.0/sbin/hadoop-daemon.sh start namenode)
(6) 同步并启动从namenode
在Gn-M02上执行
在备节点执行第一行命令,这个是把备namenode节点的目录格式化并把元数据从主namenode节点copy过来,并且这个命令不会把journalnode目录再格式化了!然后用第二个命令启动备namenode进程!
从主namenode同步数据到从namenode,命令如下所示:
hdfs namenode -bootstrapStandby(或者/opt/software/hadoop-2.6.0/bin/hdfs namenode -bootstrapStandby)
单点启动从namenode命令如下所示:
hadoop-daemon.shstart namenode(或者/opt/software/hadoop-2.6.0/sbin/hadoop-daemon.sh start namenode)
(7) 单点启动zkfc
注:在两个namenode节点(两个管理节点Gn-M01、Gn-M02)都执行
启动命令如下所示:
hadoop-daemon.shstart zkfc(或者/opt/software/hadoop-2.6.0/sbin/hadoop-daemon.sh start zkfc)
以Gn-M01截图
以Gn-M02截图
(8) 单点启动datanode
所有的数据节点都配置在/opt/software/hadoop-2.6.0/etc/hadoop/slaves文件中,datanode启动在所有数据节点。
cat/opt/software/hadoop-2.6.0/etc/hadoop/slaves
所以我们要在Gn-S01上启动datanode,命令如下所示:
hadoop-daemon.shstart datanode(或者/opt/software/hadoop-2.6.0/sbin/hadoop-daemon.sh start datanode)
(9) 验证namenode的HA
3种方式验证方式:(不建议a方式,建议b、c方式)
a、杀进程
可以在两台namenode机器之间来回kill掉namenode进程以检查HDFS的HA配置,在任意一台namenode机器上通过jps命令查找到namenode的进程号,然后通过kill -9的方式杀掉进程,观察另一个namenode节点是否会从状态standby变成active状态,
b、命令行查看:
查看nn1
hdfs haadmin -getServiceState nn1 (或/opt/software/hadoop-2.6.0/bin/hdfs haadmin-getServiceState nn1)
查看nn2
hdfs haadmin -getServiceState nn2 (或/opt/software/hadoop-2.6.0/bin/hdfs haadmin-getServiceState nn2)
c、 查看浏览器:
查看浏览器的连接:http://ip地址:50070
Gn-M01节点:
Gn-M02节点:
1.3.6.2 启动验证resourcemanager的HA
(1) 单点启动resourcemanager
在resourcemanager节点(即namenode所在服务器或者管理节点Gn-M01、Gn-M02),所以在每个管理节点启动resourcemanager进程,启动命令如下所示:
yarn-daemon.shstart resourcemanager(或者/opt/software/hadoop-2.6.0/sbin/ yarn-daemon.shstart resourcemanager)
Gn-M01:
Gn-M02:
(2) 单点启动nodemanager
在nodemanager节点(即datanode所在服务器或者数据节点Gn-S01),所以在每个数据节点启动nodemanager进程,启动命令如下所示:
yarn-daemon.sh start nodemanager(或者/opt/software/hadoop-2.6.0/sbin/ yarn-daemon.sh start nodemanager)
(3) 测试验证resourcemanager的HA
可以在两台resourcemanager机器之间来回kill掉resourcemanager进程以检查RM的HA配置! 在任意一台resourcemanager机器上通过jps命令查找到resourcemanager的进程号,然后通过kill -9的方式杀掉进程,观察另一个resourcemanager节点是否会从状态standby变成active状态,3种方式查看:
A、命令行查看:
yarn rmadmin-getServiceState rm1 (或/opt/software/hadoop-2.6.0/bin/yarnrmadmin -getServiceState nn1)
查看nn2
yarn rmadmin -getServiceState rm2 (或/opt/software/hadoop-2.6.0/bin/yarn rmadmin-getServiceState nn2)
B、Web查看
浏览器地址栏输入IP:8088
1.3.6.3 启动、停止hadoop集群
注:等集群全部做完后,后期的启动、停止操作可用这种快捷的方式
启动hadoop集群,命令如下所示:
启动HDFS:
start-dfs.sh(或/opt/software/hadoop-2.6.0/bin/start-dfs.sh
注:在两个namenode节点(两个管理节点Gn-M01、Gn-M02)都执行
启动命令如下所示:
hadoop-daemon.shstart zkfc(或者/opt/software/hadoop-2.6.0/sbin/hadoop-daemon.sh start zkfc)
启动yarn:
start-yarn.sh(或/opt/software/hadoop-2.6.0/bin/start-yarn.sh
启动zkfc
停止hadoop集群,命令如下所示:
停止HDFS:
stop-dfs.sh(或/opt/software/hadoop-2.6.0/bin/stop-dfs.sh
停止yarn:
stop-yarn.sh(或/opt/software/hadoop-2.6.0/bin/stop-yarn.sh