Hadoop-HA集群安装部署

HA高可用集群安装部署

1 运行环境

1.1 软件环境

三个节点及以上
OS:64位RHEL5及以上或者64位CentOS7.0及以上
JVM:预装64位JDK 1.8及以上版本

1.2 浏览器要求

Firefox 39.0.0版本及以上或者Google Chrome 54.0.2840.8版本及以上。

2 安装准备

2.1 准备虚拟机

准备三个节点的虚拟机

2.2 修改主机名

在各个节点执行以下操作来修改主机名,使集群下的主机有格式一个统一的主机名,以便后续的操作和维护。
修改主机名(便于后续操作)

hostnamectl set-hostname ‘ha001’
hostnamectl set-hostname ‘ha002’
hostnamectl set-hostname ‘ha003’

修改玩后重启生效
Hadoop-HA集群安装部署_第1张图片

192.168.20.111 ha001 作为namenode的active节点
192.168.20.112 ha002 作为namenode的standby节点
192.168.20.113 ha003 作为datanode节点

修改host映射

vi /etc/hosts

添加集群映射

192.168.20.111 ha001
192.168.20.112 ha002
192.168.20.113 ha003

Hadoop-HA集群安装部署_第2张图片

2.3 关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

2.4 配置时间同步

yum –y install ntpdate

ntpdate pool.ntp.org

Hadoop-HA集群安装部署_第3张图片

2.5 配置免密登录

先删除原来配置的免密(三台)

rm -rf /root/.ssh

重新配置免密登录

ssh-keygen

ssh-copy-id ha001

ssh-copy-id ha002

ssh-copy-id ha003

记得给自己和其它两台都要同时发

2.6 安装JDK

参照本专栏前面的Hadoop详细集群搭建一文(记得配置环境变量)

3 安装其它组件

3.1 安装Zookeeper

参照本专栏前面的Zookeeper实战技能一文
之前已经安装的记得修改/usr/local/zookeeper-3.4.6/conf/下的zoo.cfg文件:
(因为主机名修改,映射也要修改)
Hadoop-HA集群安装部署_第4张图片

然后启动Zookeeper
在ha001、ha002、ha003下都要执行

cd /usr/local/zookeeper-3.4.6/

bin/zkServer.sh start

bin/zkServer.sh status

Hadoop-HA集群安装部署_第5张图片
出现lead,fllower,fllower为正常
注意:先把Hadoop集群正常模式配置一遍,先正常启动后,在
去配制高可用

3.2 安装高可用Hadoop

Hadoop部分的配置分为两部分HDFS和YARN

3.2.1 HDFS

1.修改配置文件
修改core-site.xml

vi core-site.xml

修改为以下内容:

<configuration>
<!-- 指定hdfs的nameservice为beh -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://beh
    <final>false</final>
  </property>
<!-- 指定hadoop临时目录 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/local/hadoop-2.7.3/tmp</value>
    <final>false</final>
  </property>
<!-- 指定zookeeper地址 -->
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>ha001:2181,ha002:2181,ha003:2181</value>
    <final>false</final>
  </property>
</configuration>

修改hdfs-site.xml

vi hdfs-site.xml

修改为以下内容:

<configuration>
<!--指定hdfs的nameservice为beh,需要和core-site.xml中的保持一致 -->
  <property>
    <name>dfs.nameservices</name>
    <value>beh</value>
    <final>false</final>
  </property>
<!-- beh下面有两个NameNode,分别是nn1,nn2 -->
  <property>
    <name>dfs.ha.namenodes.beh</name>
    <value>nn1,nn2</value>
    <final>false</final>
  </property>
<!-- nn1的RPC通信地址 -->
  <property>
    <name>dfs.namenode.rpc-address.beh.nn1</name>
    <value>ha001:9000</value>
    <final>false</final>
  </property>
<!-- nn1的http通信地址 -->
  <property>
    <name>dfs.namenode.http-address.beh.nn1</name>
    <value>ha001:50070</value>
    <final>false</final>
  </property>
<!-- nn2的RPC通信地址 -->
  <property>
    <name>dfs.namenode.rpc-address.beh.nn2</name>
    <value>ha002:9000</value>
    <final>false</final>
  </property>
<!-- nn2的http通信地址 -->
  <property>
    <name>dfs.namenode.http-address.beh.nn2</name>
    <value>ha002:50070</value>
    <final>false</final>
  </property>
  <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
    <name>dfs.namenode.shared.edits.dir</name>   <value>qjournal://ha001:8485;ha002:8485;ha003:8485/beh
    <final>false</final>
  </property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/usr/local/hadoop-2.7.3/journalData</value>
    <final>false</final>
  </property>
<!-- 开启NameNode失败自动切换 -->
  <property>
    <name>dfs.ha.automatic-failover.enabled.beh</name>
    <value>true</value>
    <final>false</final>
  </property>
<!-- 配置失败自动切换实现方式 -->
  <property>    <name>dfs.client.failover.proxy.provider.beh</name>  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    <final>false</final>
  </property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence
shell(/bin/true)
</value>
    <final>false</final>
  </property>
<!-- 获取私钥 -->
  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/usr/local/.ssh/id_rsa</value>
    <final>true</final>
  </property>
<!-- 指定副本数-->
  <property>
    <name>dfs.replication</name>
    <value>3</value>
    <final>false</final>
  </property>
<configuration>

修改slaves

vi slaves

修改为以下内容:

ha003

3.2.2 YARN

修改mapred-site.xml

vi mapred-site.xml

修改为以下内容:

<configuration>
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
</configuration>

修改yarn-site.xml

vi yarn-site.xml

修改为以下内容:

<!-- ha003作为nodemanger -->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

<!-- 开启RM高可用 -->
<property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
</property>

<!-- 开启RM失败自动切换 -->
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>

<!-- 指定RM的cluster id -->
<property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>beh</value>
</property>

<!-- 指定RM的名字 -->
<property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
</property>

 <!-- 分别指定RM的地址 -->
<property>
  <name>yarn.resourcemanager.hostname.rm1</name>
  <value>ha001</value>
</property>
<property>
  <name>yarn.resourcemanager.hostname.rm2</name>
 <value>ha002</value>
</property>

<property>       
<name>yarn.resourcemanager.webapp.address.rm1</name>
 <value>ha001:8088</value>
</property>
<property>        
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>ha002:8088</value>
</property>

<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>ha001:2181,ha002:2181,ha003:2181</value>
</property>

修改环境变量

vi hadoop-env.sh

vi yarn-env.sh

修改为以下内容:

export JAVA_HOME=/usr/local/jdk1.8.0_102

3.2.3 分发配置文件

scp -r /usr/local/hadoop-2.7.3 ha002:/usr/local

scp -r /usr/local/hadoop-2.7.3 ha003:/usr/local

注:将以上配置复制到所有节点

3.2.4启动HDFS

第一步:删除原来的元数据跟真实数据(在三台同时进行)

rm -rf /usr/local/hadoop-2.7.3/data

Hadoop-HA集群安装部署_第6张图片

第二步:zookeeper重新启动(ha001、ha002、ha003三台全操作)

cd /usr/local/zookeeper-3.4.6/
bin/zkServer.sh start
bin/zkServer.sh status

出现leader,fllower,fllower为正常

第三部:主节点上启动整个集群 (只在 ha001操作)

start-all.sh

第四步:先启动QJM,(ha001、ha002、ha003三台全操作)

hadoop-daemon.sh start journalnode

Hadoop-HA集群安装部署_第7张图片

第五步:格式化zookeeper,在ha01上执行(只执行一次)

hdfs zkfc -formatZK

Hadoop-HA集群安装部署_第8张图片

第六步:对ha01节点进行格式化和启动启动namenode(进程名:NameNode)

hdfs namenode -format (只执行一次)
hadoop-daemon.sh start namenode

Hadoop-HA集群安装部署_第9张图片
Hadoop-HA集群安装部署_第10张图片

第七步:对ha02节点进行格式化和启动

hdfs namenode -bootstrapStandby (只执行一次)
hadoop-daemon.sh start namenode

Hadoop-HA集群安装部署_第11张图片

第八步:启动zookeeper的监控节点(再01和02上执行)

hadoop-daemon.sh start zkfc

Hadoop-HA集群安装部署_第12张图片
Hadoop-HA集群安装部署_第13张图片

第九步:启动datanode (在ha03启动)

hadoop-daemon.sh start datanode

Hadoop-HA集群安装部署_第14张图片
最后去验证HDFS高可用集群:
打开浏览器,访问 ha001:50070 以及 ha002:50070,你将会看到两个namenode一个是active而另一个是standby
然后kill掉其中active的namenode进程,另一个standby的naemnode将会自动转换为active状态
192.168.20.111:50070
Hadoop-HA集群安装部署_第15张图片
192.168.20.112:50070
Hadoop-HA集群安装部署_第16张图片
然后我们把active状态的ha001结束,看它是否自动用ha002顶替位置
Hadoop-HA集群安装部署_第17张图片
ha001宕机!!!
Hadoop-HA集群安装部署_第18张图片
但ha002成功上位,变为active!!!
Hadoop-HA集群安装部署_第19张图片
此时说明高可用集群搭建成功!!!

文末附上该高可用集群的启动命令与停止命令(也可以根据这些命令整合编写一脚本):

启动高可用集群
zkServer.sh start (ha001、ha002、ha003执行)
hadoop-daemon.sh start journalnode (ha001、ha002、ha003执行)
hadoop-daemon.sh start namenode (ha001、ha002执行)
hadoop-daemon.sh start zkfc (ha001、ha002执行)
hadoop-daemon.sh start datanode (ha003执行)
start-yarn.sh (ha001执行)
yarn-daemon.sh start resourcemanager (ha002执行)

停止高可用集群
zkServer.sh stop (ha001、ha002、ha003执行)
hadoop-daemon.sh stop journalnode (ha001、ha002、ha003执行)
hadoop-daemon.sh stop namenode (ha001、ha002执行)
hadoop-daemon.sh stop zkfc (ha001、ha002执行)
hadoop-daemon.sh stop datanode (ha003执行)

你可能感兴趣的:(#,大数据Hadoop--HDFS,大数据,hdfs,hadoop,big,data)