sqoop主要用來做離線任務,每天定時執行腳本。
canal和maxwell主要用來做實時任務或拉鏈表,實時監控表的變化。
Sqoop
項目經驗
Hive中的Null在底層是以“\N”來存儲,而MySQL中的Null在底層就是Null,為了保證數據兩端的一致性。在導出數據時采用--input-null-string和--input-null-non-string兩個參數。導入數據時采用--null-string和--null-non-string。
canal
原理:偽裝成mysql master的從機。拷貝binlog的內容到本機。
MySQL主從復制過程
- Master主庫將改變記錄,寫到二進制日志(binary log)中
- Slave從庫向mysql master發送dump協議,將master主庫的binary log events拷貝到它的中繼日志(relay log);
- Slave從庫讀取並重做中繼日志中的事件,將改變的數據同步到自己的數據庫。

maxwell
抓取msql變化的原理也是基於binlog,但是它只有一個server把數據發送到消息隊列或redis。
Maxwell和canal工具對比
- Maxwell沒有canal那種server+client模式,只有一個server把數據發送到消息隊列或redis。如果需要多個實例,通過指定不同配置文件啟動多個進程。
- Maxwell有一個亮點功能,就是canal只能抓取最新數據,對已存在的歷史數據沒有辦法處理。而Maxwell有一個bootstrap功能,可以直接引導出完整的歷史數據用於初始化,非常好用。
- Maxwell不能直接支持HA,但是它支持斷點還原,即錯誤解決后重啟繼續上次點兒讀取數據。
- Maxwell只支持json格式,而Canal如果用Server+client模式的話,可以自定義格式。
- Maxwell比Canal更加輕量級。maxwell記錄的每一行數據是一個SQL命令引起的一行變化,而canal記錄的每一行數據是一個SQL命令引起的一個表的所有變化。
