2

我目前有一个 Hadoop 集群,我在其中存储大量日志,我在这些日志上运行 pig 脚本来计算聚合分析。我还有一个存储生产数据的 Mongo 集群。

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

Mongo 优点/ HBase 缺点:

  1. 由于日志数据是 JSON 格式的,我可以很容易地将它输入 Mongo,并且我可以通过 FluentD 之类的东西实时执行此操作。
  2. 与我一起工作的大多数人已经有编写 Mongo 查询的经验,因为需要使用产品数据,因此在 Mongo 上建立一个分析数据库对每个人来说都非常简单。
  3. 我对 Hbase 的了解比 Mongo 少得多。
  4. 不知道以 JSON 格式或从 Mongo 获取数据到 Hbase 有多么容易/困难。我想这还不错,但是我看不到太多文档。

HBase 优点/Mongo 缺点:

  1. 我的日志数据比我的 prod 数据大得多,因此将其存储在 hadoop 和 mongo 中会比将 prod 数据存储在 hadoop 和 mongo 中要昂贵得多。
  2. 我可以在我已经运行的 Hadoop 集群之上构建 HBase,并在其中放置我的产品数据,而无需添加许多额外的机器。如果我选择 Mongo,我需要一个全新的 Mongo 集群。
  3. 我可以在 Hbase 上使用 Phoenix 来允许使用简单的 SQL 语法来访问我们所有的数据,但我不确定这对于基于文档的多级数据会有多笨拙。

我目前对 Hbase 知之甚少,而且我不会认为自己是 Mongo 专家,所以我可能遗漏了很多。

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

4

2 回答 2

2

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

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

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

producing_program_identifier, timestamp, ...

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

于 2013-09-26T07:36:15.080 回答
0

从您所说的看来,基于 mongoDB 的解决方案似乎最适合您。

HBase 用途非常广泛,您可以让它同时满足您的产品需求和分析需求,但是通用 SQL 功能(在 Phoenix、Cloudera 的 Impala 等中)还处于起步阶段,而标准的 HBase 方式可以获得高查询性能(为读取设计数据结构)将花费大量精力(尤其是因为您没有 HBase 经验)。

顺便说一句,它可能适用于您使用 map/reduce 预聚合数据,然后将其加载到 MongoDB 中,从而更好地利用您当前的设置,而不是以任何一种方式更改它

于 2013-05-15T08:05:43.330 回答