Hbase范围扫描,同时消除区域服务器热点
我有一个hbase表,行键类似于Hbase范围扫描,同时消除区域服务器热点,hbase,Hbase,我有一个hbase表,行键类似于。其中时间戳为yyyyMMddHHmm。我关心的是查询给定时间范围内的用户详细信息 例如:“201602021310_用户1” HTable table=新的HTable(conf,tableName); 扫描s=新扫描(); s、 setStartRow(“20160202.getBytes()); s、 setStopRow(“20160303.getBytes()); ResultScanner ss=table.getScanner(s); List rs
。
其中时间戳为yyyyMMddHHmm。我关心的是查询给定时间范围内的用户详细信息
例如:“201602021310_用户1”
HTable table=新的HTable(conf,tableName);
扫描s=新扫描();
s、 setStartRow(“20160202.getBytes());
s、 setStopRow(“20160303.getBytes());
ResultScanner ss=table.getScanner(s);
List rs=new ArrayList();
对于(结果r:ss){
rs.add(r);
}
根据我的理解,不会有任何问题,因为Hbase按字典顺序存储数据。但此实现将导致区域服务器热点问题。
为了避免热点问题,(期待评论)
201602????
20160301??????+20160302????
+20160303??????
- 索引-特定记录/行ID的数字(或任何顺序)部分
- bucket\u NUMBER-我们希望新行键分布的“bucket”数
- original_key—我们要写入的记录的原始密钥
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);
}
row_key = (++index % BUCKETS_NUMBER) + original_key