Hadoop-HA集群搭建

一、基础准备工作

1、准备好5台Linux系统虚拟服务器或物理服务器

  我这里演示采用虚拟服务器搭建Hadoop-HA集群,各自功能分配如下:

  NameNode节点:vt-serv、vt-serv4

  DataNode节点:vt-serv1、vt-serv2、vt-serv3

  Journalnode节点:vt-serv1、vt-serv2、vt-serv3

  Zookeeper服务器:vt-serv1、vt-serv2、vt-serv3

  mysql数据库:vt-serv  

  Hive数据仓库:vt-serv4

注:这5台服务器已经配置好了JDK1.8、Zookeeper、mysql-5.6等必备工具及基本环境,这些基础配置以及Hive在这里不作介绍!

2、在每台服务器上创建共同的账号:hadoop ;以及工作组:bigdata

#添加工作组
$ groupadd bigdata
#添加用户到指定工作组
$ useradd -g bigdata hadoop

3、配置hadoop账户在服务器之间进行免密登录

① 在各服务器上生成密钥

#在hadoop用户下生成密钥
$ ssh-keygen -t rsa

② 将每一台服务器生成的密钥整合到同一台服务器(每一台服务器上执行)

#整合密钥
$ ssh-copy-id vt-serv

③ 将整合成功的密钥分发到其它几台服务器

#分发密钥
scp ~/.ssh/authorized_keys vt-serv1:~/.ssh/
scp ~/.ssh/authorized_keys vt-serv2:~/.ssh/
scp ~/.ssh/authorized_keys vt-serv3:~/.ssh/
scp ~/.ssh/authorized_keys vt-serv4:~/.ssh/

④ 修改authorized_keys权限(只允许自己可以读写,权限过大系统会拒绝远程登录;同样每一台服务器都执行)

#修改权限
$ chmod 500 ~/.ssh/authorized_keys

⑤ 测试远程登录(任意服务器之间进行登录操作验证,如果能直接登录到对方服务器就表示配置OK!)

#vt-serv上验证免密登录
$ ssh vt-serv4

二、HA高可用集群搭建

1、准备好hadoop安装包

我这是用的是hadoop-2.7.6.tar.gz 官网提供

2、创建hadoop工作目录

#创建目录
$ mkdir -p /opt/bigdata/HA
$ mkdir -p /opt/data/HA/

3、解压安装包

#解压包到工作目录
$ tar -zxf hadoop-2.7.6.tar.gz /opt/bigdata/

4、配置core-site.xml文件

####core-site.xml begin#####
<configuration>
<!-- 指定hadoop运行时临时目录位置 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/bigdata/HA/tmp</value>
</property>
<!-- 把两个NameNode)的地址组装成一个集群mycluster,需要和hdfs-site.xml一致 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<!-- Zookeeper集群 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>vt-serv1:2181,vt-serv2:2181,vt-serv3:2181</value>
</property>
</configuration>
####core-site.xml end#####

5、配置hdfs-site.xml文件

####hdfs-site.xml begin#####
<configuration>
<!-- 完全分布式集群名称 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!-- 集群中NameNode节点都有哪些 -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>vt-serv:9000</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>vt-serv4:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>vt-serv:50070</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>vt-serv4:50070</value>
</property>
<!-- 指定NameNode元数据在JournalNode上的存放位置(单数) -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://vt-serv1:8485;vt-serv2:8485;vt-serv3:8485/mycluster</value>
</property>
<!-- 声明journalnode服务器存储目录-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/data/HA/journal</value>
</property>
<!-- namenode文件路径 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/data/HA/name</value>
</property>
<!-- datanode文件路径 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/data/HA/data</value>
</property>
<!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- 使用隔离机制时需要ssh无秘钥登录-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!-- 关闭权限检查-->
<property>
<name>dfs.permissions.enable</name>
<value>false</value>
</property>
<!-- 开启故障自动转移 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 访问代理类:client,mycluster,active配置失败自动切换实现方式-->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
</configuration>
####hdfs-site.xml end#####

6、编辑slaves 加入数据节点服务器名

#编辑slaves文件
$ vi /opt/bigdata/HA/hadoop-2.7.6/etc/hadoop/slaves
#加入我的数据节点服务器名称
vt-serv1
vt-serv2
vt-serv3

7、将配置好的hadoop分发到各台服务器相同目录

#文件分发
$ scp -r /opt/bigdata/HA/hadoop-2.7.6/ vm-serv2:/opt/bigdata/HA/

8、启动JournalNode(我的JournalNode配置的分别是vt-serv1 、vt-serv2、vt-serv3三台服务器,分别去启动)

$ hadoop-daemon.sh start journalnode

9、在nn1格式化namenode

#格式化namenode这是关键的一步
$ hdfs namenode -format

10、在nn1启动namenode

$ hadoop-daemon.sh start namenode

11、在nn2同步namenode

$ hdfs namenode -bootstrapStandby

12、格式zookeeper zkfc数据(需要先保证Zookeeper是正常启动)

$ hdfs zkfc -formatZK

13、启动HDFS HA集群(在哪台namenode启动,则作为active)

$ start-dfs.sh

14、验证(停止 actived 那台服务器的 namenode)

$ hadoop-daemon.sh stop namenode

 正常情况下集群会把另一台namenode的standby状态自动切换为active状态 至此Hadoop-HA高可用集群配置完毕!

15、配置本地虚拟域名(路径:C:\Windows\System32\drivers\etc\hosts)加入自己的虚拟域名

#加入我的namenode服务器的虚拟域名
192.168.56.10 vt-serv
192.168.56.14 vt-serv4

 

16、访问http://vt-serv:50070

  Datanodes页面可以看到我的三台数据节点服务器已经加入服务

17、在Hadoop上创建目录

#创建目录
$ hdfs dfs -mkdir /tmp

  

18、附上我的Hadoop-HA集群启动脚本代码

 #!/bin/sh

 # 1.声明需要操作的服务器
zkservs=("vt-serv1" "vt-serv2" "vt-serv3")
hadoopServs=("vt-serv" "vt-serv1" "vt-serv2" "vt-serv3" "vt-serv4")
namenode="vt-serv" # 2.循环执行启动Zookeeper命令
echo -e "\033[34m ===============启动Zookeeper===============\033[0m"
for zkserv in ${zkservs[@]}
do
ssh $zkserv 'zkServer.sh start'
done # 3.检查Zookeeper状态
echo -e "\033[34m =============== 检查Zookeeper状态 ===============\033[0m"
for zkserv in ${zkservs[@]}
do
echo -e "\033[34m =============== ZK-$zkserv 状态 ===============\033[0m"
ssh $zkserv 'zkServer.sh status'
done # 4.启动start-dfs.sh
echo -e "\033[34m =============== 启动Hadoop-HA ===============\033[0m"
ssh $namenode 'start-dfs.sh' # 5.检查HDFS是否启动成功
echo -e "\033[34m =============== 检查Hadoop状态 ===============\033[0m"
for hdserv in ${hadoopServs[@]}
do
echo -e "===============Hadoop-$hdserv 进程 ==============="
ssh $hdserv 'jps'
done
# 6.Hadoop-HA集群启动完成
echo -e "\033[34m =============== Hadoop-HA集群启动完成 ===============\033[0m"

Hadoop-HA(高可用)集群搭建的更多相关文章

  1. Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)

    声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.服务器环境 主机名 IP 用户名 密码 安装目录 master188 192.168.29.188 hadoop hadoop /home/ha ...

  2. Hadoop HA高可用集群搭建(2.7.2)

    1.集群规划: 主机名        IP                安装的软件                            执行的进程 drguo1  192.168.80.149 j ...

  3. Zookeeper(四)Hadoop HA高可用集群搭建

    一.高可就集群搭建 1.集群规划 2.集群服务器准备 (1) 修改主机名(2) 修改 IP 地址(3) 添加主机名和 IP 映射(4) 同步服务器时间(5) 关闭防火墙(6) 配置免密登录(7) 安装 ...

  4. Hadoop HA 高可用集群搭建

    一.首先配置集群信息 vi /etc/hosts 二.安装zookeeper 1.解压至/usr/hadoop/下 .tar.gz -C /usr/hadoop/ 2.进入/usr/hadoop/zo ...

  5. Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建

    目录 目录 1.前言 1.1.什么是 Hadoop? 1.1.1.什么是 YARN? 1.2.什么是 Zookeeper? 1.3.什么是 Hbase? 1.4.什么是 Hive 1.5.什么是 Sp ...

  6. Hadoop HA 高可用集群的搭建

    hadoop部署服务器 系统 主机名 IP centos6.9 hadoop01 192.168.72.21 centos6.9 hadoop02 192.168.72.22 centos6.9 ha ...

  7. HDFS-HA高可用集群搭建

    HA高可用集群搭建 1.总体集群规划 在hadoop102.hadoop103和hadoop104三个节点上部署Zookeeper. hadoop102 hadoop103 hadoop104 Nam ...

  8. linux -- 基于zookeeper搭建yarn的HA高可用集群

    linux -- 基于zookeeper搭建yarn的HA高可用集群 实现方式:配置yarn-site.xml配置文件 <configuration> <property> & ...

  9. hadoop高可用集群搭建小结

    hadoop高可用集群搭建小结1.Zookeeper集群搭建2.格式化Zookeeper集群 (注:在Zookeeper集群建立hadoop-ha,amenode的元数据)3.开启Journalmno ...

  10. centos HA高可用集群 heartbeat搭建 heartbeat测试 主上停止heartbeat服务 测试脑裂 两边都禁用ping仲裁 第三十二节课

    centos   HA高可用集群  heartbeat搭建 heartbeat测试  主上停止heartbeat服务  测试脑裂  两边都禁用ping仲裁  第三十二节课 heartbeat是Linu ...

随机推荐

  1. Web Service入门

    [IT168 技术文档] 一.什么是Web Service?     Web Service是构建互联网分布式系统的基本部件.Web Services 正成为企业应用集成(Enterprise App ...

  2. HTML5 indexedDb 数据库

    indexedDb 数据库   上一节中,我们知道了,HMTL5中内置了两种本地数据库,一种是通过SQL语言来访问的文件型SQL数据库被称为“SQLLite,另一种是是被称为indexedDB 的数据 ...

  3. [NOI2010]能量采集 BZOJ2005 数学(反演)&&欧拉函数,分块除法

    题目描述 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得非常整齐,一共 ...

  4. springcloud微服务总结 zuul

    一 springcloud网关组件理解: 为什么需要网关呢? 我们知道我们要进入一个服务本身,很明显我们没有特别好的办法,直接输入IP地址+端口号,我们知道这样的做法很糟糕的,这样的做法大有问题,首先 ...

  5. luogu4931. 情侣?给我烧了!(加强版)(错位排列)

    题目链接 https://www.luogu.org/problemnew/show/P4931 题解 以下部分是我最开始的想法. 对于每一个 \(k\),满足恰好有 \(k\) 对情侣和睦的方案数为 ...

  6. POJ_3414 Pots 【复杂BFS】

    一.题面 You are given two pots, having the volume of A and B liters respectively. The following operati ...

  7. RPC 框架 应用

    RPC RPC(Remote Procedure Call)服务,也即远程过程调用,在互联网企业技术架构中占据了举足轻重的地位,尤其在当下微服务化逐步成为大中型分布式系统架构的主流背景下,RPC 更扮 ...

  8. C. Magic Ship (思维+二分)

    https://codeforces.com/contest/1117/problem/C 你是一个船长.最初你在点 (x1,y1) (显然,大海上的所有点都可以用平面直角坐标描述),你想去点 (x2 ...

  9. HDU - 2276 位运算矩阵快速幂

    挺有意思的一道题 要会运用一些常见的位运算操作进行优化 题目的本质就是要求下面的式子 \(dp[i][j+1]=(dp[i-1][j]+dp[i][j]) \mod 2\) (第\(i\)个字符在\( ...

  10. python学习11-类的成员(转载)

    一.变量 1.实例变量(又叫字段.属性) 创建对象时给对象赋值 形式: self.xxx = xxx 访问: 对象名.xxx     只能由对象访问 class Person: def __init_ ...