Hbase 范围扫描同时消除区域服务器热点
Hbase range scan while eliminating region server hot spotting
我有一个 hbase table,行键类似于 <<timestamp>>_<<user_id>>
,其中时间戳为 yyyyMMddHHmm。我关心的是查询给定 时间范围 内的用户详细信息。
例如:“201602021310_user1”
HTable table = new HTable(conf, tableName);
Scan s = new Scan();
s.setStartRow("20160202".getBytes());
s.setStopRow("20160303".getBytes());
ResultScanner ss = table.getScanner(s);
List<Result> rs = new ArrayList<Result>();
for(Result r:ss){
rs.add(r);
}
据我了解,不会有任何问题,因为 Hbase 按字典顺序存储数据。但是这个实现会造成region server hot spotting。
为了避免热点,(期待评论)
- 我正在考虑在我的行键中使用 散列前缀。如果是这样,我觉得我的 范围扫描将无法正常工作 。
- 然后使用过滤,例如模糊过滤器。但是我找不到实现范围查询的方法。
根据我的低估,我可以通过此实现的是过滤每个月并合并结果。
201602??_??????
+ 20160301_??????
+20160302_??????
+20160303_??????
实现此目标的最佳方法是什么? (在支持范围查询的同时消除热点)
row_key = (++index % BUCKETS_NUMBER) + original_key
其中,
- index - 特定 record/row ID 的数字(或任何顺序)部分。
- BUCKETS_NUMBER - 我们希望新行键分布在“桶”的数量。
- original_key - 我们要写入的记录的原始键。
分桶记录的新行键将不再是一个序列,但每个桶中的记录将保留其原始序列。由于数据在写入过程中被放置在多个桶中,我们必须在基于“原始”开始和停止键进行扫描时从所有这些桶中读取并合并数据,以便它保留“排序”属性。每个桶的扫描可以并行化,因此性能不会降低。
摘自 Sematext 博客 post HBaseWD: Avoid RegionServer Hotspotting Despite Sequential Keys
您可以完整阅读本文answer/explanation
我有一个 hbase table,行键类似于 <<timestamp>>_<<user_id>>
,其中时间戳为 yyyyMMddHHmm。我关心的是查询给定 时间范围 内的用户详细信息。
例如:“201602021310_user1”
HTable table = new HTable(conf, tableName);
Scan s = new Scan();
s.setStartRow("20160202".getBytes());
s.setStopRow("20160303".getBytes());
ResultScanner ss = table.getScanner(s);
List<Result> rs = new ArrayList<Result>();
for(Result r:ss){
rs.add(r);
}
据我了解,不会有任何问题,因为 Hbase 按字典顺序存储数据。但是这个实现会造成region server hot spotting。 为了避免热点,(期待评论)
- 我正在考虑在我的行键中使用 散列前缀。如果是这样,我觉得我的 范围扫描将无法正常工作 。
- 然后使用过滤,例如模糊过滤器。但是我找不到实现范围查询的方法。
根据我的低估,我可以通过此实现的是过滤每个月并合并结果。
201602??_??????
+20160301_??????
+20160302_??????
+20160303_??????
实现此目标的最佳方法是什么? (在支持范围查询的同时消除热点)
row_key = (++index % BUCKETS_NUMBER) + original_key
其中,
- index - 特定 record/row ID 的数字(或任何顺序)部分。
- BUCKETS_NUMBER - 我们希望新行键分布在“桶”的数量。
- original_key - 我们要写入的记录的原始键。
分桶记录的新行键将不再是一个序列,但每个桶中的记录将保留其原始序列。由于数据在写入过程中被放置在多个桶中,我们必须在基于“原始”开始和停止键进行扫描时从所有这些桶中读取并合并数据,以便它保留“排序”属性。每个桶的扫描可以并行化,因此性能不会降低。
摘自 Sematext 博客 post HBaseWD: Avoid RegionServer Hotspotting Despite Sequential Keys
您可以完整阅读本文answer/explanation