數據抽取工具調研

數據抽取簡述

數據抽取是從數據源中抽取數據的過程。實際應用中,數據源較多采用的是關係數據庫。從數據庫中抽取數據通常有如下幾種方式。mysql

(1)全量抽取

全量抽取相似於數據遷移或數據複製,它將數據源中的表或視圖的數據原封不動的從數據庫中抽取出來,並轉換成本身的ETL工具能夠識別的格式。全量抽取比較簡單。git

(2)增量抽取

增量抽取只抽取自上次抽取以來數據庫中要抽取的表中新增或修改的數據。在ETL使用過程當中。增量抽取較全量抽取應用更廣。如何捕獲變化的數據是增量抽取的關鍵。對捕獲方法通常有兩點要求:準確性,可以將業務系統中的變化數據按必定的頻率準確地捕獲到;性能,不能對業務系統形成太大的壓力,影響現有業務。目前增量數據抽取中經常使用的捕獲變化數據的方法有:github

  • 觸發器web

  • 時間戳redis

  • 全表對比。sql

數據抽取解決方案

下面將會對比幾種常見的數據抽取工具。每一種都有根據官網Demo進行驗證。數據庫

1.sqoop

sqoop是 apache 旗下一款「Hadoop 和關係數據庫服務器之間傳送數據」的工具。apache

input:MySQL,Oracle 導入數據到 Hadoop 的 HDFS、HIVE、HBASE 等數據存儲系統服務器

output:從 Hadoop 的文件系統中導出數據到關係數據庫 mysql架構

優勢

  • sqoop能夠高效的可控的利用資源,好比它能夠經過調整任務數,來控制任務的併發度,另外還能夠配置數據庫的訪問時間

  • sqoop能自動的完成數據類型的映射與轉換

  • sqoop學習成本低,上手就能夠用

  • sqoop2支持多種交互方式 命令行,webUI,restAPI。

建議:能夠經過sqoop完成平常的Mysql到Hive的基本組建。

2.waterdrop

waterdrop是github上開源的數據抽取工具。經過讀取配置文件,轉換成Spark任務。

input:ES,FileSystem,JDBC,Mysql MongoDB,HIVE

output:Mysql,Hive,ES,HDFS,Clickhouse

優勢:

  • waterdrop比較靈活,支持插件開發,同時爲spark任務,比sqoop同步數據速度快。

  • 能夠根據業務場景自定義開發插件,更加貼近業務場景

  • 支持多數據源配置。能夠進行join操做

建議:能夠經過waterdrop做爲mysql-hive的備用方案。

開發自定義組件,若是mysql表過大,能夠經過批量讀取的方式進行同步。使用成本比sqoop稍大。能夠做爲2redis,2clickhouse的工具使用,插件能夠根據業務進行自定義開發。

3.gobblin

gobblin是apache下開源的數據抽取工具 其功能則將流式數據轉換成批次數據,並存入HDFS上而且還能夠和Oozie,Akazban等調度系統和kafka結合實現數據的ETL處理。

input: KAFKA,MYSQL

output:HDFS,HIVE

優勢:

  • 組件均可以自定義編寫,使得Gobblin能夠應對幾乎任何形式的數據源,並將全部數據抽取任務統一管理。

  • Gobblin Job能夠以MapReduce的形式直接運行在Yarn上,在HDFS讀寫上具備更高效率。

建議:能夠經過gobblin做爲kafka-hive kafka-hdfs的工具使用。可是配置安裝比較複雜,須要學習成本,深刻研究

4.DataX

阿里的數據抽取工具。DataX目前已經有了比較全面的插件體系,主流的RDBMS數據庫、NOSQL、大數據計算系統都已經接入

input: MySQL,HIVE,OSS,HDFS

output:MySQL,HIVE,OSS,HDFS

優勢:

  • 獨立的架構,不依賴於MR或者SPARK任務,有清晰的資源使用狀況以及數據流量詳情

  • 能夠自定義開發組件

建議:編譯過程當中有比較多的BUG須要修復,社區比較少,代碼迭代不頻繁。暫時不建議做爲線上工具使用。

5.Flume

Flume是apache的頂級項目,目前更新至1.9版本,Flume是一個分佈式、可靠、和高可用的海量日誌聚合的系統。

input:KAFKA,FS

output:HDFS,HIVE

優勢

  • 使用簡單,配置話

  • 當傳入數據的速率超過能夠將數據寫入目的地的速率時,Flume充當數據生成器和集中存儲之間的中介器, 並在數據生成器和集中存儲之間提供穩定的數據流。

  • Flume是可靠的,容錯的,可擴展的,可管理的和可定製的

建議:

通過測試,發現Flume從Kafka讀取數據存儲至HDFS中,須要本身開發Source和Sink,用於處理PB格式數據,以及支持事件時間做爲分區依據。 Flume支持kafka的各類版本(gobblin只支持0.8,0.9版本)。能夠做爲Kafka2Hdfs插件,可是缺點爲只能進行簡單的過濾數據,不能對數據進行有效的清洗。 須要嚴格測試Flume的吞吐量。使用不當容易形成數據的堆積,致使任務中止,若是使用memory channel 則中間數據會丟失。

6.FlinkX

FlinkX是國內公司袋鼠雲開源的一款產品。剛剛開源,目前使用人數比較少,原理是轉成Flink任務在yarn上執行。相似於waterdrop。可是支持的面比較少。不作建議

7.MaxWell

MaxWell是一款mysql的binlog同步工具。大大的減小了開發量。能夠直接同步mysql的binlog到kafka。

通過測試,能夠實時同步至kafka。數據格式爲JSON,能夠做爲MysqlBinlog的同步工具,減小了開發量。

更多架構、PHP、GO、大數據相關踩坑實踐技巧請關注個人公衆號

相關文章
相關標籤/搜索