2012-05-11 170 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/