1.Sqoop與DataX
Sqoop依賴於Hadoop生態,充分利用了map-reduce計算框架,在Hadoop的框架中運行,對HDFS、Hive支持友善,在處理數倉大表的速度相對較快,但不具備統計和校驗能力。
DataX無法分布式部署,需要依賴調度系統實現多客戶端,可以在傳輸過程中進行過濾,並且可以統計傳輸數據的信息,因此在業務場景復雜(表結構變更)更適用,同時對於不同的數據源支持更好,同時不支持自動創建表和分區。支持流量控制,支持運行信息收集,及時跟蹤數據同步情況。
DataX框架設計:
Sqoop采用命令行的方式調用,比如容易與我們的現有的調度監控方案相結合,DataX采用xml 配置文件的方式,在開發運維上還是有點不方便。
Sqoop只可以在關系型數據庫和Hadoop組件之間進行數據遷移,而在Hadoop相關組件之間,比如hive和hbase之間就無法使用sqoop互相導入導出數據,同時在關系型數據庫之間,比如mysql和oracle之間也無法通過sqoop導入導出數據。與之相反,DataX能夠分別實現關系型數據庫Hadoop組件之間、關系型數據庫之間、Hadoop組件之間的數據遷移。
2.Sqoop與Canal
Sqoop: 同步全量數據,能夠實現對關系型數據的全量同步,但在很多業務場景下,由於數據量非常大,每天全量同步,對於Hadoop的壓力較大,因此要慎用。
Canal: 主要用途是基於 MySQL 數據庫增量日志解析,提供增量數據訂閱和消費,只同步更新的數據。也可以配置MQ模式,配合RocketMQ或者Kafka,Canal會把數據發送到MQ的topic中,然后通過消息隊列的消費者進行處理。
Canal的工作原理就是把自己偽裝成MySQL slave,基於監聽binlog日志去進行同步數據的。
