将数据从MySQL拉入Hadoop

时间:2010-06-19 08:04:12

标签: mysql hadoop

我刚刚开始学习Hadoop,我想知道以下内容:假设我有一堆我想分析的大型MySQL生产表。

  1. 似乎我必须将所有表转储到文本文件中,以便将它们带入Hadoop文件系统 - 这是正确的,还是有某种方式可以让Hive或Pig或其他任何东西直接从MySQL访问数据?
  2. 如果我将所有生产表转储到文本文件中,是否需要担心在转储期间影响生产性能? (它取决于表所使用的存储引擎吗?如果是这样我该怎么办?)
  3. 最好将每个表转储到一个文件中,还是将每个表拆分为64mb(或我的块大小)文件?

2 个答案:

答案 0 :(得分:10)

从mysql导入数据非常容易。我建议你使用Cloudera的hadoop发行版,它带有名为'sqoop'的程序,它提供了非常简单的接口,可以直接从mysql导入数据(也支持其他数据库)。 Sqoop可以与mysqldump或普通的mysql查询一起使用(select * ...)。 使用此工具,无需手动将表分区为文件。但对于hadoop来说,拥有一个大文件要好得多。

有用的链接:
Sqoop User Guide

答案 1 :(得分:1)

2)
由于我不了解你的环境,我会对安全方面采取措施 - 是的,担心影响生产性能。

根据所写数据的频率和数量,您可能会发现它在可接受的时间内处理,特别是如果您只是在编写新的/更改的数据。 [视您查询的复杂程度而定]

如果您不需要实时或者您的服务器通常处于未使用状态(一夜之间?),那么您可以在此时创建文件。

根据您的环境设置方式,您可以复制/登录到特定的数据库服务器,他们唯一的工作就是创建您的数据文件。


第3)
您无需拆分文件,HDFS将负责将数据文件分区为块并通过群集进行复制。默认情况下,它会自动拆分为64mb数据块 见 - Apache - HDFS Architecture

re:Wojtek回答 - SQOOP clicky(在评论中不起作用)

如果您有更多问题或特定环境信息,请告知我们 HTH 拉尔夫