HBase的特点:
- 海量存储(PB级别),
- 列式存储(列族存储,列祖下面很多列),
- 极易扩展,
- 高并发,
- 稀疏(在列族中,指定多列,列为空不会占用空间)。
元数据: - HDFS:元数据指的是类似文件名、文件权限、文件所有者这样信息的记录。这些元数据存放到了image、edits编辑日志。
- HIVE:元数据是指目录与表的对应,hdfs目录里面结构化文件中的列与表的字段对应关系,这些元数据存放到了mysql。
- HBASE:hbase的表是由若干个region组成的,某一条数据肯定位于某个表的,那个表?需要记录一下,是存在于某个region之上的,哪个region?需要记录一下,这个region由哪个regionserver管理,也需要记录一下,这些记录就是元数据,这些元数据存放到hbase的meta表,meta是由regionserver维护的,哪个呢?zookeeper记录着meta在哪个reginserver上。
体现出了zookeeper的什么作用呢?它掌管着元数据的入口。
列族:column family,列的分类,是一组列,列族是表约束的一部分,换言之,在创建表的时候一定要指定列族,而列可以在实际插入数据的时候指定。
rowkey:在hbase中插入数据时,一定要指定一个行键,类似于mysql里面的id,用于唯一标识记录的唯一性。(创建表的时候一定要指定列族,插入数据的时候一定要指定一个行键)
HMaster
master节点的主要职责如下:
- 为RegionServer分配Region
- 维护整个集群的负载均衡
- 维护集群的元数据信息
- 发现失效的Region,并将失效的Region分配到正常的RegionServer上
- 当RegionSever失效的时候,协调对应Hlog的拆分
功能:
1.监控RegionServer
2.处理RegionServer故障转移
3.处理元数据的变更
4.处理region的分配或转移
5.在空闲时间进行数据的负载均衡
6.通过Zookeeper发布元数据的位置给客户端
HRegionServer
HRegionServer直接对接用户的读写请求,是真正的“干活”的节点。它的功能概括如下:
- 管理master为其分配的Region
- 处理来自客户端的读写请求
- 负责和底层HDFS的交互,存储数据到HDFS
- 负责Region变大以后的拆分
- 负责Storefile的合并工作
功能:
1.负责存储HBase的实际数据
2.处理分配给它的Region
3.刷新缓存到HDFS
4.维护Hlog(每个regionserver都有一个Hlog)
5.执行压缩
6.负责处理Region分片(自动分片)
HDFS
HDFS为HBase提供最终的底层数据存储服务,同时为HBase提供高可用(Hlog存在HDFS)的支持,具体功能概括如下:
- 提供元数据和表数据的底层分布式存储服务
- 数据多副本,保证高可靠和高可用性
其他组件
1.Write-Ahead logs(WAL,HLOG&edits日志)
HBase的修改记录,当对HBase读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据会先写在一个叫做Write-Ahead logfile的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。
2.Region
HBase表的分片,HBase表会根据RowKey值被切分成不同的region存储在RegionServer中,在一个RegionServer中可以有多个不同的region。
3.Store
HFile存储在Store中,一个Store对应HBase表中的一个列族。
4.MemStore
顾名思义,就是内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在WAL中之后,RegsionServer会在内存中存储键值对。
5.HFile
这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile是以HFile的形式存储在HDFS的。
6.StoreFile
HFile是Hadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile