问题
我正在尝试使用 Phoenix 建立二级索引。创建索引需要几个小时。这似乎是由于 HBase 扫描缓慢,因为我注意到以下性能:
- 我可能需要 2 个小时来扫描表,而其他开发人员报告说对于较大的表(1 亿行)需要几分钟。
- HBase shell 能够以大约的行数计算行数。每秒 10.000 的速率,这意味着 3800 秒(> 1 小时!)计算此表的所有行。
都带有 HBase shell 和 Java 扫描器。
注意:GET(by rowkey) 操作具有良好的性能(大约 0.5 秒)。
语境
- 3800 万行/1000 列/单列族/96Go,GZ 压缩。
- 集群有 6 个节点(126Go RAM,24 核)和 5 个区域服务器。
- Hortonworks 数据平台 2.2.0
故障排除
基于 HBase 书(http://hbase.apache.org/book.html#performance),这是我已经检查过的内容:
1) 硬件
- IO(磁盘)
- NMon 表示磁盘的繁忙程度永远不会超过 80%,最常见的是在 0 到 20% 之间
- Top 说 HBase JVM 没有交换(检查 2 of 5 RS)
- IO(network):每个节点的主动接口都在同一个交换机上(所有第二个被动接口都插在不同的交换机上)
2) 虚拟机
- GC 暂停 OK(每分钟左右暂停几毫秒)
- 堆看起来不错(接近极限的峰值不会太长)
- CPU 出奇的低:从不超过 10%
- 线程:
- 活动线程(10“RpServe.reader=N”+其他几个)显示没有争用
- 很多停放的线程什么都不做(60“DefaultRpcServer.handler=n”,大约 15 个其他)
- 没有任何线程状态的大量 IPC 客户端列表
3) 数据
- 使用 Hive + completebulkload 批量加载。
- 地区数量:
- 13 个区域意味着每个 RS 有 2 到 3 个大区域,这是预期的。
- 强制执行主要压缩后,扫描性能保持不变。
- 区域大小相当均匀:11 个区域为 4,5Go (+/-0.5),2 个区域为 2,5Go
4)HBase配置
大多数配置保持不变。
- HBase env 仅指示 JMX 控制台的端口
- HBase-site 对 Phoenix 的设置很少
一些对我来说看起来不错的参数
- hbase.hregion.memstore.block.multiplier
- hbase.hregion.memstore.flush.size:134217728 字节(134Go)
- Xmx 的 Xmn 比率:.2 Xmn 最大值:512 Mb Xms:6144m
- hbase.regionserver.global.memstore.lowerLimit:0.38
- hbase.hstore.compactionTreshold:3
- hfile.block.cache.size : 0.4(块缓存大小占堆的百分比)
- 最大 HStoreFile (hbase.hregion.max.filesize) : 10 go (10737418240)
- 客户端扫描器缓存:100 行 Zookeeper 超时:30 秒
- 客户端最大键值大小:10mo
- hbase.regionserver.global.memstore.lowerLimit:0.38
- hbase.regionserver.global.memstore.upperLimit:0.40
- hstore 阻止存储文件:10
- hbase.hregion.memstore.mslab.enabled :
- 启用 hbase.hregion.majorcompaction.jitter :0.5
在不影响性能的情况下尝试了以下配置更改
- hbase-env.sh :尝试增加 HBASE_HEAPSIZE=6144(因为它默认为 1000)
- hbase-site.xml:
- hbase.ipc.server.callqueue.read.ratio:0.9
- hbase.ipc.server.callqueue.scan.ratio:0.9
5)日志没什么用
猫 hbase-hbase-master-cox.log | grep "2015-05-11.*错误"
cat hbase-hbase-regionserver-*.log | grep "2015-05-11.*错误"
不打印
打印警告显示不相关的错误
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.645-14237578 到期到 InvalidToken 异常。
2015-05-11 17:09:12,848 警告 [regionserver60020-smallCompactions-1430754386533] hbase.HBaseConfiguration:配置选项“hbase.regionserver.lease.period”已弃用。相反,使用“hbase.client.scanner.timeout.period”