阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hadoop HA(高可用)环境的搭建

408次阅读
没有评论

共计 8794 个字符,预计需要花费 22 分钟才能阅读完成。

集群布局:

Hadoop HA(高可用)环境的搭建

集群描述:

集群中有两个 NameNode, 两个 ResourceManager。实现了 NameNode 的 HA 方案以及 ResourceManager 单点故障的解决。

Hadoop 的 HA 介绍:

hadoop2 中的 NameNode 有两个。每一个都有相同的职能。一个是 active 状态的,一个是 standby 状态的。当集群运行时,只有 active 状态的 NameNode 是正常工作的,standby 状态的 NameNode 是处于待命状态的,时刻同步 active 状态 NameNode 的数据。一旦 active 状态的 NameNode 不能工作,通过手工或者自动切换,standby 状态的 NameNode 就可以转变为 active 状态的,就可以继续工作了。这就是高可靠。

Linux 环境准备:

VMware Workstation 12 PRO 上 CentOS 7 Minimal 版安装配置  http://www.linuxidc.com/Linux/2017-03/141646.htm

网络配置:使用桥接方式

1. 设置固定 IP 地址和关闭防火墙

虚拟机中必须添加如下配置:(必须和宿主机在同一网段)

 在 vmware 的【编辑】-->【虚拟网络编辑器】设置:将网络连接方式设置为“桥接”, 并桥接到宿主机器的网卡(可以是有线或者无线网络 )。

设置静态 IP 地址:

vi /etc/sysconfig/network-scripts/ifcfg-eno16777736  
("eno16777736" 这部分名字在不同版本中可能不一样)

修改(添加)如下内容:

BOOTPROTO="static"#dhcp 改为 static   
ONBOOT="yes"# 开机启用本配置  
IPADDR=192.168.1.181# 静态 IP  
GATEWAY=192.168.1.1   #默认网关  
NETMASK=255.255.255.0  #子网掩码  
DNS1=192.168.1.1#DNS 配置  

总体示例:

cat /etc/sysconfig/network-scripts/ifcfg-eno16777736 
HWADDR="00:15:5D:07:F1:02"  
TYPE="Ethernet"  
BOOTPROTO="static" #dhcp 改为 static   
DEFROUTE="yes"  
PEERDNS="yes"  
PEERROUTES="yes"  
IPV4_FAILURE_FATAL="no"  
IPV6INIT="yes"  
IPV6_AUTOCONF="yes"  
IPV6_DEFROUTE="yes"  
IPV6_PEERDNS="yes"  
IPV6_PEERROUTES="yes"  
IPV6_FAILURE_FATAL="no"  
NAME="eth0"  
UUID="bb3a302d-dc46-461a-881e-d46cafd0eb71"  
ONBOOT="yes"  #开机启用本配置  
IPADDR=192.168.1.181    #静态 IP  
GATEWAY=192.168.1.1     #默认网关  
NETMASK=255.255.255.0   #子网掩码  
DNS1=192.168.1.1        #DNS 配置  

修改每台主机的主机名:

vi /etc/sysconfig/network

添加如下内容:

HOSTNAME=master01   //master02,master03........

设置 IP 绑定:

vi  /etc/hosts
master01  192.168.1.181 
master02  192.168.1.182 
master03  192.168.1.186 
master04  192.168.1.187 
slave01   192.168.1.183 
slave02   192.168.1.184  
slave03   192.168.1.185

重启网卡:

service network restart 

centos7 中 mini 安装的防火墙默认为 firewalld:

systemctl stop firewalld
systemctl mask firewalld

安装 iptables-services 并关闭防火墙:

yum install iptables-services
service iptables stop
chkconfig iptables off   #关闭防火墙开机启动
service ip6tables stop
chkconfig ip6tables off

关闭 selinux:

vi /etc/sysconfig/selinux
SELINUX=enforcing -> SELINUX=disabled
setenforce 0
getenforce

2. 添加 hadoop 用户

添加用户组:

root 登录条件下:groupadd hadoop

添加用户并分配用户组:

useradd -g hadoop hadoop

修改密码:

passwd hadoop

3. SSH 开机免密码登录:

安装 ssh:

yum intsall openssh-server

首先是 root 用户免密码登录:

root 用户登陆后在每台主机上面使用命令:

 ssh-keygen -t rsa
 cd /root/.ssh/ 

里面有两个文件:

id_rsa.pub    id_rsa

在 master01 主机上面:

mv id_rsa.pub authorized_keys

然后把所有主机里面的 id_rsa.pub 内容全部保存到这个 authorized_keys 后把 authorized_keys 复制到各个节点上。

Hadoop 用户 ssh 免密码登录同 root 用户:

 注意:这时 id_rsa.pub id_rsa 的目录为你 hadoop 用户下的.ssh 目录

4. 安装所需的软件

所用的软件环境配置示例:

export JAVA_HOME=/usr/local/software/jdk1.8.0_66
export HADOOP_HOME=/usr/local/software/hadoop-2.7.0
export ZOOKEEPER_HOME=/usr/local/software/zookeeper-3.4.6/bin
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin

然后使环境配置生效:

source /etc/profile

5. Hadoop HA 实现

Hadoop HA 配置文件:// 总共 5 个:

hadoop-env.sh 
core-site.xml 
hdfs-site.xml 
mapred-site.xml 
yarn-site.xml

hadoop-env.sh:

export JAVA_HOME=/usr/local/software/jdk1.8.0_66

core-site.xml:

<property>
  <name>fs.defaultFS</name>
  <value>hdfs://cluster</value>
</property>
<property>
  <name>hadoop.tmp.dir</name>
  <value>/usr/local/software/hadoop-2.7.0/tmp</value>
</property>
<property>
  <name>ha.zookeeper.quorum</name  <value>slave01:2181,slave02:2181,slave03:2181</value>
</property>

hdfs-site.xml

    <property>
            <name>dfs.nameservices</name>
            <value>cluster</value>
    </property>
    <property>
            <name>dfs.ha.namenodes.cluster</name>
            <value>nn1,nn2</value>
    </property>
    <property>
            <name>dfs.namenode.rpc-address.cluster.nn1</name>
            <value>master01:9000</value>
    </property>
    <property>
            <name>dfs.namenode.http-address.cluster.nn1</name>
            <value>master01:50070</value>
    </property>
    <property>
            <name>dfs.namenode.rpc-address.cluster.nn2</name>
            <value>master02:9000</value>
    </property>
    <property>
            <name>dfs.namenode.http-address.cluster.nn2</name>
            <value>master02:50070</value>
    </property>
    <property>
            <name>dfs.namenode.shared.edits.dir</name>
            <value>qjournal://slave01:8485;slave02:8485;slave03:8485/cluster</value>
    </property>
    <property>
            <name>dfs.journalnode.edits.dir</name>
            <value>/usr/local/software/hadoop-2.7.0/journal</value>
    </property>
    <property>
            <name>dfs.ha.automatic-failover.enabled</name>
            <value>true</value>
    </property>
    <property>
            <name>dfs.client.failover.proxy.provider.cluster</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>
    <property>
            <name>dfs.ha.fencing.ssh.connect-timeout</name>
            <value>30000</value>
    </property>
    <property>
            <name>dfs.ha.fencing.ssh.private-key-files</name>
            <value>/home/hadoop/.ssh/id_rsa</value>
    </property>
    <property>
            <name>dfs.replication</name>
            <value>2</value>
    </property>

mapred-site.xml

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

yarn-site.xml

    <property>
           <name>yarn.resourcemanager.ha.enabled</name>
            <value>true</value>
    </property>
    <property>
            <name>yarn.resourcemanager.cluster-id</name>
            <value>rm-cluster</value>
    </property>
    <property>
            <name>yarn.resourcemanager.ha.rm-ids</name>
            <value>rm1,rm2</value>
    </property>
    <property>
            <name>yarn.resourcemanager.hostname.rm1</name>
            <value>master01</value>
    </property>
    <property>
            <name>yarn.resourcemanager.hostname.rm2</name>
            <value>master02</value>
    </property>
    <property>
            <name>yarn.resourcemanager.recovery.enabled</name>
            <value>true</value>
    </property>
    <property>
            <name>yarn.resourcemanager.store.class</name>
            <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>
     <property>
            <name>yarn.resourcemanager.zk-address</name>
            <value>slave01:2181,slave02:2181,slave03:2181</value>
    </property>
    <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
    </property>

6. Zookeeper 集群配置 // slave01 slave02 slave0

vi /usr/local/software/zookeeper-3.4.6/conf/zoo.cfg

修改 dataDir=/usr/local/zk/data
在文件最后新增:

server.1=slave01:2888:3888
server.2=slave02:2888:3888
server.3=slave03:2888:3888

创建文件夹

mkdir /usr/local/software/zookeeper-3.4.6/zk/data

在 data 目录下,创建文件 myid,值为 1; 相应的在 slave02 和 slave03 上面创建文件 myid, 值为 2、3

7. 开始启动

启动 zookeeper

   bin/zkServer.sh start
   bin/zkServer.sh status   查看状态 (至少两个 zookeeper 实例开启后才可以查看状态)

首次启动顺序 (zookeeper 集群先启动)
启动 journalnode:

hadoop-daemon.sh start journalnode //slave01,slave02,slave03

格式化 NameNode:

hdfs namenode -format

拷贝格式化后的 namenode 状态:

scp -r tmp/   hadoop@master02:/usr/local/hadoop-2.6.0/  // 从 master01 拷贝 tmp 到 master02 

格式化 zookeeper:

hdfs zkfc -formatZK

启动 HDFS:

sbin/start-dfs.sh

启动 Yarn:

sbin/start-yarn.sh   //master01

启动 master02 主机上的 ResourceManager:

yarn-daemon.sh start resourcemanager//master02
sbin/start-dfs.sh
sbin/start-yarn.sh   //master01
yarn-daemon.sh start resourcemanager//master02

8. 启动后效果:

启动后 master02 是 active 状态

Hadoop HA(高可用)环境的搭建

master01 是 standby 状态。

Hadoop HA(高可用)环境的搭建

当 kill 掉 master02 进程后,master01 会自动变成 active 状态,从而保证集群的高可用性。

Hadoop HA(高可用)环境的搭建

同时 master03 上面的 ResourceManager 为 active 状态:

Hadoop HA(高可用)环境的搭建

当浏览 master04 上面 ResourceManager 时显示信息为:

“This is standby RM,Redirecting to the current active RM:http://master03:8088/”

Hadoop HA(高可用)环境的搭建

9. 为了方便集群管理,编写脚本控制:

启动脚本:

for i in slave01 slave02 slave03
do
ssh $i "/usr/local/software/zookeeper-3.4.6/bin/zkServer.sh start"
done
start-dfs.sh
ssh master03 "/usr/local/software/hadoop-2.7.0/sbin/start-yarn.sh"
ssh master04 "/usr/local/software/hadoop-2.7.0/sbin/yarn-daemon.sh start resourcemanager"

启动时日志:

Hadoop HA(高可用)环境的搭建

查看集群是否正常启动的脚本:

for i in master01 master02 master03 master04 slave01 slave02 slave03
do
ssh $i "hostname;source /etc/profile;jps"
done

Hadoop HA(高可用)环境的搭建

停止脚本:
[hadoop@master01 ~]$ cat stop

ssh master03 "/usr/local/software/hadoop-2.7.0/sbin/stop-yarn.sh"
stop-dfs.sh
for i in slave01 slave02 slave03
do
ssh $i "/usr/local/software/zookeeper-3.4.6/bin/zkServer.sh stop"
done

Hadoop HA(高可用)环境的搭建

10. 安装过程中一些其他的操作:

shell 操作:主机间文件传输示例

for i in master02 slave01 slave02 slave03
do
 scp -rq software hadoop@$i:/usr/local/software/
done

for i in master02 slave01 slave02 slave03
do
 ssh $i  "source /etc/profile"
done

11. 注意事项:

1. hadoop 用户生成的秘钥在 /home/hadoop/.ssh 目录中,其他用户以此类推。
2. 问题:zookeeper 在 linux 服务器上,通过 java 代码来控制启动与停止。发现能控制停止,不能控制启动。

解决:

JAVA_HOME=/usr/local/java/jdk1.7.0_76
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH

3:采用 shell 脚本启动 zookeeper,首先新建文件 start.sh
写入内容(rh1 rh2 rh3 分别是主机名。此处需要 ssh):

#!/bin/sh
echo“start zkServer…”for i in rh1 rh2 rh3
do
ssh $i“/usr/local/zookeeper3.4/bin/zkServer.sh start”done

写好后保存,加上执行权限:chmod u+x start.sh
运行:./start.sh 看见启动成功了,有输出。但是输入 jps 查看的时候,会发现没有 QuorumPeerMain 进程。说明没有启动成功。

原因:

首先知道交互式 shell 和非交互式 shell、登录 shell 和非登录 shell 是有区别的
在登录 shell 里,环境信息需要读取 /etc/profile 和~ /.bash_profile, ~/.bash_login, and ~/.profile 按顺序最先的一个,并执行其中的命令。除非被 —noprofile 选项禁止了;在非登录 shell 里,环境信息只读取 /etc/bash.bashrc 和~/.bashrc
手工执行是属于登陆 shell,脚本执行数据非登陆 shell,而我的 Linux 环境配置中只对 /etc/profile 进行了 jdk1.6 等环境的配
置,所以脚本执行 /usr/local/zookeeper3.4/bin/zkServer.sh start 启动 zookeeper 失败了

解决方法:

把 profile 的配置信息 echo 到.bashrc 中 echo‘source /etc/profile’>~/.bashrc
在 /zookeeper/bin/zkEnv.sh 的中开始位置添加 export JAVA_HOME=/usr/local/jdk1.6(就像 hadoop 中对 hadoop-env.sh 的配置一样)
采用 shell 脚本启动 zookeeper,首先新建文件 start.sh
写入内容(rh1 rh2 rh3 分别是主机名。此处需要 ssh):#!/bin/sh
echo“start zkServer 就可以了。

总结的解决方法(下面 3 个方法任选 1):

1、脚本代码中添加“source /etc/profile;”改为:ssh crxy$i“source /etc/profile;/usr/local/zookeeper/bin/zkServer.sh start”

2、把 profile 的配置信息 echo 到.bashrc 中 echo‘source /etc/profile’>~/.bashrc

3、在 /zookeeper/bin/zkEnv.sh 的中开始位置添加 export JAVA_HOME=/usr/local/jdk1.7.0_45(就像 hadoop 中对 hadoop-env.sh 的配置一样)

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-03/141650.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计8794字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
8000215
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
飞牛NAS玩转Frpc并且配置,随时随地直连你的私有云

飞牛NAS玩转Frpc并且配置,随时随地直连你的私有云

飞牛 NAS 玩转 Frpc 并且配置,随时随地直连你的私有云 大家好,我是星哥,最近在玩飞牛 NAS。 在数...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025年11月28日-Cloudflare史诗级事故:一次配置失误,引爆全球宕机

2025 年 11 月 28 日 -Cloudflare 史诗级事故: 一次配置失误,引爆全球宕机 前言 继今...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...