HBase基础知识

HBase简介

  • HBase的原型是BigTable
  • HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,可以廉价搭建大规模结构化存储集群
  • HBase的目标是存储并处理大数据
  • 利用HDFS作为文件存储系统,利用MapReduce处理数据,利用Zookeeper协同服务
  • 扩展HRegionServer,处理能力,扩展DataNode,存储能力

HBase架构

Client、Zookeeper、HMaster(管理许多HRegionServer)、HRegionServer

HRegionServer:多个HRegion(一个或多个HRegion负责一张表)、HLog(操作日志)

HRegion:多个Store(一个或多个Store一个列族)

Store:mem store(本地缓存区,内存)、StoreFile

底层:数据先写入mem store,当mem store满了,就flush到磁盘,形成StoreFile文件,其中StoreFile文件以Hfile格式存储在HDFS上。

原先是一个HRegion负责一个表,当HRegion达到阈值,则会切分为两个HRegion。有可能HRegion会分给另一个HRegionServer以防止数据倾斜。

  • Zookeeper:HBase通过Zookeeper来保证Master的高可用性、RegionServer的监控
  • HMaster:为RegionServer分配Region,维护集群的负载均衡,维护集群的元数据信息,-ROOT-表和.META.表,发现失效的Region,将其分配到正常的RegionServer。
  • HRegionServer:直接对接用户的读写请求,管理Region,负责和HDFS的交互,负责Region的拆分,负责StoreFile文件的合并
  • HLog,WAL,预写式日志,现在日志记录操作,避免引起数据丢失,系统出现故障,根据此日志重建。

HBase Shell

  • 创建表create
  • 添加数据put
put 'table','rowkey','columnfamily:qualiter','value'
  • 查询表scan
  • 查看单行get
get 'table','rowkey',{COLUMN=>'info:name',VERSION=>n}
  • 删除数据delete
  • 删除表disable table,drop table

HBase数据结构

RowKey

记录的主键,RowKey可以是任意字符串,按字典序排序存储,设计RowKey时,要充分排序存储这个特性,将经常一起读取的行存储到一起。

Column Family

列族,包含多个列。必须在使用表前定义。

Cell

由{rowkey,columnfamily:column,version}确定的单元

TimeStamp

时间戳,版本通过时间戳来索引。

HBase读写数据流程

读数据流程
  1. Client连接ZK获取元数据信息(.META.表,meta-region-server表),即获取元数据所在的RegionServer在哪里。
  2. ZK返回客户端查询元数据所在的RegionServer位置。
  3. 客户端请求访问所在的RegionServer
  4. RegionServer同意访问
  5. 客户端发送读请求
  6. RegionServer返回结果(先内存后磁盘)
写数据流程
  1. 客户端发送请求给ZK,获取META表所在RegionServer
  2. ZK返回META表所在的RegionServer
  3. 获取RegionServer的META表
  4. 返回元数据所在的RegionServer
  5. 向RegionServer发送写数据请求
  6. 写入Hlog,WAL
  7. HRegion根据Hlog写入mem store
  8. 反馈客户端,写入成功
Flush过程
  1. 当Memstore数据达到阈值,将数据刷到硬盘,将内存中数据删除,同时删除HLog中的历史数据
  2. 并将数据存储到HDFS
数据合并过程
  1. 数据块达到4块,HMaster触发合并操作,Region将数据块加载到本地,进行合并
  2. 合并数据超过256M,进行拆分,拆分后的Region分配给不同RegionServer
  3. 当HRegionServer死机后,将HLog拆分,分配给不同HRegionServer,同时修改.META.表
原文地址:https://www.cnblogs.com/chenshaowei/p/12461148.html