在 Accumulo 中保存数据局部性

Preserving Data Locality in Accumulo

最近我一直在观察我的 Accumulo 集群上的数据局部性,我注意到它似乎随着时间的推移而恶化。我的直觉告诉我,这是因为 master 重新分配了 tablets 以帮助平衡集群,特别是在我完成滚动重启之后。

我正在考虑针对我的所有表设置手动主要压缩 运行 一夜之间,以使该数据局部性尽可能接近 100%。这是你们之前做过的事情吗?或者有更好的方法来处理这个问题吗?

只要您继续向 Accumulo 中写入更多数据,您就会有一个 "not-quite-100%" 位置测量。当您写入更多数据时,您将导致 tablets 分裂:一个 tablet 变成两个。通常,在拆分之后,其中一个子节点将被移动到另一台服务器,因为它会使 Accumulo 试图维护的 tablets 的分布无效。在拆分本身的子 tablet 自动进行主要压缩之前,您不会有任何位置。这实际上是一个领域,Accumulo 可以在平衡 tablets 方面做出更明智的决策,有利于 HDFS 局部性,而不仅仅是 tablets 在 tabletservers 之间的分布(但这将是一个主要的努力承担)。

对于您的情况,考虑 运行 在一夜之间(或您的 "off-peak" 时间)对 cron 进行重大压缩肯定不是荒谬的。我们甚至可以做一些聪明的事情,创建一个工具来判断 table 的所有 tablets 的位置,并实际减少低于某个位置阈值的 tablets 的数量(例如 <90% 本地)这将有助于避免重新压缩已经在本地的数据。

如有兴趣,欢迎订阅并留言至user@accumulo.apache.org;我很乐意在那里提供更详细的帮助。