Flume将数据从MySQL迁移到Hadoop

时间:2012-05-11 09:07:50

标签: hadoop hbase flume

请分享您的想法。

要求是将MySQL数据库中的数据迁移到Hadoop / HBase以进行分析。

数据应实时迁移或接近实时迁移。水槽可以支持这一点。

什么是更好的方法。

5 个答案:

答案 0 :(得分:3)

根据我的理解,Flume不是为了这个。 Flume基本上用于读取数据源(平面文件)等日志,并以结构化方式将它们推送到接收器。 Sqoop可以使用,试一试 http://archive.cloudera.com/cdh/3/sqoop/SqoopUserGuide.html

答案 1 :(得分:0)

你问题的直接答案是肯定的。 Flume被设计为用于事件/日志结构化数据的分布式数据传输和聚合系统。如果设置“正确”,水槽可以推送数据以便在Hadoop中持续摄取。这是当Flume正确设置以从各种来源(在本例中为MySql)收集数据时,我确信如果数据在源处可用,Flume中的接收器将以毫秒级别将其同步到HDFS。一旦HDFS / HBASE上有数据,您就可以对其进行查询,并且可以根据基础设施进行处理。

所以我想说Flume配置对于将数据近乎实时地推送到HDFS非常重要,其余的依赖于你的Map / Reduce集群性能以及如何根据正在处理的数据编写查询。

我还使用Flume和HDFS找到了以下资源供您理解: http://assets.en.oreilly.com/1/event/61/Real-time%20Streaming%20Analysis%20for%20Hadoop%20and%20Flume%20Presentation.pdf

答案 2 :(得分:0)

实际上,水槽更多地用于收集日志或其他时间序列数据。几乎听不到人们使用水槽将数据从db导入hadoop。

Sqoop适用于从RDBMS到HDFS / Hive / HBase的批量导入。如果它只是一次导入,它非常好,它做了它在纸上的承诺。但是,当您想要实时增量更新时,问题就出现了。在Sqoop支持的两种类型的增量更新之间:

  1. 追加,这个允许您重新运行sqoop作业,并且每个新作业都从最后一个旧作业结束的地方开始。例如。第一个sqoop作业只导入行0-100,然后下一个作业将从101开始 - 基于--last-value = 100。但即使0-100已更新,附加模式也不会再覆盖它们。

  2. 最后修改过,这个更糟糕的是恕我直言,它要求源表有一个时间戳字段,表示该行何时上次更新。然后根据时间戳,它执行增量更新导入。如果源表没有这样的东西,那么这个没用。

  3. AFAIK,没有完美的解决方案,如果您更关心实时,添加触发器或使用水槽扫描编辑日志并让您以RT方式更新HBase,这听起来很讨厌我知道。或者使用Sqoop + Oozie,定期将您的源表导入HBase,您不会有RT或甚至近RT响应。到目前为止,鉴于周围没有其他任何东西,我会投票支持水槽定制来源。

答案 3 :(得分:0)

您可以将Hadoop Applier作为MySQL的产品使用,可在此处找到http://labs.mysql.com/

它实时将数据从MySQL传输到HDFS

答案 4 :(得分:0)

我使用flume在HDSF和MySQL中存储数据。对于后者,我使用JDBC com.stratio.ingestion.sink.jdbc.JDBCsink。但我对它的表现并不是很满意。由于您需要从MySQL迁移数据,我建议使用Sqoop。另一个选择是使用Flume将数据发送到MySQL和HBase / Hadoop,因此您不需要从MySQL复制到Hadoop /