【问题标题】:Using Hive for real time queries使用 Hive 进行实时查询
【发布时间】:2012-09-23 21:56:16
【问题描述】:

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

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

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

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

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

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

有什么我应该研究的专门用于大数据实时查询的技术吗?

任何提示将不胜感激!

【问题讨论】:

    标签: mysql hadoop mapreduce hive bigdata


    【解决方案1】:

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

    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 以再次进行低延迟访问。

    【讨论】:

    • 非常感谢克里斯,非常感谢您的时间和知识。正如你所说,我会更自在地定期创建带有预定义查询的 MySQL 表(我还没有确保它适用于该项目)我将看看 HBase,我知道它是仿照 Google 的 BigTable 建模的。它适合即时的?我为类似 SQL 的查询找到了 hbql.com。再次非常感谢!
    • HBase 仅在您的查询是键上的查找或范围扫描时才起作用。它是一个键值存储。
    • Mongo 和 cassandra 等 NoSQL 存储在这方面会有所帮助吗?我想它们的设计支持实时查询
    • 这个答案已经很老了,从那时起,NoSQL 存储和查询引擎有了重大的新发展。恐怕我对它们的研究不够广泛,无法详细说明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    相关资源
    最近更新 更多