首先,我想澄清一下,我正在学习Hive和Hadoop(以及一般的大数据),所以请原谅缺乏适当的词汇。
我正在开展一项庞大的(至少对我而言)项目,该项目需要处理过去我不习惯处理的大量数据,因为我一直主要使用MySQL。
对于这个项目,一系列传感器每小时产生大约125.000.000个数据点5次(每天15.000.000.000),这比我在每个MySQL表中组合的所有数据总和还要多几倍。
据我所知,一种方法是使用Hadoop MapReduce和Hive来查询和分析数据。
我面临的问题是,对于我能学到的东西,我理解Hive主要像“cron jobs”而不是实时查询,可能需要很长时间才需要不同的基础设施。
我想过根据Hive查询的结果创建MySQL表,因为最多需要实时查询的数据大约是1.000.000.000行,但我想知道这是否是正确的方法或者我应该研究一些其他技术。
我是否应该研究哪种技术专门针对大数据进行实时查询?
任何提示都将非常感谢!
答案 0 :(得分:6)
这是一个复杂的问题。让我们首先解决您在问题中提到的技术,并从那里开始:
MySQL:任何使用MySQL(或任何其他关系数据库)的人都应该明白,MySQL的传统开箱即用安装永远不会支持您所谈论的卷。包络计算的背面足以告诉我们 - 假设你的传感器插入只有100个字节,你说的是150亿x 100字节= 1.5万亿字节或每天1.396太字节。这是真正的大数据,特别是如果您计划将其存储超过一天或两天。
Hive:Hive当然可以处理那种数据量(我和其他许多人已经做过),但正如你所指出的那样,你不会得到实时查询。每个查询都是批处理的,如果您需要快速查询,则需要预先汇总数据。
现在我们想到了真正的问题 - 你需要运行什么样的查询?如果您需要运行任意的实时查询并且无法预测这些查询可能是什么,那么您可能需要考虑比较昂贵的专有数据存储,如Vertica,Greenplum,Microsoft PDW等。这些将花费大量成本。钱,但他们和其他人可以处理你正在谈论的负担。
另一方面,如果您可以准确地预测将要运行的查询类型,那么像Hive这样的东西可能会有意义。将原始数据存储在那里,并使用批处理查询功能来完成繁重工作,并定期在MySQL或其他关系数据库中创建聚合数据表,以支持您对低延迟查询的需求。
另一种选择就像HBase。 HBase为您提供对分布式数据的低延迟访问,但是您丢失了两个您可能习惯使用的关键项 - 查询语言(HBase没有SQL)以及聚合数据的能力。要在HBase中进行聚合,您需要运行MapReduce作业,不过该作业可以将其结果存储回HBase,以便再次进行低延迟访问。