Sqoop 是 Apache Hadoop 生態中用於關係型資料庫與 HDFS/Hive 之間高效傳輸資料的工具,底層利用 MapReduce 實現並行導入導出。本文以 CDH3 版本為例,記錄完整安裝、配置與測試流程。
hadoop-0.20.2-CDH3B4sqoop-1.2.0-CDH3B4mysql-connector-java-5.1.10-bin.jartar -zxvf sqoop-1.2.0-CDH3B4.tar.gz tar -zxvf hadoop-0.20.2-CDH3B4.tar.gz
cp mysql-connector-java-5.1.10-bin.jar sqoop-1.2.0-CDH3B4/lib/ cp hadoop-0.20.2-CDH3B4/hadoop-core-0.20.2-CDH3B4.jar sqoop-1.2.0-CDH3B4/lib/
chown -R hadoop:hadoop sqoop-1.2.0-CDH3B4 mv sqoop-1.2.0-CDH3B4 /home/hadoop/
vi /home/hadoop/sqoop-1.2.0-CDH3B4/bin/configure-sqoop # 註釋掉 HBASE_HOME 及 ZOOKEEPER_HOME 的檢查邏輯
# /home/hadoop/.bash_profile export HADOOP_HOME=/home/hadoop/hadoop-0.20.2 export HIVE_HOME=/home/hadoop/hive-0.10.0 export MAHOUT_HOME=/home/hadoop/mahout-distribution-0.7 export PATH=$HADOOP_HOME/bin:$HIVE_HOME/bin:$MAHOUT_HOME/bin:$PATH
執行 source .bash_profile 生效。
sqoop list-databases \ --connect jdbc:mysql://192.168.1.152:3306/ \ --username sqoop --password sqoop
sqoop import \ --connect jdbc:mysql://192.168.1.152:3306/sqoop \ --username sqoop --password sqoop \ --table test --hive-import -m 1
-m 1 指定 1 個 Map 任務;生產環境可依資料量調大。
| 命令 | 用途 | 範例 |
|---|---|---|
| list-databases | 列出所有資料庫 | sqoop list-databases --connect jdbc:mysql://host:3306/ -u root -p |
| list-tables | 列出指定資料庫的表 | sqoop list-tables --connect jdbc:mysql://host:3306/db -u root -p |
| create-hive-table | 僅同步表結構到 Hive | sqoop create-hive-table --connect ... --table src --hive-table dst |
| import | 導入資料到 HDFS/Hive | sqoop import --connect ... --table t --hive-import --hive-table ht -m 4 |
| export | 從 HDFS/Hive 導出到 RDBMS | sqoop export --connect ... --table t --export-dir /user/hive/warehouse/t |
| import (增量) | 增量導入 | sqoop import ... --check-column id --incremental append --last-value 100 |
-P 交互輸入或 --password-file。--direct 使用 mysqldump 快速通道。\001,可用 --fields-terminated-by 自定義。