2

请分享你的想法。

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

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

有什么更好的方法。

4

5 回答 5

3

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

于 2012-05-12T09:57:44.277 回答
1

你的问题的直接答案是肯定的。Flume 被设计为事件/日志结构化数据的分布式数据传输和聚合系统。如果设置“正确”,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

于 2012-05-11T17:47:53.080 回答
0

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

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

  1. 追加,这个允许你重新运行 sqoop 作业,每个新作业都从上一个旧作业结束的地方开始。例如。第一个 sqoop 作业仅导入第 0-100 行,然后下一个作业将根据 --last-value=100 从 101 开始。但是即使 0-100 更新了,追加模式也不会再覆盖它们了。

  2. last-modified,这个更糟糕的是恕我直言,它要求源表有一个时间戳字段,指示该行最后一次更新的时间。然后根据时间戳,进行增量更新导入。如果源表没有类似的东西,那么这个是没有用的。

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

于 2013-08-08T15:46:05.113 回答
0

你可以使用 MySQL 的一个产品 Hadoop Applier,它可以在这里找到http://labs.mysql.com/

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

于 2013-09-17T10:01:09.917 回答
0

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

于 2017-06-25T08:17:25.947 回答