如何处理HDInsight Hbase主要压缩?主要压缩发生时无法访问Hbase

时间:2016-05-19 11:41:05

标签: hbase hdinsight

我们安装了HDInsight Hbase集群,我们观察到当主要压缩进行时,Hbase无法访问客户端应用程序。

请建议处理此方案的最佳做法。

2 个答案:

答案 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.sizefs.azure.write.request.size至256kb,因此HBase集群中的最大blob将在12GB左右为256KB * 50k。如果你设置为4MB,它将是200GB。但是4MB会增加每次读/写的延迟,并且你将允许HBase压缩高达200GB的数据,这将持续数小时。

3)特别是对于基于云的HBase,主要压实成本很高。因为延迟高于本地磁盘/ SSD。对于读取性能,您可以设置安装在本地VM SSD上的存储区缓存,默认情况下应该在最新的HDInsight HBase集群上打开。

肯定可以进行更多调整,例如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'