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工具與數據庫同步數據進行網絡配置。