大数据---HBASE

  • HBASE简介

1、Hbase是一个非关系型分布式数据库(NoSQL)--BigTable(参考的是谷歌)

2、高可靠(采用主从架构,使用zookeeper管理)、高性能(分布式并行处理)、面向列、可伸缩(可新增子节点)

3、采用HDFS作为文件存储系统(也可以采用其它的文件存储系统,没集成MR计算的功能)

4、Hbase擅长查询数据(这里的查询是指将指定的数据按数据库的格式拿出显示,不包括统计即count,sum这样的计算操作,Hasee是可以做计算的只是不擅长,且需要和MR做集成),随机读取速度快。

5、能够处理结构化和非结构化的数据

  • HABSE表

Hbase建表的时候不需要指定数据类型,也不需要指定字段名称

行(row):行由行键(rowkey)唯一标识(一行的每一个列限定符(字段)都有一个rowkey标识)

列族(column family):行的数据按列分进行切分cf(多列组成一个cf)

列限定符(column qualifier):列里面的数据定位通过列限定符(相当于字段)

单元(cell):行键、列族、列限制定符一起确定一个单元(列限定符,value)

时间版本(vesion):单元值有时间版本(如果一张表中有多个列族,每个列族中的版本数可以不一样),用时间戳来标识,默认只指定一个

 

  • HABSE架构

大数据---HBASE_第1张图片

client:

1、客户端整个集群的入口

2、使用HBase RPC机制与HMaster和HRegionserver通信

3、与HMaster通信进行管理类的操作

4、与HRegionserver通信进行读写类操作

5、包含访问HBase的接口,并维护cache来加快对HBase的访问,与HRegionsercer交互

 

Region:由表中多行组成(按照rowkey的范围,StartKey和EndKey划分---只记录StartKey)Region;每一张表创建的时候只有一个region,当表中的数据不断增加到超过某一个给定的阈值后,开始分裂,分裂为多个region;region管理多个store(一个列族就有一个store)

-------region分裂后会由Hmaster进行负载均衡。

Store:包括内存的中Memstore和磁盘中的Storefile(Hfile--hdfs中的存储文件)(有多少个列族就有多少个store)

-------在进行写入操作的时候,Hbase先将数据写入到memstore中,当memstore的数据量某个设定的阈值时,Hregionserver会启动一个flashcache进程写入storefile,每次写入操作都会形成一个单独的storefile(Hfile)

storefiel:当单独的storefile的数量增长到一定的阈值后,系统会进行合并,包括版本合并和删除,从而形成更大的storefile

Hregionserver:

1、管理多个region和多个Hlog(这边只是管理,并不是将region中的真实数据存储在Hregionserver中,真实的数据是存储在HDFS上的,因此当Hregionserver挂掉后,只用将这个管理者更换掉就行,并不用去管HDFS上的数据)

2、处理用户的读写请求---Hregionsever和region进行交互处理

Hmaster:主备模式

1、管理所有的RegionServer(新RegionServer的注册、Failover(故障处理))

2、新表创建时的Region的分配

3、运行期间的负载均衡保障

4、RegionServer  Failover(故障)后Region接管。

  • Hbase--ZOOKEEPER

1、ZooKeeper是一个分布式应用程序协调服务。

2、Hmaster的高可靠(解决Hmaster的单点故障问题)

--在Hbase中可以创建多个Hmastr节点,只有一成为Active角色,来管理Hbase,当主Hmaster(Active角色Hmaster)​宕掉后,会从备Hmaster中选出新的Active角色的Hmaster​​​​​​继续管理Hbase。

--1、zk提供分布式锁的服务实现Hmaster​​​​​​Active角色的创建(当主Hmaster宕掉后,所有的其它Master都尝试在zk中写入一个对应的节点,该节点只能被一个Master创建成功,创建成功的Maser进程就是主Master(Active角色Master))。

--2、事件监听机制,通过事件监听机制确定主HMaster是否宕掉,如果宕掉,就会删除该节点并通知其它备Master。

  • HBASE写流程

1、寻址

client--->zk (得到meta表的元数据)--->Regionserver(找到到meta表)--->meta表(获取写入数据的region的地址(region的RowKey范围,region所属的Regionserver))

2、写入数据

2.1先将写入得数据进行分组

region分组(将数据按照相同的region进行分组)--->regionserver分组--->HBase自身封装的RPC框架往多个RegionServer发送请求,并行操作(并行发送数据,相同的regionserver的数据会一起发送)

2.2数据到达具体的regionserver下的具体的region,开始写入数据

先将数据写入到memstore中(同时写入到Hlog中来保证数据的安全),当memstore的数据量某个设定的阈值时,Hregionserver会启动一个flashcache进程写入storefile,每次写入操作都会形成一个单独的storefile(Hfile)

3、补充

3.1写入数据的锁

锁概念:Hbase不保证原子性(原子性:一个事务要么同时成功,要么同时失败),但是提供了一个region行锁来保证数据的安全性

写入数据锁流程:获取Region操作锁-->获取行锁--->写入MemStore--->释放行锁--->写入Hlog--->释放Region锁

3.2 产生Hfile(storeFile)的情况

01、当写入MemStore的数据达到阈值时

02、当写入MemStore的数据没有达到阈值但是内存不够时

03、当停止Hbase时(执行stop-hbase.sh)

04、当memstore挂掉,从Hlog中恢复数据的时

3.3关于Split

当集群中的region中数据到达一定的阈值,region就会进行分裂

01、分裂的region会暂停一些读写服务

02、分裂的形式并不是真分裂,而是创建一个新的region

3.4 Compaction

01、包括两大类删除需要删除的数据(删除版本过期的数据、有效期的过期的数据、已经执行delete的数据)和数据整理(删除数据后Hfile的整理合并)

02、minor(小合并):部分HFILE,只处理TTL过期的数据,由Hbase内部执行

03、major(合并):是将store中所有的HFILE进行合并为一个大的HFIEL,然后进行切分为一个标准的HFILE文件,时间会很长,大合并会执行删除操作。

  • HBASE读数据

1、get与scan的区别

get:获取一行行中的数据(可以看做特殊的scan)

scan:获取多行数据

2、scanner介绍

scanner:扫描器,分为RegionScanner 、StoreScanner 、MemStoreScanner和StoreFileScanner

一个region-->一个RegionScanner

一个Store-->一个StoreScanner  

一个MemStore-->一个MemStoreScanner

一个StoreFile--->一个StoreFileScanner

读取数据时会分配多个scanner进行循环读取数据,一行(唯一的一个roukey)中的一个主族由一个scanner负责读取数据,当一个scanner读取完数据后由下一个scanner读取下一主族的数据,读取完的scanner会循环利用,进入到scanner列表中准备下读取数据。

所有的scanner查找的主族中的数据都是并行查找的,只是读取数据的时候是串行读取的;如果所有的数据都读取完成那么scanner会关闭。

  • HBASE的热点问题

1、什么是Hbase的热点问题?

Hbase中的读写很大一部分都只在一个HergionServer中,热点问题产生的原因是由于设计的rowkey不合理

解决方案参考:https://blog.csdn.net/WYpersist/article/details/79954419

 

你可能感兴趣的:(HBASE)