问题
我正在尝试与Phoenix建立二级索引.索引创建需要几个小时.这似乎是由于HBase扫描速度慢,因为我注意到以下性能:
使用HBase shell和Java扫描程序.
注意:GET(通过rowkey)操作实现了良好的性能(约0.5秒).
上下文
故障排除
基于HBase书籍(http://hbase.apache.org/book.html#performance),这是我已经检查过的内容:
1)硬件
2)JVM
3)数据
4)HBase配置
大多数配置保持不变.
一些对我来说看起来不错的params
尝试以下配置更改而不会对性能产生任何影响
5)日志没有任何用处
cat hbase-hbase-master-cox.log | grep"2015-05-11.*ERROR"
cat hbase-hbase-regionserver - *.log | grep"2015-05-11.*ERROR"
什么都不打印
打印WARN显示非相关错误
2015-05-11 17:11:10,544 WARN [B.DefaultRpcServer.handler = 8,queue = 2,port = 60020] shortcircuit.ShortCircuitCache:ShortCircuitCache(0x2aca5fca):无法加载1074749724_BP-2077371184-184.10.17.65-1423758745093到期到InvalidToken异常.
2015-05-11 17:09:12,848 WARN [regionserver60020-smallCompactions-1430754386533] hbase.HBaseConfiguration:不建议使用配置选项"hbase.regionserver.lease.period".而是使用"hbase.client.scanner.timeout.period"
明白了:关键是将“热”内容与“冷”内容分离到单独的列族中。列族用于将列存储在单独的 HFile 中,因此我们可以将一种列族用于索引(或经常读取)的列,并使用另一种列族(即文件)来存储所有其他列。
第一步:查看较小的列族扫描速度更快
我们只是丢弃冷内容来构建一个较小的列族(1655 列 -> 7 列)。
中等大小表扫描的性能:
评论 :
第二步:生成多族HTable
我们通过从 Hive 生成 HFile 来进行批量加载。尽管文档说我们无法生成一个多族表,但可以单独生成 HFile:
create table mytable_f1 (UUID string, source_col1, source_col2)
...
TBLPROPERTIES('hfile.family.path' = 'tmp/mytable/**f1**');
create table mytable_f1 (UUID string, source_col3, source_col4)
...
TBLPROPERTIES('hfile.family.path' = 'tmp/mytable/f2');
Run Code Online (Sandbox Code Playgroud)
然后像往常一样简单地调用导入命令:
hadoop jar [hbase-server-jar] completebulkload /tmp/mytable mytable
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5841 次 |
| 最近记录: |