使用Hive进行实时查询

Jor*_*elf 4 mysql hadoop hive mapreduce bigdata

首先,我想澄清一下,我正在学习Hive和Hadoop(以及一般的大数据),所以请原谅缺乏适当的词汇.

我正在开始一个巨大的(至少对我而言)项目,这个项目需要处理大量的数据,这些数据在过去我并不常用,因为我一直主要使用MySQL.

对于这个项目,一系列传感器每小时产生大约125.000.000个数据点(每天15.000.000.000),这比我在每个MySQL表中组合的所有内容都要多几倍.

我知道一种方法是使用Hadoop MapReduce和Hive来查询和分析数据.

我面临的问题是,对于我能学到的东西,我理解Hive主要像"cron jobs"而不是实时查询,可能需要很长时间才需要不同的基础设施.

我想基于Hive查询的结果创建MySQL表,因为最多需要实时查询的数据大约是1.000.000.000行,但我想知道这是否是正确的方法或我应该研究一些其他技术.

我是否应该研究哪种技术专门针对大数据进行实时查询?

任何提示将不胜感激!

Chr*_*ain 6

这是一个复杂的问题.让我们首先解决您在问题中提到的技术,并从那里开始:

  1. MySQL:对于使用MySQL(或任何其他关系数据库)的任何人来说,传统的开箱即用的MySQL安装永远不会支持你所谈论的卷应该是显而易见的.包络计算的背面足以告诉我们 - 假设你的传感器插入只有100个字节,你说的是150亿x 100字节= 1.5万亿字节或每天1.396太字节.这是真正的大数据,特别是如果您计划将其存储超过一天或两天.

  2. Hive:Hive当然可以处理那种数据量(我和其他许多人已经完成了它),但正如你所指出的那样,你不会得到实时查询.每个查询都是批处理的,如果您需要快速查询,则需要预先汇总数据.

现在,这将我们带到真正的问题 - 您需要运行什么样的查询?如果您需要运行任意的实时查询并且无法预测这些查询可能是什么,那么您可能需要考虑比较昂贵的专有数据存储,如Vertica,Greenplum,Microsoft PDW等.这些将花费大量成本.金钱,但他们和其他人可以处理你正在谈论的负担.

另一方面,如果您可以准确地预测将要运行的查询类型,那么像Hive这样的东西可能会有意义.将原始数据存储在那里,并使用批处理查询功能来完成繁重工作,并定期在MySQL或其他关系数据库中创建聚合数据表,以支持您对低延迟查询的需求.

还有一种选择就像HBase.HBase为您提供对分布式数据的低延迟访问,但是您丢失了两个您可能习惯使用的关键项 - 查询语言(HBase没有SQL)以及聚合数据的能力.要在HBase中进行聚合,您需要运行MapReduce作业,尽管该作业可以将其结果存储回HBase,以便再次进行低延迟访问.