写操作:
首先从 ZooKeeper 找到 hbase:meta 表的 Region 位置,然后读取 hbase:meta表中的数据 , hbase:meta 表中存储了用户表的 Region 信息 。
根据 namespace 、表名和 rowkey 信息找到写入数据对应的 Region 信息 。
找到这个 Region 对应的 RegionServer,然后发送请求 。
把数据分别写到 HLog (WriteAheadLog)和 MemStore 各一份 。
MemStore 达到阈值后把数据刷到磁盘,生成 StoreFile 文件 。
删除 HLog 中的历史数据 。

文章插图
BulkLoad机制用户数据位于 HDFS 中,业务需要定期将这部分海量数据导入 HBase 系统,以执行随机查询更新操作 。
这种场景如果调用写入 API 进行处理,极有可能会给 RegionServer 带来较大的写人压力 。
- 引起 RegionServer 频繁 flush,进而不断 compact、split,影响集群稳定性 。
- 引起 RegionServer 频繁GC,影响集群稳定性 。
- 消耗大量 CPU 资源、带宽资源、内存资源以及 IO 资源 , 与其他业务产生资源竞争 。
- 在某些场景下,比如平均 KV 大小比较大的场景,会耗尽 RegionServer 的处理线程, 导致集群阻塞 。
BulkLoad 首先使用 MapReduce 将待写入集群数据转换为 HFile 文件 , 再直接将这些 HFile 文件加载到在线集群中 。
BulkLoad 没有将写请求发送给 RegionServer 处理,可以有效避免上述一系列问题 。
常见问题热点问题什么是热点?
检索 HBase 的记录首先要通过Row Key来定位数据行 。解决方案:
当大量的 Client 访问 HBase 集群的一个或少数几个节点,造成少数 Region Server 的读/写请求过多、负载过大,而其他Region Server 负载却很小 , 就造成了 热点 现象 。
预分区:
加盐:
- 目的让表的数据可以均衡的分散在集群中,而不是默认只有一个Region分布在集群的一个节点上 。
哈希:
- 在Rowkey的前面增加随机数 , 具体就是给Rowkey分配一个随机前缀以使得它和之前的Rowkey的开头不同 。
- 哈希会使同一行永远用一个前缀加盐 。
- 也可以使负载分散到整个集群,但是读是可以预测的 。
反转:
- 使用确定的哈希可以让客户端重构完整的Rowkey,可以使用get操作准确获取某一个行数据 。
- 反转固定长度或者数字格式的Rowkey 。
- 这样可以使得Rowkey中经常改变的部分放在前面 。
推荐阅读
- steam怎么换区 steam两种转区方法介绍
- 郑梓妍扮演者是谁?郑梓妍扮演者钟晨瑶介绍
- 中秋节介绍 中秋节介绍英语作文
- 纸张种类 纸张种类大全介绍
- 水玻璃的特性及用途介绍 水玻璃的特性及用途
- 南京春节的风俗有哪些,南京人结婚风俗都有哪些介绍的详细些
- 电信星卡29元套餐介绍,电信星卡可以添加副卡
- 华为手表gt2功能介绍,华为手表gt2怎么设置
- 罗非鱼钓法介绍 罗非鱼如何钓
- Scylla数据库-高性能的分布式数据库
