大数据配置hadoop HA (一)

大数据配置hadoop(一)

  • 搭建Hadoop的高可用模式
  • 准备3台虚拟机:master,slave1,slave2
  • 了解什么是高可用

什么的高可用

HA(High Available), 高可用,是保证业务连续性的有效解决方案, 通常通过设置备用节点的方式实现;
一般分为执行业务的称为活动节点(Active),和作为活动节点的一个备份的备用节点(Standby), 当活动节点出现问题, 导致正在运行的业务不能正常运行时, 备用节点此时就会侦测到, 并立即接替活动节点来执行业务, 从而实现业务的不中断或短暂中断.

NameNode HA
在 Active NN 和 Standby NN 之间设置一个共享的存储日志的地方, Active NN把 edit Log 写到这个共享的存储日志的地方, Standby NN 去读取日志然后执行,这样 Active 和 Standby NN 内存中的 HDFS 元数据保持着同步。一旦发生主从切换 Standby NN 可以尽快接管 Active NN 的工作
hadoop2.x 之后, Clouera 提出了 QJM/Qurom Journal Manager,这是一个基于 Paxos 算法(分布式一致性算法) 实现的 HDFS HA 方案,它给出了一种较好的解决思路和方案,QJM 主要优势如下:
不需要配置额外的高共享存储,降低了复杂度和维护成本。
消除 spof(单点故障)。
系统鲁棒性(Robust)的程度可配置、可扩展。
基本原理就是用 2N+1 台 JournalNode 存储 EditLog,每次写数据操作有>=N+1返回成功时即认为该次写成功,数据不会丢失了。

关闭防火墙

sudo systemectl stop firewalld 临时关闭
sudo systemectl disable firewalld 禁止防火墙自启
reboot 重启虚拟机
sudo systemctl staus firewalld 查看防火墙状态

在这里插入图片描述
获取ip地址

  1. 必须将每台的ip地址写入hosts文件,设置为静态ip地址
  2. 在每台输入命令ip a 找到虚拟机ip地址
    将三台ip 输入/etc/hosts
    (注:先将文件清空,否则hdfs开启时,会找不到主机)
    在这里插入图片描述
    3.设置主机名
vim /etc/hosts 打开hosts

在这里插入图片描述

主机ip 主机名1
主机ip 主机名2
主机ip 主机名3
(注:主机ip对应的主机名)

配置SSH为免密码登录

  1. 先下在ssh的压缩包。
yum install openssh*
  1. 修改配置文件
 vim/etc/ssh/sshd_comfig 打开文件

在这里插入图片描述
将上图的PermitRootLogin,RSAAuthentication,PubkeyAuthentication的设置打开。
3. 启动ssh的服务:

 systemctl start sshd.service 启动
 sercvice sshd restart 重启

(注:每台虚拟机都要实行123步骤!)
4. 配置免密码登录

ssh-keygen -t rsa (私钥变公钥)
需要将每台机器的公钥复制到每台机器(下面命令,需要在每台机器上执行)
ssh-copy-id -i ~/.ssh/id_rsa.pub root@主机名1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@主机名2
ssh-copy-id -i ~/.ssh/id_rsa.pub root@主机名3
测试是否连接成功
ssh 主机名1
ssh 主机名2
ssh 主机名3

连接xshell和xftp将hadoop、JDK、Zookeeper导入到 主机名1 /home/中

** 解压haoop、jdk、zookeeper**

tar zxf hadoop-2.8.5.tar.gz -C /usr/local/src
tar zxf jdk-8u231-linux-x64.tar.gz -C /usr/local/src
tar zxf zookeeper-1.2.4.tar.gz -C /usr/local/src

重命名 hadoop 、jdk 、zookeeper
mv hadoop-2.8.5/ hadoop
mv jdk1.8.0_231/ java
mv zookeeper-1.2.4 /zookeeper

配置环境变量

vim /etc/profile 打开配置文件
PATH=$PATH:$HOME/bin
export HADOOP_HOME=/usr/local/src/hadoop
export SPARK_HOME=/usr/local/src/spark
export JAVA_HOME=/usr/local/src/jdk
export ZOOKEEPER_HOME=/usr/local/src/zookeeper
export PATH=$HADOOP_HOME/bin:$PATH
export PATH=$HADOOP_HOME/sbin:$PATH
export PATH=$SPARK_HOME/bin:$PATH
export PATH=$JAVA_HOME/bin:$PATH
export PATH=$ZOOKEEPER_HOME/bin:$PATH

在这里插入图片描述
更新环境

source /etc/profile

验证

hdfs 
zkServer.sh
java -version

在这里插入图片描述
配置 Zookeepr

 cd /usr/local/src/zookeeper/conf/
 cp zoo_sample.cfg zoo.cfg
 vim zoo.cfg

在这里插入图片描述
配置hadoop文件

cd /usr/local/src/hadoop/etc/hadoop 移动到这个目录下
  • hadoop-env.sh (vim hadoop-env.sh)
export JAVA_HOME=/usr/local/src/java

在这里插入图片描述

  • hdfs-site.xml (vim hdfs-site.xml)
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
<!--指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ns</value>
</property>
<!-- ns(逻辑名)下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns.nn1</name>
<value>bigdata1:8020</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns.nn1</name>
<value>bigdata1:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns.nn2</name>
<value>bigdata2:8020</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns.nn2</name>
<value>bigdata2:50070</value>
</property>
<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://bigdata1:8485;bigdata2:8485;bigdata3:8485/ns</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/src/hadoop/journaldata</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence
shell(/bin/true)</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>

在这里插入图片描述

  • core-site.xml (vim core-site.xml)
<configuration>
<!-- 指定hdfs的nameservice为ns-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns</value>
</property>
<!--指定hadoop数据临时存放目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/src/hadoop/data</value>
</property>
<!--指定zookeeper地址-->
<property>
<name>ha.zookeeper.quorum</name>
<value>bigdata1:2181,bigdata2:2181,bigdata3:2181</value>
</property>
</configuration>
  • mapred-site.xml (vim mapred-site.xml)
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>bigdata1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>bigdata1:19888</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/usr/local/src/hadoop/mr-history/tmp</value>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/usr/local/src/hadoop/mr-history/done</value>
</property>
</configuration>
  • yarn-site.xml (vim yarn-site.xml)
<configuration>
<!-- 开启RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</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>master</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>salve1</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>master:2181,salve1:2181,salve2:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
  • slave:配置所有的从节点的主机名 (vim slave)

    主机名2
    主机名3

复制Hadoop、Zookeeper、JDK、profile

cd /usr/local/src/
scp -r hadoop/ zookeeper/ jdk/ 主机名2:/usr/local/src/
scp -r hadoop/ zookeeper/ jdk/ 主机名1:/usr/local/src/
scp /etc/profile 主机名2:/etc/
scp /etc/profile 主机名1:/etc/

配置Zookeeper的myid

[root@主机名1 src]# mkdir zookeeper/data
[root@主机名1 src]# echo 1 > zookeeper/data/myid
[root@主机名1src]# ssh bigdata2
Last login: Sat Nov 2 13:58:05 2019 from 192.168.2.119
[root@主机名2 ~]# cd /usr/local/src/
[root@主机名2 src]# mkdir zookeeper/data
[root@主机名2src]# echo 2 > zookeeper/data/myid
[root@主机名2 src]# ssh bigdata3
Last login: Sat Nov 2 13:46:38 2019 from 192.168.2.119
[root@主机名3 ~]# cd /usr/local/src/
[root@主机名3 src]# mkdir zookeeper/data
[root@主机名3 src]# echo 3 > zookeeper/data/myid
[root@主机名3 src]# 登出
Connection to slave2 closed.
[root@bigdata2 src]# 登出
Connection to slave1 closed.

启动Zookeeper

[root@主机名1 src]# zkServer.sh start
JMX enabled by default
Using config: /usr/local/src/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@主机名1 src]# ssh bigdata2
Last login: Sat Nov 2 14:31:36 2019 from master
 [root@主机名2~]# zkServer.sh start
JMX enabled by default
Using config: /usr/local/src/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@主机名2 ~]# ssh bigdata3
Last login: Sat Nov 2 14:32:40 2019 from slave1
[root@主机名2 ~]# zkServer.sh start
JMX enabled by default
Using config: /usr/local/src/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@主机名3 ~]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/src/zookeeper/bin/../conf/zoo.cfg
Mode: follower
[root@主机名3 ~]# 登出
Connection to slave2 closed.
[root@bigdata3 ~]# 登出
Connection to slave1 closed.
[root@bigdata1 src]#

启动所有的journalnode

每一个机子输入

hadoop-daemon.sh start journalnode

和上面的操作一样

格式化并启动两个namenode
主机一

hdfs namenode -format
hadoop-daemon.sh start namenode

主机二

hdfs namenode -bootstrapStandby
hadoop-daemon.sh start namenode

格式化ZKFC(在主NameNode)格式化主机一

hdfs zkfc -formatZK

** 启动集群的HDFS和YARN(在主NameNode),并查看jps进程**

start-dfs.sh
 start-yarn.sh

查结果

[root@主机一~]# jps
17408 JournalNode
18545 Jps
17526 NameNode
10410 QuorumPeerMain
18060 DFSZKFailoverController
18156 ResourceManager
18268 NodeManager
17789 DataNode

到这里 hadoop ha 已经配置完成,如果有不足的地方,请提出建议我会改正。谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值