Hbase rowkey热点问题

转载 2014年07月16日 11:17:42

  当处理由连续事件得到的数据时,即时间上连续的数据。这些数据可能来自于某个传感器网络、证券交易或者一个监控系统。它们显著的特点就是rowkey中含有事件发生时间。带来的一个问题便是HBase对于row的不均衡分布,它们被存储在一个唯一的rowkey区间中,被称为region,区间的范围被称为Start KeyEnd Key

对于单调递增的时间类型数据,很容易被散列到同一个Region中,这样它们会被存储在同一个服务器上,从而所有的访问和更新操作都会集中到这一台服务器上,从而在集群中形成一个hot spot,从而不能将集群的整体性能发挥出来。

要解决这个问题是非常容易的,只需要将所有的数据散列到全部的Region上即可。这是可以做到的,比如,在rowkey前面加上一个非线程序列,常常有如下选择:

Hash散列

您可以使用一个Hash前缀来保证所有的行被分发到多个Region服务器上。例如:

byte prefix =
(byte) (Long.hashCode(timestamp) % <number of regionservers>);

byte[] rowkey =
Bytes.add(Bytes.toBytes(prefix), Bytes.toBytes(timestamp);

这个公式可以产生足够的数字,将数据散列到所有的Region服务器上。当然,公式里假定了Region服务器的数目。如果您打算后期扩容您的集群,那么您可以把它先设置为集群的整数倍。生成的rowkey类似下面:

0myrowkey-1,
1myrowkey-2, 2myrowkey-3, 0myrowkey-4, 1myrowkey-5, \

2myrowkey-6, …

当他们将按如下顺序被发送到各个Region服务器上去:

0myrowkey-1

0myrowkey-4

1myrowkey-2

1myrowkey-5

换句话说,对于0myrowkey-10myrowkey-4的更新操作会被发送到同一个region服务器上去(假定它们没有被散列到两个region上去),1myrowkey-21myrowkey-5会被发送到同一台服务器上。

这种方式的缺点是,rowkey的范围必须通过代码来控制,同时对数据的访问,可能要访问多台region服务器。当然,可以通过多个线程同时访问,来实现并行化的数据读取。这种类似于只有mapMapReduce任务,可以大大增加IO的性能。

Hbase中的rowkey以及热点问题

一、Hbase中的每条记录的结构 Hbase的表组成:一个表可以理解成是行的集合,行(记录)是列族的集合,列族是列的集合。 (1) 列族column family:它是column的集合,在创建表的时...
  • qq_31598113
  • qq_31598113
  • 2017年05月06日 19:07
  • 2801

HBase Rowkey热点问题

当处理由连续事件得到的数据时,即时间上连续的数据。这些数据可能来自于某个传感器网络、证券交易或者一个监控系统。它们显著的特点就是rowkey中含有事件发生时间。带来的一个问题便是Hbase对于row的...
  • wdier
  • wdier
  • 2017年04月05日 16:12
  • 697

hbase api常用方法使用及预分区解决热点问题

public byte[] nextId()     {         try {             currentTime = getRowKeyResult(Long.MAX_VA...
  • kuanghongjiang
  • kuanghongjiang
  • 2014年11月21日 09:30
  • 6289

HBase rowkey设计-热点问题

当处理由连续事件得到的数据时,即时间上连续的数据。这些数据可能来自于某个传感器网络、证券交易或者一个监控系统。它们显著的特点就是rowkey中含有事件发生时间。带来的一个问题便是HBase对于row的...
  • caoli98033
  • caoli98033
  • 2015年03月25日 15:48
  • 3263

Hbase中的rowkey以及热点问题

一、Hbase中的每条记录的结构 Hbase的表组成:一个表可以理解成是行的集合,行(记录)是列族的集合,列族是列的集合。 (1) 列族column family:它是column的集合,在创建表的时...
  • qq_31598113
  • qq_31598113
  • 2017年05月06日 19:07
  • 2801

HBase rowkey设计-热点问题

当处理由连续事件得到的数据时,即时间上连续的数据。这些数据可能来自于某个传感器网络、证券交易或者一个监控系统。它们显著的特点就是rowkey中含有事件发生时间。带来的一个问题便是HBase对于row的...
  • caoli98033
  • caoli98033
  • 2015年03月25日 15:48
  • 3263

hbase为避免热点,预先创建分区region

最近在使用hbase的时候,遇到了热点问题。我有三台regionserver,结果入数据的时候,总是在一台机器上写数据,导致io和cpu都很高,最后出现了memstore内存溢出的问题。后来才明白,这...
  • BrotherDong90
  • BrotherDong90
  • 2015年04月24日 10:28
  • 2499

HBase Rowkey热点问题

当处理由连续事件得到的数据时,即时间上连续的数据。这些数据可能来自于某个传感器网络、证券交易或者一个监控系统。它们显著的特点就是rowkey中含有事件发生时间。带来的一个问题便是Hbase对于row的...
  • wdier
  • wdier
  • 2017年04月05日 16:12
  • 697

hbase热点问题(数据倾斜)解决方案---rowkey散列和预分区设计

Hbase的表会被划分为1....n个Region,被托管在RegionServer中。Region二个重要的属性:Startkey与EndKey表示这个Region维护的rowkey的范围,当我们要...
  • w1014074794
  • w1014074794
  • 2017年06月12日 22:39
  • 444

Hbase中的rowkey以及热点问题

一、Hbase中的每条记录的结构 Hbase的表组成:一个表可以理解成是行的集合,行(记录)是列族的集合,列族是列的集合。 (1) 列族column family:它是column的集合,在创建表的时...
  • qq_31598113
  • qq_31598113
  • 2017年05月06日 19:07
  • 2801
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hbase rowkey热点问题
举报原因:
原因补充:

(最多只允许输入30个字)