我目前有一个 Hadoop 集群,其中存储了大量日志,我在这些日志上运行 Pig 脚本来计算聚合分析。我还有一个 Mongo 集群,用于存储生产数据。
我最近被置于需要执行大量一次性分析查询或允许其他人执行这些查询的位置。这些查询经常需要同时使用生产数据和日志数据,因此无论我使用什么,我都希望将所有内容都集中在一处。我的日志数据采用 json 格式,大约是产品数据大小的 10 倍。以下是我看到的 Mongo 和 HBase 的优缺点:
Mongo 优点/HBase 缺点:
- 由于日志数据采用 JSON 格式,因此我可以非常轻松地将其导入 Mongo,并且当它通过 FluentD 之类的工具传入时,我可以实时执行此操作。
- 与我一起工作的大多数人都已经有编写 Mongo 查询的经验,因为需要使用产品数据,因此在 Mongo 上建立分析数据库对于每个人来说都非常简单。
- 我对 Hbase 的了解比 Mongo 少得多。
- 不知道以 JSON 格式获取数据或从 Mongo 获取数据到 Hbase 有多容易/有多困难。我想这还不错,但我没有看到太多文档。
HBase 优点/Mongo 缺点:
- 我的日志数据比我的产品数据大得多,因此将其存储在 hadoop 和 mongo 中比将我的产品数据存储在 hadoop 和 mongo 中要昂贵得多。
- 我可以在已经运行的 Hadoop 集群之上构建 HBase,并将我的产品数据放入其中,而无需添加许多额外的机器。如果我选择 Mongo,我需要一个全新的 Mongo 集群。
- 我可以在 Hbase 之上使用 Phoenix,以允许使用简单的 SQL 语法来访问我们的所有数据,但我不确定这对于基于多级文档的数据来说有多笨拙。
我目前对 Hbase 知之甚少,而且我也不认为自己是 Mongo 专家,所以我可能错过了很多。
那么,我错过了什么,哪一个适合我的情况?
最佳答案
首先,你应该使用你已经可以处理的东西。因此,Mongo DB 似乎是一个不错的选择,特别是当数据已经是 json 格式时。
另一方面,我使用HBase已经有一段时间了,尽管行数很多,但读取性能令人惊叹,我真的不知道Mongo DB与Hadoop是否有任何良好且快速的集成。 HBase是Hadoop数据库,所以它注定要和Hadoop一起工作。
如果日志可以通过(在 HBase Rowkey 中)建立索引:
producing_program_identifier, timestamp, ...
HBase 可以很好地适应这种查询模式。 但如果您决定使用 HBase,请使用 phoenix framwork ,它将节省您使用熟悉的接口(interface)(例如 jdbc 和类似 sql 的查询)的时间。它还提供简单的聚合函数(count、avg、max、min),这可能就足够了。
关于mongodb - 如果已经使用 Hadoop,则可以使用 HBase 或 Mongo 来构建分析数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16555751/