4

我必须每月在 HBase 表中存储有关实体的信息。我想处理迄今为止使用 mapreduce 逻辑的实体可用的所有月份详细信息。我很困惑是否为 HBase 表选择高窄或平宽设计。

使用平面宽方法,实体 ID 将保留为行键,月份 id 作为列限定符,详细信息作为限定符值。在 HBase-mapreduce 中,我可以获取地图和进程中实体的所有详细信息。

Tall-narrow 方法将存储行键作为实体 id 和月份的组合。此外,详细信息将存储在单独的列中。在 HBase -mapreduce 中,我必须在 map 中获取实体的详细信息,并在 reducer 中汇总所有月份的详细信息。

哪种方法更好并产生更好的性能?提前致谢。

4

1 回答 1

3

几个假设:

  • 您有许多实体,您希望每月保存一次它们的状态
  • 您希望从 MapReduce 作业中获得的结果会聚合这些实体并根据月份保存信息。例如,2013 年 1 月(所有实体)的数字是多少。
  • 您每月没有为每个实体存储大量信息

我认为Flat-Wide表格方法会产生更好的结果。

设计一个扁平而宽的表意味着你的所有实体数据都保持在一行中(这就是为什么大小不是很大很重要。如果我没记错的话,HBase 将数据存储在每个列族的块中,这就是压缩的级别发生..有关性能优化部分的建议下的更多信息)。由于所有这些都在一起,因此您应该能够快速获取任何实体信息,因为您拥有 rowkey-column family-column 量词信息。还假设实体标识符是散列的(或者你用散列前缀它们)你应该能够防止单调增加的键值。

关于运行 MapReduce 作业。由于此时您的数据均匀分布在所有区域服务器上,因此您的计算也将分布。这意味着所有机器都同样可能做相同数量的工作。但是,您也可以通过Tall-Narrow模型获得它(假设您正确设计了架构)。

于 2013-09-06T18:56:52.970 回答