2012-05-11 67 views
2

请分享您的想法。Flume将数据从MySQL迁移到Hadoop

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

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

什么是更好的方法。

回答

0

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

所以我想说Flume配置对于将数据近实时地推送到HDFS非常重要,然后剩下的取决于您的Map/Reduce群集性能以及如何针对正在处理的数据编写查询。

我还发现以下资源,让您使用水槽和HDFS理解: http://assets.en.oreilly.com/1/event/61/Real-time%20Streaming%20Analysis%20for%20Hadoop%20and%20Flume%20Presentation.pdf

0

事实上,flume更多地用于收集日志或其他时间序列数据。很少听到人们使用flume将数据从db导入到hadoop。

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

  1. 追加,这个可以让你重新运行sqoop工作,每一个新的工作开始了最后的老工作的结束位置。例如。第一个sqoop作业只导入了0-100行,那么下一个作业将从101开始,基于--last-value = 100。但即使0-100得到更新,追加模式也不会覆盖它们。

  2. 最后修改,这一个更糟糕的恕我直言,它要求源表有一个时间戳字段,指示行最后更新时间。然后基于时间戳,它执行增量更新导入。如果源表没有类似的东西,这个没用。

据我所知,对于这个没有完美的解决方案,如果你更在乎实时,添加触发器或使用水槽扫描编辑日志,并保持你的HBase在RT的方式更新,这听起来很讨厌我知道。或者使用Sqoop + Oozie,定期将您的源表导入HBase,您不会有RT或甚至RT附近的响应。到目前为止,考虑到周围没有其他东西,我会投票选择flume自定义源。

0

您可以使用Hadoop的施放器的MySQL的产品,它可以在这里找到http://labs.mysql.com/

它从MySQL实时传输数据到HDFS

0

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