0

我们有一个使用 MySQL 数据库作为数据存储的产品。数据存储包含大量数据。我们面临的问题是应用程序的响应时间很慢。数据库查询非常基本,连接非常简单(如果有的话)。一些资深员工表示,响应时间缓慢的根本原因是对庞大数据存储的数据库操作。

我们公司的另一个团队过去曾参与过一个项目,他们使用 Hadoop 处理大型固定格式文件,并将这些文件的内容转储到数据库表中。借用这个项目,一些团队成员觉得我们可以从使用 MySQL 数据库迁移到简单的固定格式文件来保存数据。将有一个文件对应于数据库中的每个表。然后,我们可以构建另一个数据交互层,提供对这些文件中的内容执行 DML 操作的接口。该层将使用 Hadoop 和 MapReduce 编程模型开发。

在这一点上,我想到了几个问题。1. 问题陈述是否适合使用 Hadoop 解决的问题类型?2. 应用程序将如何要求数据交互层获取/更新/删除所需的数据?据我了解,包含数据的文件将驻留在 HDFS 上。我们将生成一个 Hadoop 作业,它将处理所需的文件(类似于 db 中的表)并获取所需的数据。此数据将写入 HDFS 上的输出文件。我们将不得不解析这个文件以获得所需的内容。3. 使用固定格式文件并用 Hadoop 处理它们的方法真的能解决问题吗?

我已经设法用两台 Ubuntu 机器建立了一个简单的节点集群,但是在玩了一段时间 Hadoop 之后,我觉得问题陈述不适合 Hadoop。我可能完全错了,因此想知道 Hadoop 是否适合这种情况,还是只是浪费时间,因为问题陈述与 Hadoop 的含义不符?

4

2 回答 2

1

我建议直接去 Hive (http://hive.apache.org/)。它是构建在 Hadoop MR 之上的 SQL 引擎/数据仓库。简而言之 - 它获得了 Hadoop 可扩展性和 hadoop 高延迟。
我会考虑在那里存储大量数据,进行所有必需的转换,并且只将汇总数据移动到 MySQL 以服务查询。通常将用户请求转换为配置单元查询并不是一个好主意——它们太慢了,并行运行作业的能力并非微不足道。

于 2012-07-24T11:03:49.307 回答
0

如果您计划更频繁地更新数据,那么直接存储在 hadoop 中可能不是您的好选择。要在 hadoop 中更新文件,您可能必须重写文件,然后删除旧文件并在 hdfs 中复制新文件。

但是,如果您只是搜索和加入数据,那么它是一个不错的选择。如果您使用配置单元,那么您可以进行一些查询,如 sql.

在 hadoop 中,您的工作流程可能如下所述:

  1. 您将为查询运行 hadoop 作业。

  2. 您的 hadoop 程序将解析查询并执行一些作业以根据您的查询和输入参数加入和读取文件。

  3. 您的输出将在 hdfs 中生成。

  4. 您将输出复制到本地文件系统。然后将输出显示到您的程序。

于 2012-07-24T15:55:00.513 回答