HBase学习二
Posted rmxd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HBase学习二相关的知识,希望对你有一定的参考价值。
本次记录是用于:SparkStreaming对接Kafka、HBase记录
一、简介
①HBase本身是一个菲关系型数据库,存储数据结构时以key-value结构来进行存储,HBase中的数据是稀疏的。
②基于Hadoop运行,但是HBase的效率在秒级别
③基于列存储:传统行存储方式在查询特定列时,大部分时间花在磁盘寻址;而实际开发中,查询数据往往不是整表查询,往往是查询几列,此时列存储效率就高一些
④HBase中可以设计多个列族,但是一般不超过3个
⑤列族在创建表时需要指定,但是在添加数据时,可以向列族中添加不同的列
⑥HBase本身是基于HDFS进行存储,HDFS的特点是一次写入不能修改。在HBase中,如果修改数据,不是修改最原始的数据而是追加数据,在获取数据时,如果不指定,默认获取最新的(timestamp)数据。时间戳在HBase的数据称之为这个数据的版本VERSION
⑦HBase利用Zookeeper进行管理。HMaster通过Zookeeper监听HRegionServer。这个过程中,HBase自带了一个Zookeeper,如需配置额外的Zookeeper,则需禁用自带的HBase
⑧如果一个HBase集群中启动了多个HMaster,则会按照启动顺序,先启动的节点作为active HMaster,后启动的节点自动为HMaster的备份
⑨当HBase启动时,每个节点都会自动在Zookeeper上注册一个临时节点,在注册临时节点时,注册的不是ip而是主机名
⑩HBase与Hive区别:
1)HBase是菲关系型数据库,Hive是基于Hadoop的数仓工具
2)Hive必须基于Hadoop;HBase可以不基于Hadoop,HBase可以脱离Hadoop存在
3)HBase只提供了基本CRUD能力;Hive提供了大量的函数允许对数据进行ETL过程
4)HBase存储的数据是稀疏/半结构化的,Hive存储是结构化的数据
5)HBase针对列操作;Hive针对行操作
二、物理存储
①在HBase中,会将一个Table中的一行或多行划分为一个HRegion,也就意味着一个Table可以认为是由一个或多个HRegion构成,表刚创建时,默认只有一个HRegion
②每个HRegion可以分布到不同的节点(HRegionServer)上,方便表的分布式存储
③随着表的不断扩大,一个HRegion中的数据越来越多,达到一定的限度后,HRegion会裂为均等的两个HRegion
④分裂的限度为10G,这个值可以设置,一般集群中可以将这个值设置在1~20G
⑤HRegion在分裂完成后,这些HRegion会转移到其他节点上从而保证数据的分布式存储
⑥HRegion转移过程对用户是屏蔽的,由HBase自动完成,并且HBase在转移HRegion会考虑负载均衡(尽量保证每个节点的HRegion的个数差不多)
⑦负载均衡是由HMaster控制,HRegion是分布式存储的最小单位,每个HRegionServer上都会存储1到多个HRegion
⑧HRegion不是最小的存储单位,HRegion中包含了1个或多个HStore,每一个列族对应一个HStore
⑨每一个HStore中包含了1个memStore以及0或多个StoreFile
⑩StoreFile落地到HDFS上时,称之为HFile
三、技术细节
1、HRegion
①每一个Table中,将一行或多行分为一个HRegion进行处理
②HRegion在进行存储的时候会记录这个Region所对应的的startRowKey和stopRowKey
③一个HRegion由1个或多个HStore构成,每一个HStore包含一个memStore以及0或多个StoreFile
④每一个HRegion都会分布在不同的节点上(HRegionServer)
⑤每一个HRegionServer按照HBase的设计大概能管理1000个HRegion
2、HMaster
①HMaster是HBase中的管理节点
②HMaster不存在单点故障,因为可以启动多个HMaster,根据启动顺序,先启动的为active HMaster,所有请求走active HMaster,后启动的节点为back-up状态
③active HMaster在启动之后会在Zookeeper上注册一个临时节点/hbase/master,back-up HMaster启动后会在Zookeeper上注册一个临时节点/hbase/backup-masters
④Zookeeper通过心跳机制监控HMaster(HMaster定期向Zookeeper发送信号,维持这个节点,心跳默认时间是180s)
⑤如果active HMaster宕机,则Zookeeper自动触发选举过程,从backup-masters选出一个节点成为active HMaster
⑥active HMaster与backup HMaster之间热备份,backup-HMaster会监控/hbase/HMaster,热备是通过RPC进行
⑦功能:
1)管理HRegionServer:负责HRegion分配到哪个节点
2)管理元数据/表结构(增加表/删除表)-表名、列族名、表和列族之间的关系称为元数据
3、Zookeeper在HBase中的作用
①在HBase中作为协调者来使用
②HBase启动时,HMaster和HRegionServer都会到Zookeeper来注册一个临时节点-HMaster注册的节点是/hbase/master,HRegionServer注册是/hbase/rs/xxx
③HMaster并不是直接监控HRegionServer,而是通过Zookeeper监控。HRegionServer定期向Zookeeper发送心跳,HMaster则会监控/hbase/rs/下的子节点是否发生变化。如果发现子节点变少了,则HMaster要将这个节点上数据备份到其他节点上(即HRegionServer的failover)
4、HRegionServer
①用于存储和管理HRegion,每一个HRegionServer都可以管理多个HRegion
②一般会将HRegionServer和DataNode部署在同一个节点上,以满足数据本地化策略
③HRegionServer由WAL、Block Cache以及HRegion构成
1)WAL---Write Ahead Log
i:在Hbase的早期版本中教HLog
ii:在HRegionServer中用于记录操作,当发生写操作(put、deleteall)时,这些操作先记录到WAL中,如果WAL记录成功,则再将这个操作更新到memStore;如果memStore满了会将数据flush到StoreFile中
iii:这种设计目的:为了失败恢复,如果数据直接写入到memStore中,如果宕机则数据丢失
iv:WAL文件达到限度后,自动进行roll过程,产生一个新的WAL文件,后续的操作会记录到新的WAL文件中,但不会立即删除旧WAL
v:当数据持久化到StoreFile时,可以考虑删除WAL文件
vi:WAL是存储在HDFS中,是利用了Hadoop的sequence file文件的格式来存储的---sequence file是二进制的键值结构的文件。这个文件中的键包含了表名、HRegion、数据编号、timestamp,这个文件的值包含了行键+列族值
vii:WAL在HRegionServer中只有一个,早期版本只能串行操作,0.94开始才对WAL取了管道技术使得它可以并行操作
2)Block Cache
i:在HRegionServer中只有一个,是一个读缓存
ii:当产生读操作(scan、get)时,会将HRegion读取到的数据缓存到这个block Cache中,这样是为了提高HBase读的效率
iii:在Block Cache中,为了进一步提高效率,采用“局部性”原理
1:时间局部性:当数据被读取后,会认为这个数据再次被读取的概率相对其他数据要大一些,此时会将该条数据缓存
2:空间局部性:当数据被读取后,会认为和这个数据相邻的数据被读取的概率相对要大一些,此时会将该条数据的相邻数据缓存
iv:采用“局部性”原理是为了提高数据的命中率
v:采用on -heap LRUBlockCache,最近最少使用的数据
以上是关于HBase学习二的主要内容,如果未能解决你的问题,请参考以下文章