我正在hbase集群上运行javamapreduce。
行键的格式为uuid yyymmdd uuid,行组将共用第一个uuid(行键前缀)。我将这些带有共享前缀的行称为组。
在我们的hbase集群中,有些组包含的数据比其他组多得多。一个群体的规模可能只有几千人,也可能超过一百万。
据我所知,一个Map绘制者将读取一个区域。
这意味着包含较大组的区域将被分配给单个Map器,因此该Map器将处理大量数据。
我已经阅读并测试了如何将hbase.hregion.max.filesize参数设置得更低,以便分割区域。这确实提高了mapreduce作业的性能,因为需要封送更多的Map程序来处理相同的数据。
但是,将此全局最大值参数设置得较低也会导致更多的数百或数千个区域,这会引入自己的开销,因此不建议这样做。
现在我的问题是:
是否可以基于rowkey前缀拆分区域,而不是应用全局max?这样,如果一个大的群体达到一定的规模,它可能会蔓延到另一个地区。但较小的群体可以保持在一个区域内,并尽可能地将区域的总数保持在较低的水平。
希望这有意义!谢谢。
1条答案
按热度按时间mitkmikd1#
当您在hbase中创建一个表时,如果您事先知道“有问题的”键前缀,您可以通过提供一个键列表(即范围)来拆分它—这是scala中的一个简单示例—但在java中几乎是相同的(除了一些样板代码:)
另外,当已经创建表时,可以使用相同的hbaseadmin split方法来分割特定区域