Hadoop HBase工作台设计-高-窄-平-宽方法

Hadoop HBase工作台设计-高-窄-平-宽方法,hadoop,mapreduce,hbase,Hadoop,Mapreduce,Hbase,我必须在HBase表中每月存储一个实体的相关信息。我想使用mapreduce逻辑处理到目前为止实体可用的所有月份详细信息。我不知道HBase表是选择高窄设计还是平宽设计 使用全平面方法,实体Id将保留为行键,月份Id保留为列限定符,详细信息保留为限定符值。在HBase mapreduce中,我可以在map和process中获取实体的所有详细信息 狭长的方法是将行键存储为实体id和月份的组合。在HBase-mapreduce中,我必须在map中获取实体的详细信息,并在reducer中聚合所有月份的

我必须在HBase表中每月存储一个实体的相关信息。我想使用mapreduce逻辑处理到目前为止实体可用的所有月份详细信息。我不知道HBase表是选择高窄设计还是平宽设计

使用全平面方法,实体Id将保留为行键,月份Id保留为列限定符,详细信息保留为限定符值。在HBase mapreduce中,我可以在map和process中获取实体的所有详细信息

狭长的方法是将行键存储为实体id和月份的组合。在HBase-mapreduce中,我必须在map中获取实体的详细信息,并在reducer中聚合所有月份的详细信息

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

一些假设:

  • 您有许多实体,并且希望每月保存一次它们的状态
  • 您希望从MapReduce作业中获得的结果将聚集在这些实体上,并根据月份保存信息。e、 g.2013年1月(所有实体)的数字是多少
  • 您并没有每月为每个实体存储大量信息
我认为
Flat-Wide
table方法会产生更好的结果

设计一个平面和宽度的表意味着所有实体数据都保持在同一行中(这就是为什么它的大小不是很大的原因。如果我没记错的话,HBase将数据存储在每个列族的块中,这是压缩发生的级别。更多信息见下)。由于所有这些都在一起,您应该能够快速获取任何实体信息,因为您拥有rowkey列族列量词信息。另外,假设实体标识符是散列的(或者您用散列作为前缀),您也应该能够阻止键值


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

因此,您必须每月存储一次信息,有多少?信息粒度是每月一次的。一个实体的特定每月信息可能会经常更新。要存储的信息也包括500个键值。可能有数百万个这样的实体。我没有数据量的确切数字。