HBase表设计 - 高窄与全宽的方法

时间:2013-09-05 17:41:32

标签: hadoop mapreduce hbase

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

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

高度狭窄的方法是将行密钥存储为实体ID和月份的组合。此外,详细信息将存储在一个单独的列中。在HBase -mapreduce中,我必须在map中获取entiy的详细信息,并在reducer中为所有月份汇总。

哪种方法更好,性能更好?提前谢谢。

1 个答案:

答案 0 :(得分:3)

一些假设:

  • 你有很多实体,你希望每月保存一次状态
  • 您希望MapReduce作业的结果聚合在这些实体上,并根据月份保存信息。例如2013年1月(所有实体)的数字是多少。
  • 每个实体每月不存储大量信息

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

设计一个扁平的宽表意味着你所有的实体数据都在一行中(这就是为什么重要的是大小并不大。如果我没记错的话,HBase会按照每列系列的数据存储数据,这就是水平发生压缩的地方.. Suggestions on performance optimization section下的更多信息。由于您拥有rowkey-column系列列量词信息,因此您应该能够快速获取任何实体信息。假设实体标识符要么经过哈希处理(或者用哈希作为前缀),您也应该能够阻止monotonically increasing个键值。

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