如果已经使用 Hadoop,HBase 或 Mongo 用于分析数据库?
Posted
技术标签:
【中文标题】如果已经使用 Hadoop,HBase 或 Mongo 用于分析数据库?【英文标题】:HBase or Mongo for an Analytics DB if already using Hadoop? 【发布时间】:2013-05-15 02:22:53 【问题描述】:我目前有一个 Hadoop 集群,我在其中存储大量日志,我在这些日志上运行 pig 脚本来计算聚合分析。我还有一个存储生产数据的 Mongo 集群。
我最近处于需要执行大量一次性分析查询或让其他人执行这些查询的位置。这些查询经常需要同时使用生产数据和日志数据,所以无论我使用什么,我都希望将所有东西都放在一个地方。我的日志数据是 json 格式,大约是我的 prod 数据大小的 10 倍。以下是我看到的 Mongo 和 HBase 的优缺点:
Mongo 优点/HBase 缺点:
-
由于日志数据采用 JSON 格式,我可以很容易地将其导入 Mongo,并且可以通过 FluentD 之类的工具实时执行此操作。
与我一起工作的大多数人已经有了编写 Mongo 查询的经验,因为需要使用产品数据,因此在 Mongo 上建立一个分析数据库对每个人来说都非常简单。
我对 Hbase 的了解远不如 Mongo。
不知道以 JSON 格式或从 Mongo 获取数据到 Hbase 有多么容易/多么困难。我想这还不错,但我没有看到太多文档。
HBase 优点/Mongo 缺点:
-
我的日志数据比我的 prod 数据大得多,因此将其存储在 hadoop 和 mongo 中会比将我的 prod 数据同时存储在 hadoop 和 mongo 中要昂贵得多。
我可以在我已经运行的 Hadoop 集群之上构建 HBase,并在其中放置我的产品数据,而无需添加许多额外的机器。如果我使用 Mongo,我需要一个全新的 Mongo 集群。
我可以在 Hbase 之上使用 Phoenix,以允许使用简单的 SQL 语法来访问我们的所有数据,但我不确定这对于基于文档的多级数据会有多笨拙。
我目前对 Hbase 知之甚少,而且我不会认为自己是 Mongo 专家,所以我可能错过了很多。
那么,我缺少什么,哪个适合我的情况?
【问题讨论】:
您是说在 MongoDB 和 Hadoop 中存储原始日志以进行查询,还是在 Hadoop 中进行某种聚合并将聚合结果存储在 MongoDB 中? 我想将原始日志存储在一个或另一个中,以便快速运行查询而无需复杂的聚合(通常我可以很好地利用索引)。无论我使用什么,我仍然需要继续在 HDFS 中存储原始日志,以及在 hadoop 上运行复杂的分析查询。我知道我可以通过 Mongo 的聚合框架或使用 Mongo 的 Hadoop 连接器来完成其中的一些工作,但前者对于我的情况来说是不够的,而后者由于从 Mongo 到 HDFS 的所有数据传输而速度很慢。题外话:前几天在MongoSF看了你的演讲,真的很不错! hmmm... 似乎 MongoDB 查询比您使用 HBase 可以做的灵活得多(但我显然对 MongoDB 以及您可以查询它的所有方式更加熟悉有偏见) .题外话:谢谢! :) 您希望执行哪种类型的“分析查询”?您需要什么样的查询性能? @ArnonRotem-Gal-Oz 毫秒到秒。这些是通常使用索引的简单查询。类似于 SQL,但数据量非常大。 tl;dr:你希望在 Mongo 上能在几毫秒到几秒内完成的事情。 【参考方案1】:首先,你应该使用你已经可以处理的东西。因此,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),这可能就足够了。
【讨论】:
【参考方案2】:从您所说的看来,基于 mongoDB 的解决方案似乎最适合您。
HBase 用途广泛,您可以使用它来满足您的产品需求和分析需求,但是通用 SQL 功能(在 Phoenix、Cloudera 的 Impala 等中)还处于起步阶段,标准的 HBase 获取方式高查询性能(为读取设计数据结构)需要付出很多努力(尤其是因为您没有 HBase 经验)。
顺便说一下,它可能适用于您使用 map/reduce 预聚合数据,然后将其加载到 MongoDB 中,从而更好地利用您当前的设置,而不是以任何一种方式进行更改
【讨论】:
以上是关于如果已经使用 Hadoop,HBase 或 Mongo 用于分析数据库?的主要内容,如果未能解决你的问题,请参考以下文章
如果我们使用Hadoop处理大数据,那么数据会存储在哪里因为hadoop数据库HBase存储结构化数据而大数据是非结构化数据