5

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

我正在着手进行一个巨大的(至少对我而言)项目,该项目需要处理大量数据,这些数据我过去不习惯处理,因为我一直主要使用 MySQL。

对于这个项目,一系列传感器将每小时 5 次(每天 15.000.000.000 个)产生大约 125.000.000 个数据点,这是我插入到每个 MySQL 表中的所有数据加起来的几倍。

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

我面临的问题是,据我所知,我理解 Hive 的运行主要类似于“cron 作业”,而不是实时查询,这可能需要数小时并需要不同的基础架构。

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

有没有我应该研究专门为大数据实时查询而创建的技术?

任何提示将不胜感激!

4

1 回答 1

7

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

  1. MySQL:任何使用过 MySQL(或任何其他关系数据库)的人都应该清楚,传统的开箱即用 MySQL 安装永远不会支持您所说的卷。信封背面的计算足以告诉我们 - 假设您的传感器插入只有 100 字节,那么您说的是每天 150 亿 x 100 字节 = 1.5 万亿字节或 1.396 TB。这是真正的大数据,特别是如果您计划将其存储一两天以上。

  2. Hive:Hive 确实可以处理这种数据量(我和许多其他人都做过),但是正如您所指出的,您无法获得实时查询。每个查询都将成批进行,如果您需要快速查询,则需要预先聚合数据。

现在这给我们带来了真正的问题——你需要运行什么样的查询?如果您需要运行任意的实时查询并且永远无法预测这些查询可能是什么,那么您可能需要寻找相对昂贵的专有数据存储,如 Vertica、Greenplum、Microsoft PDW 等。这些将花费很多钱,但他们和其他人可以处理你所说的负担。

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

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

于 2012-10-03T01:25:04.763 回答