HBase,
HBase架构:
关键词: client,zookeeper,hmaster,hregoinserver,hlog,hregoin,store,memstore,storefile,hfile
Client
包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息
hmaster:(hbase的老大)
为regoinserver分配region
负责region的重新分配
hdfs的垃圾文件回收
hregoinserver:(hbase的小弟)
负责维护hmaster分配给他的region(管理regoin)
处理client对region的IO请求并和hdfs进行交互
Zookeeper作用
通过选举,保证任何时候,集群中只有一个master,Master与RegionServers 启动时会向ZooKeeper注册
存储所有Region的寻址入口
实时监控Region server的上线和下线信息。并实时通知给HMaster
存储HBase的schema和table元数据
默认情况下,HBase 管理ZooKeeper 实例,比如, 启动或者停止ZooKeeper
zookeeper的引入使得Master不再是单点故障
HBase的安装
1.解压并配置环境变量
2.配置regionserver
配置backup-masters
配置hbase-site.xml
配置hbase-env.sh
export HBASE_MANAGES_ZK = false
分发:
scp -r hbase-1.2.1 root@hadoop02:$PWD
启动zk
启动hdfs
启动hbase
hbase shell
创建表:
create 'ns1:t2' ,'base_info' ,'extra_info'
查看表定义:
desc 'ns1:t1'
插入数据:
put 'ns1:t1','rk0001','f1:name','zhangsan'
查询所有数据
scan 't1'
查询某一行:
get 't1' , 'rk0001'
删除数据(指定要删除的列)
delete 't1' . 'rk0001','f1:age'
删除表:
drop 't1' 注意删除表之前要先禁用表 disable 't1'
Hbase预写
该机制用于数据的容错和恢复:
HLog是一个实现Write Ahead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中,
HLog文件定期会滚动出新的,并删除旧的文件 (已持久化到StoreFile中的数 据)。当HRegionServer意外终止
HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的 HLog文件,将其中不同Region的Log数据进行拆分,
分别放到相应region的目录下,然后再将失效的 region重新分配,领取到这region的HRegionServer在Load Region的
过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数
据恢复
HBase读写流程
写过程:
三步:flush,compact,split
先往WAL写,HLog用于灾难恢复往memstore(热数据)写,memstore达到阈值,开始溢写到HDFS,memstore配置:默认
达到128M开始溢写,自动flush
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>134217728</value>
</property>
flush:
生成storefile后,hdfs上才会看到文件
compact:
溢写生成很多的storefile,合并storefile
minor_compation:最早生成的几个storefile会被合并,这一步不会对标记的删除和过期的数据进行处理,经常发生,
数据量较小,占用资源不多
major_compaction: 默认7天执行一次
设置:
<property>
<name>hbase.hregion.majorcompaction</name>
<value>604800000</value>
</property>
compact的危害:
消耗大量的资源,对hbase的性能产生影响
-》会导致hbase的应用阻塞
企业中一般关闭自动触发,使用手动触发 major_compact
操作:
major_compact 'S3'
效果:
hdfs上面的文件合并
split:
配置split阈值
<property>
<name>hbase.hregion.max.filesize</name>
<value>10737418240</value>
</property>
读流程:
1.通过zk来获取root表在哪个节点上,然后进一步通过-root表和-meta表来获取最终的位置信息
2.memstore和storefile中找文件
root表:包含META表所在的region列表该表只会有一个region,zookeeper中记录了root表的location
META表:
包含所有用户空间region列表,以及regionserver的服务器地址
寻找regionserver
zookeeper -> root(单Region) ->META ->用户表
HBase预分区技术:
hbase默认建表时只有一个region,这个region的rowkey是没有边界的,在写入时,所有的数据会写入这个默认的region
随着数据量不断增加,region会split,分为2个region,会产生两个问题
1.数据会往一个region上写,会有热点问题
2.region split会消耗集群IO资源,
预分区技术:提前创建多个region,并确定每个region的起始和终止
HBase使用场景
大数据量存储,大数据量高并发操作
需要对数据随机读写操作
读写访问均是非常简单的操作
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。