今天,开始了Hbase的学习。学习了Hbase的介绍、环境搭建、Shell操作、读写流程、API-判断一下表是否存在、API-创建一张表、API-删除一张表、API-添加数据、API-删除数据、API-获取整张表的所有数据、API-获取rowkey的所有数据、API-获得某一个列的数据、官方Hbase-MapReduce案例、MR数据迁移、HDFS-MR-HBase、常用Shell、备份-恢复。
总结一下:
1.HBase的角色
1)HMaster
功能
(1)监控RegionServer
(2)处理RegionServer故障转移
(3)处理元数据的变更
(4)处理region的分配或移除
(5)在空闲时间进行数据的负载均衡
(6)通过Zookeeper发布自己的位置给客户端
2)RegionServer
功能
(1)负责存储HBase的实际数据
(2)处理分配给它的Region
(3)刷新缓存到HDFS
(4)维护HLog
(5)执行压缩
(6)负责处理Region分片
组件
(1)Write-Ahead logs
HBase的修改记录,当对HBase读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据会先写在一个叫做Write-Ahead logfile的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。
(2)HFile
这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。
(3)Store
HFile存储在Store中,一个Store对应HBase表中的一个列族。
(4)MemStore
顾名思义,就是内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在WAL中之后,RegsionServer会在内存中存储键值对。
(5)Region
Hbase表的分片,HBase表会根据RowKey值被切分成不同的region存储在RegionServer中,在一个RegionServer中可以有多个不同的region。
2.HBase的架构
HBase一种是作为存储的分布式文件系统,另一种是作为数据处理模型的MR框架。因为日常开发人员比较熟练的是结构化的数据进行处理,但是在HDFS直接存储的文件往往不具有结构化,所以催生出了HBase在HDFS上的操作。如果需要查询数据,只需要通过键值便可以成功访问。
HBase内置有Zookeeper,但一般我们会用其它的Zookeeper集群来监管master和regionserver,Zookeeper通过选举,保证任何时候,集群中只有一个活跃的HMaster,HMaster与HRegionServer 启动时会向ZooKeeper注册,存储所有HRegion的寻址入口,实时监控HRegionserver的上线和下线信息。并实时通知给HMaster,存储HBase的schema和table元数据,默认情况下,HBase 管理ZooKeeper 实例,Zookeeper的引入使得HMaster不再是单点故障。一般情况下会启动两个HMaster,非Active的HMaster会定期的和Active HMaster通信以获取其最新状态,从而保证它是实时更新的,因而如果启动了多个HMaster反而增加了Active HMaster的负担。
一个RegionServer可以包含多个HRegion,每个RegionServer维护一个HLog,和多个HFiles以及其对应的MemStore。RegionServer运行于DataNode上,数量可以与DatNode数量一致。
3.HBase读写流程
1、HBase读数据流程
1) HRegionServer保存着meta表以及表数据,要访问表数据,首先Client先去访问zookeeper,从zookeeper里面获取meta表所在的位置信息,即找到这个meta表在哪个HRegionServer上保存着。
2)接着Client通过刚才获取到的HRegionServer的IP来访问Meta表所在的HRegionServer,从而读取到Meta,进而获取到Meta表中存放的元数据。
3) Client通过元数据中存储的信息,访问对应的HRegionServer,然后扫描所在HRegionServer的Memstore和Storefile来查询数据。
4)最后HRegionServer把查询到的数据响应给Client。
2、HBase写数据流程
1)Client也是先访问zookeeper,找到Meta表,并获取Meta表信息。
2)确定当前将要写入的数据所对应的HRegionServer服务器和Region。
3)Client向该HRegionServer服务器发起写入数据请求,然后HRegionServer收到请求并响应。
4)Client先把数据写入到HLog,以防止数据丢失。
5)然后将数据写入到Memstore。
6)如果Hlog和Memstore均写入成功,则这条数据写入成功。在此过程中,如果Memstore达到阈值,会把Memstore中的数据flush到StoreFile中。
7)当Storefile越来越多,会触发Compact合并操作,把过多的Storefile合并成一个大的Storefile。当Storefile越来越大,Region也会越来越大,达到阈值后,会触发Split操作,将Region一分为二。
提示:因为内存空间是有限的,所以说溢写过程必定伴随着大量的小文件产生。
4.数据的备份与恢复(里程碑和容灾)
1、备份
停止HBase服务后,使用distcp命令运行MapReduce任务进行备份,将数据备份到另一个地方,可以是同一个集群,也可以是专用的备份集群,即,把数据转移到当前集群的其他目录下(也可以不在同一个集群中)。
2、恢复
非常简单,与备份方法一样,将数据整个移动回来即可。
Hbase学习 day01
最新推荐文章于 2025-03-15 16:03:27 发布