我目前有一个hadoop集群,在那里我存储了大量的日志,在这些日志上我运行pig脚本来计算聚合分析。我还有一个mongo集群,在那里存储生产数据。
我最近被安排在一个位置,我需要做很多一次性的分析查询,或者让其他人去做。这些查询经常需要同时使用生产数据和日志数据,所以不管我使用什么,我都希望所有的东西都放在一个地方。我的日志数据是json格式的,大约是prod数据的10倍。以下是我看到的mongo和hbase的优点/缺点:
mongo优点/缺点:
因为日志数据是json格式的,所以我可以很容易地将它导入mongo,而且我可以在它通过fluentd之类的东西传入时实时地完成这项工作。
与我共事的大多数人都有编写mongo查询的经验,不需要使用prod数据,因此在mongo上建立一个分析数据库对每个人来说都非常简单。
我对hbase的了解比mongo少得多。
不知道用json或从mongo获取数据到hbase有多容易/难。我想这不是很糟糕,但我没有看到太多的文档。
hbase优点/缺点:
我的日志数据比prod数据大得多,所以在hadoop和mongo中存储它要比在hadoop和mongo中存储prod数据贵得多。
我可以在已经运行的hadoop集群上构建hbase,并将我的prod数据放入其中,而无需添加许多额外的机器。如果我和mongo一起去,我需要一个全新的mongo集群。
我可以在hbase之上使用phoenix来允许一个简单的sql语法来访问我们的所有数据,但我不确定这对于基于文档的多级数据来说有多笨拙。
我现在对hbase知之甚少,我也不认为自己是mongoMaven,所以我可能错过了很多。
那么,我遗漏了什么,哪一个适合我的情况?
2条答案
按热度按时间pepwfjgg1#
首先,你应该使用一些你已经可以处理的东西。因此,mongodb似乎是一个不错的选择,尤其是当数据已经是json格式时。
另一方面,我使用hbase很长一段时间,虽然有很多行,但读取性能非常惊人,我真的不知道mongodb是否与hadoop有良好的快速集成。hbase是hadoop数据库,所以和hadoop一起工作是命中注定的。
如果日志可以索引(在hbase rowkey中):
hbase可以很好地用于这种查询模式。但是如果您决定使用hbase,使用phoenix framwork,那么使用熟悉的接口(如jdbc和类似sql的查询)将节省您的时间。它还提供了简单的聚合函数(count、avg、max、min),可能就足够了。
rqcrx0a62#
从您所说的来看,基于mongodb的解决方案似乎最适合您。
hbase是一个非常通用的工具,你可以让它满足你的产品需求和分析需求,但是通用sql功能(在phoenix,cloudera的impala和其他产品)还处于起步阶段,要获得高查询性能(为读取设计数据结构)的标准hbase方法将花费大量精力(尤其是因为您没有hbase方面的经验)。
顺便说一下,您可以使用map/reduces预聚合数据,然后将其加载到mongodb中,从而更好地利用当前的设置,而不是以任何方式对其进行更改