大数据 - hadoop - HDFS+Zookeeper实现高可用
高可用(Hign Availability,HA)
一、概念
作用:用于解决负载均衡和故障转移(Failover)问题。
问题描述:一个NameNode挂掉,如何启动另一个NameNode。怎样让两个NameNode数据同步。
实现原理:
在另一台服务器上有一个相同的NameNode节点,这台服务器上的 NameNode的状态为standBy。正在运行的NameNode的状态为Active。
解决两个NameNode信息同步问题:因为如果一个NameNode挂掉,另一个NameNode的editlog和fsimage不一定能实时同步,会造成路径信息丢失,也就造成了文件丢失。那现在的同步方式为:NameNode(Active)会实时的把editlog和fsimage保存到JournalNode节点中,也就是对应的服务器磁盘中,NameNode(standBy),从JournalNode节点中取出editlog和fsimage,进行同步。
解决一台服务器NameNode挂机,另一台服务器NameNode启动问题:这两个NameNode需要把自己的状态,都同步到zookeeper上,由zookeeper调配,解决脑裂问题。NameNode和Zookeeper的通信,是通过ZKFC服务进行的。其中healthMonitor是用于实时监控NameNode状态的线程,stateController是用于接受zookeeper命令,改变 NameNode状态的线程,让active状态的NameNode获取znode锁。
DataNode的运行过程中。所有的DataNode都会向两个NameNode汇报自己的状态信息。
二、配置部署
1、在mudole文件夹下创建目录HA
mkdir HA
2、把hadoop-2.7.2往HA中拷贝一份。
cp -r hadoop-2.7.2/ HA/
3、修改core-site.xml文件
<configuration>
<!-- 把两个NameNode的地址组装成一个集群mycluster -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/admin/modules/HA/hadoop-2.7.2/hadoop-data</value>
</property>
<!--配置journalnode服务器存储目录-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/admin/modules/HA/hadoop-2.7.2/jn/mycluster</value>
</property>
</configuration>
4、修改hdfs-site.xml
<configuration>
<!-- 完全分布式集群名称(必须和core-size.xml中mycluster一样) -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!-- 集群中NameNode节点都有哪些 ,nn1\nn2是两个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>linux01:8020</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>linux02:8020</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>linux01:50070</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>linux02:50070</value>
</property>
<!-- 指定NameNode元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://linux01:8485;linux02:8485;linux03:8485/mycluster</value>
</property>
<!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 ,防止脑裂-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用隔离机制时需要ssh无秘钥登录-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/atguigu/.ssh/id_rsa</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>
<!-- 指定数据冗余份数,默认3份,会占用磁盘空间 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!-- 关闭权限检查,非hadoop用户不可以操作hadoop集群 -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<!-- 浏览hdfs的方式,一种是webhdfs,一种格式https -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
5、分发到linxu02、linux03
在modules路径下:
scp -r HA linux02:/home/admin/modules/
scp -r HA linux03:/home/admin/modules/
三、启动HDFS-HA集群
1、打开三台服务器上的JouranlNode节点:
sbin/hadoop-daemon.sh start journalnode
2、格式化linux01的namenode
bin/hdfs namenode -format
3、启动namenode
sbin/hadoop-daemon.sh start namenode
4、在linux02中,同步linux01中的active的namenode
sbin/hdfs namenode -bootstrapStandby
5、启动所有的DataNode
分别在三台服务器上,执行:
sbin/hadoop-daemons.sh start datanode
************* 测试 *************
linux01:50070,Overview看他们状态。
linux02:50070,Overview看他们状态。
6、将linux01的NameNode切换为Active
bin/hdfs haadmin -transitionToActive nn1
7、把linux01的NameNode切换为Standby,再把linux02的NameNode切换为Active
bin/hdfs haadmin -transitionToStandby nn1
bin/hdfs haadmin -transitionToActive nn2
8、关闭linux01的namenode节点,把linux02强制切换为active
sbin/hadoop-daemon.sh stop namenode
bin/hdfs haadmin -transitionToActive nn2 -forceactive
四、安装zookeeper
1、在HA文件加下,执行解压命令。把zookeeper安装到HA下
tar -zxf /home/admin/softwares/installations/zookeeper-3.4.5.tar.gz -C ./
2、修改/conf路径下文件名称,修改该配置文件
mv zoo_sample.cfg zoo.cfg 修改名称。
把dataDir的路径改为:/home/admin/modules/HA/zookeeper-3.4.5/zkData
在最后配置节点ip:
server.1=192.168.137.20:2888:3888
server.2=192.168.137.21:2888:3888
server.3=192.168.137.22:2888:3888
3、在zookeeper-3.4.5目录下,创建文件夹zkData,在zkData中,创建文件myid,在myid文件中追加一个1,对应server.1,在linux02中的myid为2...
mkdir zkData
touch myid
echo 1 > myid
4、zookeeper分发到linux02、linux03
scp -r zookeeper-3.4.5 linux02:/home/admin/module/HA
5、给三台服务器的hadoope中配置zookeeper
在core-size.xml中添加
<property>
<name>ha.zookeeper.quorum</name>
<value>linux01:2181,linux02:2181,linux03:2181</value>
</property>
在hdfs-size.xml中添加
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
五、结合zookeeper实现高可用
1、先关闭所有服务器的HDFS
sbin/stop-dfs.sh
2、启动所有服务器的zookeeper,查看三台服务器的zookeeper的状态
(paxos算法,让一台服务器的zookeeper状态为leader,其他节点为follower)
bin/zkServer.sh start
bin/zkServer.sh status
3、初始化zookeeper
bin/hdfs zkfc -formatZK,将新配置的高可用namenode,在zookeeper中格式化
4、先手动启动journalnode
sbin/hadoop-daemon.sh start journalnode
5、启动HDFS服务
sbin/start-dfs.sh
注意:先手动启动journalnode,如果没有使用start-dfs.sh命令启动服务,每个服务单独启动,
测试、
1、进到zookeeper客户端
bin/zkCli.sh
大数据 - hadoop - HDFS+Zookeeper实现高可用的更多相关文章
- 我要进大厂之大数据Hadoop HDFS知识点(1)
01 我们一起学大数据 老刘今天开始了大数据Hadoop知识点的复习,Hadoop包含三个模块,这次先分享出Hadoop中的HDFS模块的基础知识点,也算是对今天复习的内容进行一次总结,希望能够给想学 ...
- 我要进大厂之大数据Hadoop HDFS知识点(2)
01 我们一起学大数据 老刘继续分享出Hadoop中的HDFS模块的一些高级知识点,也算是对今天复习的HDFS内容进行一次总结,希望能够给想学大数据的同学一点帮助,也希望能够得到大佬们的批评和指点! ...
- 大数据hadoop之zookeeper
一.ZooKeeper 的实现 1.1 ZooKeeper处理单点故障 我们知道可以通过ZooKeeper对分布式系统进行Master选举,来解决分布式系统的单点故障,如图所示. 图 1.1 ZooK ...
- 大数据Hadoop——HDFS Shell操作
一.查询目录下的文件 1.查询根目录下的文件 Hadoop fs -ls / 2.查询文件夹下的文件 Hadoop fs -ls /input 二.创建文件夹 hadoop fs -mkdir /文件 ...
- 基于zookeeper的高可用Hadoop HA集群安装
(1)hadoop2.7.1源码编译 http://aperise.iteye.com/blog/2246856 (2)hadoop2.7.1安装准备 http://aperise.iteye.com ...
- 云计算分布式大数据Hadoop实战高手之路第七讲Hadoop图文训练课程:通过HDFS的心跳来测试replication具体的工作机制和流程
这一讲主要深入使用HDFS命令行工具操作Hadoop分布式集群,主要是通过实验的配置hdfs-site.xml文件的心跳来测试replication具体的工作和流程. 通过HDFS的心跳来测试repl ...
- 大数据篇:Zookeeper
Zookeeper 1 Zookeeper概念 Zookeeper是什么 是一个基于观察者设计模式的分布式服务管理框架,它负责和管理需要关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Z ...
- 14周事情总结-机器人-大数据hadoop
14周随着考试的进行,其他该准备的事情也在并行的处理着,考试内容这里不赘述了 首先说下,关于机器人大赛的事情,受益颇多,机器人的制作需要机械和电控两方面 昨天参与舵机的测试,遇到的问题:舵机不动 排查 ...
- hadoop 集群HA高可用搭建以及问题解决方案
hadoop 集群HA高可用搭建 目录大纲 1. hadoop HA原理 2. hadoop HA特点 3. Zookeeper 配置 4. 安装Hadoop集群 5. Hadoop HA配置 搭建环 ...
随机推荐
- 使用Dockerfile定制ubuntu+nginx镜像
实验目的:书写Dockerfile,定制ubuntu 14.04 + nginx 1.14.0的镜像. 实验过程: 1. 下载nginx-1.14.0 http://nginx.org/downlo ...
- windows下使用 fdfs_client 上传文件
在上一篇中介绍了使用 FastDFS 与 Nginx 在 Linux 系统上实现分布式图片服务器,现在介绍在 windows 系统下使用该分布式图片服务器. 需要安装 fdfs_client 模块和配 ...
- java前的部分了解(计算机小白)
一.加密 对称加密: des 3des AES rc4 (数据加密) 会话密钥 非对称加密(成对:公钥/私钥(一个加密一个解密)):RSA DSA 密钥交换 / 数字签名(用私钥加密摘要算法出的一串数 ...
- mysql存储过程和执行计划案例
开启event_scheduler指令: SET GLOBAL event_scheduler = ON;SET @@global.event_scheduler = ON;SET GLOBAL ev ...
- textarea右下角黑点
先记录问题及解决方法,原因后续深入了解 在布局中,用到了textarea 输入框,在Android手机上却显示右下角有一个黑点,检查代码无误,代码没有多余的点符号. 解决:在textarea 中添加 ...
- Delphi下的WinSock编程
一.定址 要通过Winsock建立通信,必须了解如何利用指定的协议为工作站定址.Winsock 2引入了几个新的.与协议无关的函数,它们可和任何一个地址家族一起使用:但是大多数情况下,各 ...
- Linux安装TeamViewer
1.下载teamview centos版本 官网只有rpm版本,附件中即为官网下载的teamview最新版本 (下载tar包方式,我这里打不开teamviewer的界面,所以这里不推荐) 官方下载地址 ...
- 阿里云服务器报 Liunx异常文件下载处理办法
阿里云服务器报 Liunx异常文件下载.挖矿进程.SSH远程非交互式一句话异常指令执行 清除办法 1.删除crontab里面的自启动脚本 2.删除authorized_keys 里面密匙 3.删除#/ ...
- OSI,TCP/IP,五层协议的体系结构,以及各层协议
OSI分层 (7层):物理层.数据链路层.网络层.传输层.会话层.表示层.应用层. TCP/IP分层(4层):网络接口层. 网际层.运输层. 应用层. 五层协议 (5层):物理层.数据链路层.网络层. ...
- c++常量指针和指针常量的区别
int a:int * const p = &a: //指针常量,*p可以修改*p = 8:(OK) p不可以修改 p++(ERROR) int a,b:const int *p = & ...