我正在针对 hbase 集群运行 java mapreduce。
行键的格式为 UUID-yyyymmdd-UUID,行组将具有共同的第一个 UUID(行键前缀)。我将这些带有共享前缀的行称为组。
在我们的 hbase 集群中,我们有一些组包含比其他组更多的数据。一个群体的规模可能只有几千,也可能超过一百万。
据我了解,一个映射器将读取一个区域。
这意味着包含较大组的区域被分配给单个映射器,因此这个单个映射器被留下来处理大量数据。
我已经阅读并测试了将 hbase.hregion.max.filesize 参数设置为较低以便分割区域。这确实提高了 mapreduce 作业的性能,因为更多的映射器被编组来处理相同的数据。
但是,将此全局最大参数设置得较低也可能导致更多的数百或数千个区域,这会引入其自身的开销,因此不建议这样做。
现在我的问题:
除了应用全局最大值之外,是否可以根据行键前缀分割区域?这样,如果一大群人达到一定规模,它可能会蔓延到另一个地区。但较小的群体可以留在一个区域内,并将区域总数保持在尽可能低的水平。
希望这是有道理的!谢谢。