HBase 学习笔记
1. HBase 的特点
1.线性扩展,自动分表
- region的自动分裂以及master的balance
- 增加datanode机器即可增加容量
- 增加regionserver机器即可增加读写吞吐量
2.海量数据存储
一个表可以有上亿行,上百万列
3.强一致性
同一行数据的读写只在一台regionserver上进行,同一行的列写入是原子的
4.高性能随机写WAL (Write Ahead Log)
5.无缝集成Hadoop,支持MapReduce
2. HBase 各个角色的任务及特点
1)Master
- 为Region server分配region
- 负责region server的负载均衡
- 发现失效的region server并重新分配其上的region
- 监听zk,基于zookeeper感应rs的上下线
- 监听zk,基于zookeeper来保证HA
- 处理schema更新请求
特点:
- 不参与对表的读写访问
- 负载很低
- 无SPOF(单点故障)
2)RegionServer
- Region server维护Master分配给它的region
- 处理对其上region的IO请求,写入/读取数据
- 维护region的cache
- 处理region的flush、compact、split
3)Region和Table
- 以Region为单位管理, region(startKey,endKey);
- 每个Column Family单独存储:storeFile;
- 当某个Column Family累积的大小 > 某阈值时,自动分裂成两个Region;
- 如何找到某行属于哪个region呢?两张特殊的表:-ROOT- 和.META.
4)Zookeeper
- 保证任何时候,集群中只有一个master
- 保存root region的位置 即存贮所有Region 的寻址入口
- 实时监控Region Server的状态,将Region server的上线和下线信息实时通知给Master
- 存储Hbase的schema,包括有哪些table,每个table有哪些column family
5)HStore
- 存储的核心,由两部分组成:MemStore 和 StoreFiles
- 数据先写入MemStore,满了以后flush成一个StoreFile
- StoreFile数据量超过阀值,触发Compact合并操作
- Rgeion 大小超过阀值,出发Split
- 写操作只进入内存即返回,更新和删除操作都在compact过程中进行,Hbase只有增加,因此保证了I/O的高性能
HBase 加载数据有两种方式
1. Java 代码 MapReduce 开发工期比较长
2. hive-hbase-handler hive创建一个表和Hbase共享,通过hive-hbase-handler 往hive中插入数据,从而达到