阅读 65

Hbase常见知识点

My GitHub Homepage

Hbase常见知识点

写入流程

  1. 客户端发起写入数据请求,连接zk

  2. 获取zk当中一张特殊表 hbase:meta 表的位置信息

  3. 连接hbase:meta表所在的regionServer的服务器,与之进行通信,读取hbase:meta表示数据

  4. 与对应表的regionServer进行通信,写入数据

  5. 数据先写入到HLog,然后将数据写入到memoryStore里面去,这两个地方数据写入成功,就算数据写入成功

  6. memoryStore写满了之后,就会冲洗开辟一个新的memoryStore,老的memoryStore会加入到flush队列里面去,等待flush storeFile也会进行compact机制 ==》 将数据进行合并,删除掉无用的数据,清理过期的数据 split机制:region分裂 将HFile一分为二,而且region也会一分为二,region的分裂,不会分到其他的机器上面去

读取流程

  1. 客户端发起请求,读取数据,连接zk

  2. 获取zk当中一张特殊表hbase:meta表数据

  3. 与对应表所咋子的regionServer进行通信,进行数据查询

读取或者写入数据:全程没有HMaster的参与

Hbase当中三个重要机制

  • Flush机制:数据从memoryStore到storeFile

  • Compact机制:数据从storeFile到HFile

  • Split机制:将HFile一分为二

Hbase当中rowkey的设计

1、rowkey的长度原则: rowkey最大的长度64KB,实际工作当中,一般10-100字节,不宜过长,在可能的前提下,越短越好

2、rowkey的散列原则:

  • 尽量设计rowkey实现将数据均匀的分布到不同的region里面去,不要出现所有的数据都去往了某一个region
  • rowkey都是按照字典顺序进行排列的,hbase数据究竟存储到哪一个region里面去的时候,会比较rowkey高几位 数据
  • 随机字符串_15897845612/随机字符串_15894561235
  • 实现将数据均匀保存到不同的region里面去

3、rowkey的唯一原则:rowkey不能重复,如果重复,就会出现数据覆盖情况 尽量将统一类型的数据,存放到同一个region里面去,便于我们查找数据

如何解决rowkey的热点问题—即数据倾斜问题

1、加盐 ==> 给rowkey加上随机的前缀的字符串

2、取 hashCode 码值,保证同一行数据,永远使用相同的前缀加盐

3、rowkey的反转 15894651235 ==> 反转 53215649851 15874563214 ==> 反转 41236547851

4、时间戳反转 每条数据都会有一个时间戳 时间戳的前缀都一样,可以将时间戳进行反转

关注下面的标签,发现更多相似文章
评论