Sqoop是一款Apache社區的開源軟件,支持在Hadoop生態軟件和結構化數據集(例如數據庫)之間進行高效的批量數據傳輸。

背景信息

將MySQL數據導入HDFS

在Master節點上執行如下命令。
sqoop import --connect <dburi>/<dbname> --username <username> --password <password> --table <tablename> --target-dir <hdfs-dir> --split-by <split-column> --check-column <col> --incremental <mode> --last-value <value>
參數 描述
dburi 數據庫的訪問鏈接。例如jdbc:mysql://192.168.**.**:3306/。
dbname 數據庫的名稱。
username 數據庫登錄用戶名。
password 數據庫登錄密碼。
tablename MySQL表的名稱。
hdfs-dir HDFS的寫入目錄。例如/user/hive/result。
split-column 可選參數。指定一個用于切分任務的列,默認為表主鍵列。
col 可選參數。增量導入場景的檢查列。
mode 可選參數。增量導入模式,支持append和lastmodified兩種模式。
value 可選參數。指定上次增量導入的檢查列的最大值。

詳細的參數信息請參見Sqoop Import

將HDFS數據導入MySQL

創建好對應HDFS中的數據結構的MySQL表后,在集群的Master節點上執行如下命令。
sqoop export --connect <dburi>/<dbname> --username <username> --password <password> --table <tablename> --export-dir <hdfs-dir>
參數 描述
dburi 數據庫的訪問鏈接。例如jdbc:mysql://192.168.**.**:3306/。
dbname 數據庫的名稱。
username 數據庫登錄用戶名。
password 數據庫登錄密碼。
tablename MySQL表的名稱。
hdfs-dir HDFS的寫入目錄。例如/user/hive/result。

詳細的參數信息請參見Sqoop Import。

將MySQL數據導入Hive

在集群的Master節點上執行如下命令。
sqoop import --connect <dburi>/<dbname> --username <username> --password <password> --table <tablename> --check-column <col> --incremental <mode> --last-value <value> --fields-terminated-by "\t" --lines-terminated-by "\n" --hive-import --target-dir <hdfs-dir> --hive-table <hive-tablename>
參數 描述
dburi 數據庫的訪問鏈接。例如jdbc:mysql://192.168.**.**:3306/
dbname 數據庫的名稱。
username 數據庫登錄用戶名。
password 數據庫登錄密碼。
tablename MySQL表的名稱。
col 可選參數。增量導入場景的檢查列。
mode 可選參數。增量導入模式,支持append和lastmodified兩種模式。
value 可選參數。指定上次增量導入的檢查列的最大值。
hdfs-dir HDFS的寫入目錄。例如/user/hive/result。
hive-tablename Hive中的表名。

詳細的參數信息請參見Sqoop Import。

將Hive數據導入MySQL

執行命令與導入HDFS數據至MySQL一致,但需要指定Hive表對應的HDFS路徑。詳情請參見將HDFS數據導入MySQL

將MySQL數據導入OSS

在集群的Master節點上執行如下命令。
sqoop import --connect <dburi>/<dbname> --username <username> --password <password> --table <tablename> --target-dir <oss-dir> --temporary-rootdir <oss-tmpdir> --check-column <col> --incremental <mode> --last-value <value>
參數 描述
dburi 數據庫的訪問鏈接。例如jdbc:mysql://192.168.**.**:3306/。
dbname 數據庫的名稱。
username 數據庫登錄用戶名。
password 數據庫登錄密碼。
tablename MySQL表的名稱。
oss-dir OSS的寫入目錄。例如oss://<accessid>:<accesskey>@<bucketname>.oss-cn-hangzhou-internal.aliyuncs.com/result。
oss-tmpdir 臨時寫入目錄。指定mode為append模式時,需要指定該參數。

采用append模式后,Sqoop會先將數據導入臨時目錄,然后將文件重命名為正常目標目錄。如果目標目錄已經存在于HDFS中,則Sqoop拒絕導入并覆蓋該目錄的內容。

col 可選參數。增量導入場景的檢查列。
mode 可選參數。增量導入模式,支持append和lastmodified兩種模式。
value 可選參數。指定上次增量導入的檢查列的最大值。

詳細的參數信息請參見Sqoop Import。

將OSS數據導入MySQL

創建好對應OSS中數據結構的MySQL表后,在集群的Master節點上執行如下命令。
sqoop export --connect <dburi>/<dbname> --username <username> --password <password> --table <tablename> --export-dir <oss-dir>
參數 描述
dburi 數據庫的訪問鏈接。例如jdbc:mysql://192.168.**.**:3306/。
dbname 數據庫的名稱。
username 數據庫登錄用戶名。
password 數據庫登錄密碼。
tablename MySQL表的名稱。
oss-dir OSS的寫入目錄。例如oss://<accessid>:<accesskey>@<bucketname>.oss-cn-hangzhou-internal.aliyuncs.com/result

詳細的參數信息請參見Sqoop Import

使用SQL作為導入條件

命令和參數如下所示。
sqoop import --connect <dburi>/<dbname> --username <username> --password <password> --query <query-sql> --split-by <sp-column> --hive-import --hive-table <hive-tablename> --target-dir <hdfs-dir>
參數 描述
dburi 數據庫的訪問鏈接。例如jdbc:mysql://192.168.**.**:3306/。
dbname 數據庫的名稱。
username 數據庫登錄用戶名。
password 數據庫登錄密碼。
query-sql 使用的查詢語句。例如SELECT * FROM profile WHERE id>1 AND \$CONDITIONS。
sp-column 進行切分的條件。通常跟MySQL表的主鍵有關。
hdfs-dir HDFS的寫入目錄。例如/user/hive/result。
hive-tablename Hive中的表名。

詳細的參數信息請參見Sqoop Import

集群和其他數據庫的網絡配置請參見在 E-MapReduce上使用 Sqoop工具與數據庫同步數據進行網絡配置