我们安装了HDInsight Hbase集群,我们观察到当主要压缩进行时,Hbase无法访问客户端应用程序。
请建议处理此方案的最佳做法。
答案 0 :(得分:2)
关于HDInsight HBase,我想在这里分享一些想法。
1)deafult禁用基于时间的压缩,请参阅hbase.hregion.majorcompaction=0
2)关于基于大小的压缩,默认压缩策略为ExploringCompactionPolicy
,而hbase.hstore.compaction.max.size
设置为10GB,因此不会发生大于10GB的压缩。
hbase.hregion.max.filesize
设置为3GB,因此一旦一个区域的HFiles增长到这个值,该区域就会被分割。
这种设置的原因是最大blob HBase可以在Azure存储中创建高达12GB,因此如果压缩超过12GB的数据,压缩将最终失败。您可以明确地增加最大blob大小(每个Azure存储记录最多200GB,但这也会增加读/写延迟和压缩时间)。
此处有更多背景信息,
虽然Azure blob存储对单个blob有200GB限制(4MB * 50k块),但为了获得最佳性能,在hadoop core-site.xml
中我们限制fs.azure.read.request.size
和fs.azure.write.request.size
至256kb,因此HBase集群中的最大blob将在12GB左右为256KB * 50k。如果你设置为4MB,它将是200GB。但是4MB会增加每次读/写的延迟,并且你将允许HBase压缩高达200GB的数据,这将持续数小时。
肯定可以进行更多调整,例如VM大小,簇大小,Memstore大小等。
答案 1 :(得分:0)
这取决于您的使用案例。
默认情况下,主要压缩每24小时启动一次。
如果您知道何时未使用群集,则可以禁用主要压缩并在此时(通常是夜晚)运行。 cron调用的一个脚本可以完成hbase shell的主要压缩工作。
自HBase 0.98.11和HBase 1.1.0以来,您可以限制压缩吞吐量,有关Limit compaction speed JIRA的更多信息。
重要的是启动主要压缩,因为它通过合并StoreFile(删除磁盘上已删除的数据,按rowkey排序数据,......)来改进HBase磁盘访问。
hbase-site.xml:
<!-- Disable major compaction -->
<property>
<name>hbase.hregion.majorcompaction</name>
<value>0</value>
</property>
手动运行主要压缩:
# Launch major compaction on all regions of table t1
$ echo "major_compact 't1'" | hbase shell
# Launch major compaction on region r1
$ major_compact 'r1'