六、Zookeeper
-
Zookeeper概念
- Zookeeper是一个大型分布式的可靠的协调系统
-
Zookeeper特点
- 最终一致性
- 可靠性
- 实时性:保证读数据时全部一致使用Sync来协调
- 等待无关
- 原子性
- 顺序性
-
Zookeeper功能
- 配置维护
- 名字服务
- 分布式同步
- 组服务
-
Zookeeper架构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jVfqNADP-1571974469577)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1567733389147.png)]
架构解析:
-
Zookeeper架构仍然是主从结构即:Leader/Server
-
Zookerper各部分作用
(本质Leaner都是Server,只是不同的Server担任不同的角色,比如Observer,Follower)
角色 描述 Leader 负责投票发起和决议,更新系统状态 Learner Follower 用于接收客户请求并返回结果,参与投票 Learner Observer 只与客户端连接,写请求发给Leader,Observer不参与投票,只同步Leader状态。目的是扩展系统,提高读取速度,支撑更多的客户端。 -
在Zookeeper中,并不是每个节点都是Leader或Learner。只有少部分是Leader或Learner,即领导者总是少数。原因是:为了决策快速。并且,保证follower是奇数个(避免选举平票),但是Searver并不一定是奇数个,因为还有Observer,且Observer不参与投票。且在更新时,大于一半的投票就算成功。
-
注意:4个server只能down掉1个,3个Server也只能down掉1个
-
-
Zookeeper核心投票选主过程原理:
-
什么时候选主?:leader崩溃或leader失去了大多数的followers
-
选举算法:一种是基于 basic paxos。另一种是基于fast paxos
-
选举流程:
basic paxos
- 首先由发起选举的Server的线程来担任选举线程,功能是对投票进行统计
- 选举线程向Server发起一次询问(包括自己)
- 选举线程将收到的回复,首先验证是否是自己发起的询问(即验证zxid是否一致),然后获取对方的id(myid),并存储到当前询问对象列表中。最后获取对方提议的Leader的相关信息(id,zxid),并存储在投票记录表中。
- 收到所有Server的回复后,计算zxid最大的Server,将其设为下一次投票的Server作为Leader
- 进行投票,如果其票数大于等于n/2+1,则此为Leader否则,继续选取最大的zxid的Server继续投票
fast paxos
- fast paxos与basic paxos不同的是,选举线程的Server首先推荐自己作为Leader,如果获得其他Server的提议的Server后,记录下来然后重复像basic paxos一致,找到最大的zxid的Server进行投票。
-
basic paxos与fast paxos不同在于,basic paxos是由选举线程批量选取所有推荐的Server然后找出最大的zxid进行投票,这样重复。而fast paxos是首选推举自己然后再接受其他提议进行选择最大zxid进行重复选举。
-
-
Zookeeper在其他组件作用:
- Zookeeper在HDFS中,作用是Namenode给DataNode的消息推送,DataNode给NameNode的心跳推送Ping,以及当namenode宕掉时让standby namenode替换
- Zookeeper在HBase中,作用是保证只有一个HMaster;存储所有HRegion的寻址入口;存储HBase的schema和table的元数据。(即保存每个表被拆分的HRegion在哪个HRegion server)
七、Hbase列式数据库
-
Hbase列式数据库特点:
- 仅能通过主键row key和主键的range来检索数据
- 仅支持单行事务(即不能多表连接)
- 存储半结构化和非结构化的松散数据
- 主要依靠横向扩展
- 数据类型只有一种=>字符串类型
- 可以进行数据的修改、添加,删除、查询
- 存储结构是B树结构
- Hbase存放多个版本的数据,使用时间戳来记录
-
Hbase架构:(主从架构)
-
HBase Master与多个HRegion Server服务器群
-
HMaster管理所有HRegion服务器(但所有的服务器都是通过Zookeeper来协调,来处理HBase运行可能遇到的错误)。
为HRegion Server分配HRegion;进行HRegion的负载均衡;
当节点宕掉时将其上面的HRegion进行有效转移。
-
HRegion Server服务器的作用是存储HRegion,所谓的HRegion是指的是一张表可以被划分为多个HRegion(按行分割),所以一张表会被存储到多个HRegion Server上。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LNPbTpmx-1571974469579)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1567750493996.png)]
-
-
HBase结构:
-
列族:HBase表中的每个列都归属于某个列族,列族在使用表之前定义。列如:courses:history courses:math,一个列族有多个列。一个列族存储在单个目录保存,不同的列族的目录是分离的。
-
时间戳:每次修改,都会添加时间戳,时间戳表示的是数据的版本。
-
HRegion包括:Hlog,多个StoreFile(存储文件)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D8suaw1S-1571974469580)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1567751324360.png)]
-
-
HBase的两个基础表:
-
ROOT表:记录META表的Region信息
-
META表:记录用户表的Region信息
(即:ROOT表获得Region在META表的哪个信息存储区域,META获得Region具体在哪个HRegion Server上。)
-
-
Hbase基本操作命令
-
查看Hbase中的表:
list
-
查看表结构:
describe '表名'
-
创建表:
create '表名','列族名1','列族名2','列族名3'...
-
DML操作:
-
添加数据:
put '表名','主键名','列族名:列名','值'
列如:
put 'table1','xiaoming','add:city','徐州'
-
查询数据(获得某一列):
get '表名','主键名','列族:列名'
获得某个列族:
get '表名','主键名','列族'
获得某个主键的所有信息:
get '表名','主键名'
-
扫描某n行数据;
scan '表名,{LIMIT=>行数}'
-
获得数据行数(即有多少主键)
count '表名'
-
更新数据
put '表名','主键名','列族:列','值'
-
删除数据
delete '表名','主键名','列族:列名'
删除整个行:
deleteall '表名','主键名'
-
-
DCL操作:
-
删除一列
disbale '表名' alter '表名',{NAME=>'列名',METHOD=>'delete'} enable '表名' #即先禁用再删除再启用
-
删除表
disable '表名' drop '表名'
-
截断表
truncate '表名'
-
-
其他操作:
- 查看表是否存在:
exists '表名'
- 查看表是否启用:
is_enabled '表名'
- 查看表是否被禁用:
is_disabled '表名'
- 查看Hbase服务状态:
status
- 查看表是否存在:
-