如果已经使用Hadoop,则为分析数据库提供HBase或Mongo?

时间:2013-05-15 02:22:53

标签: mongodb hadoop hbase hdfs

我目前有一个Hadoop集群,我在其中存储大量日志,我运行猪脚本来计算汇总分析。我还有一个Mongo集群,用于存储生产数据。

我最近被置于一个需要进行大量一次性分析查询或让其他人进行分析的位置。这些查询经常需要同时使用生产数据和日志数据,所以无论我使用什么,我都希望将所有内容放在一个地方。我的日志数据是json,大约是我的prod数据的10倍。以下是我看到的Mongo和HBase的优缺点:

Mongo Pros / HBase缺点:

  1. 由于日志数据是JSON,我可以很容易地将它放入Mongo,我可以通过像FluentD这样的实时实现。
  2. 我与之合作的大多数人都有编写Mongo查询需要使用prod数据的经验,因此在Mongo上获取分析数据库对每个人来说都非常简单。
  3. 我对Hbase的了解远不如Mongo。
  4. 不知道将数据用JSON或从Mongo获取到Hbase是多么容易/困难。我想这并不是那么糟糕,但我没有看到太多的文档。
  5. HBase Pros / Mongo缺点:

    1. 我的日志数据比我的prod数据大得多,因此将它存储在hadoop和mongo中比将我的prod数据存储在hadoop和mongo中要贵得多。
    2. 我可以在已经运行的Hadoop集群之上构建HBase,并在不增加额外机器的情况下将我的prod数据放入其中。如果我和Mongo一起去,我需要一个全新的Mongo集群。
    3. 我可以在Hbase之上使用Phoenix来允许一个简单的SQL语法来访问我们所有的数据,但我不确定这对于基于文档的多层次数据有多么不可靠。
    4. 我目前对Hbase知之甚少,我不认为自己是Mongo专家,所以我可能会错过很多。

      那么,我错过了什么,哪种情况适合我的情况呢?

2 个答案:

答案 0 :(得分:2)

首先,你应该使用你已经可以处理的东西。因此,Mongo DB似乎是一个不错的选择,特别是当数据已经是json格式时。

另一方面,我使用HBase已经有一段时间了,虽然有很多行但读取性能很惊人,我真的不知道Mongo DB与Hadoop是否有任何良好和快速的集成。 HBase是Hadoop数据库,因此预定与Hadoop一起使用。

如果可以通过(在HBase Rowkey中)索引日志:

producing_program_identifier, timestamp, ...

HBase可以很好地用于此查询模式。 但如果您决定使用HBase,请使用 phoenix framwork,它将节省您使用熟悉的接口(如jdbc和类似SQL的查询)的时间。它还提供简单的聚合函数(count,avg,max,min),这可能就足够了。

答案 1 :(得分:0)

根据您的说法,基于mongoDB的解决方案似乎最适合您。

HBase非常通用,您可以将其用于满足您的产品需求以及您的分析需求,但是通用SQL功能(在Phoenix,Cloudera的Impala等)处于初期阶段并且标准的HBase方式可以获得高查询性能(设计读取的数据结构)将花费很多精力(特别是因为你没有HBase的经验)。

顺便说一句,它可能适用于您使用map /减少预先聚合的数据,然后将其加载到MongoDB中,从而利用您当前的设置而不是改变它