RDBMS->HDFS
全表導入
sqoop import \
--driver com.mysql.jdbc.Driver \
--connect jdbc:mysql://CentOS:3306/test?characterEncoding=UTF-8 \
--username root \
--password root \
--table t_user \
--num-mappers 4 \
--fields-terminated-by '\t' \
--target-dir /mysql/test/t_user \
--delete-target-dir
參數 | 含義 |
---|---|
–-connect | 連接的數據庫地址 |
-–username | 連接的數據庫的用戶名 |
–-password | 連接的數據庫的密碼 |
–-table | 想要導出數據的表 |
–target-dir | 要導入到hdfs中的目錄(如果不指定,默認存儲在“/user/用戶名/導入的表名” 目錄下) |
-–delete-target-dir | 表示如果在hdfs中有該目錄,則先刪除,然後再導入數據到該目錄下 |
–num-mappers | 表示設置的maptask個數,默認爲4個,決定最終在hdfs中生成的文件個數(將table中的數據分成幾個文件分別存儲) |
–fields-terminated-by | 指定字段的分割符號 |
字段導入
sqoop import \
--driver com.mysql.jdbc.Driver \
--connect jdbc:mysql://CentOS:3306/test?characterEncoding=UTF-8 \
--username root \
--password root \
--table t_user \
--columns id,name,age \
--where "id > 2 or name like '%z%'" \
--target-dir /mysql/test/t_user \
--delete-target-dir \
--num-mappers 4 \
--fields-terminated-by '\t'
字段 | 含義 |
---|---|
–columns | 指定要查詢的字段 |
–where | 指定過濾條件 |
導入查詢
sqoop import \
--driver com.mysql.jdbc.Driver \
--connect jdbc:mysql://CentOS:3306/test \
--username root \
--password root \
--num-mappers 3 \
--fields-terminated-by '\t' \
--query 'select id, name,sex, age ,birthDay from t_user where $CONDITIONS LIMIT 100 ' \
--split-by id \
--target-dir /mysql/test/t_user \
--delete-target-dir
如果要並行導入查詢結果,則每個Map任務將需要執行查詢的副本,其結果由Sqoop推斷的邊界條件進行分區。您的查詢必須包含令牌
$CONDITIONS
,每個Sqoop進程將用唯一條件表達式
替換該令牌。您還必須使用--split-by
選擇拆分列。
RDBMS -> Hive
全量導入
sqoop import \
--connect jdbc:mysql://CentOS:3306/test \
--username root \
--password root \
--table t_user \
--num-mappers 3 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-table baizhi.t_user
[root@CentOS ~]# cp /usr/apache-hive-1.2.2-bin/lib/hive-common-1.2.2.jar /usr/sqoop-1.4.7/lib/
[root@CentOS ~]# cp /usr/apache-hive-1.2.2-bin/lib/hive-exec-1.2.2.jar /usr/sqoop-1.4.7/lib/
導入分區
sqoop import \
--connect jdbc:mysql://CentOS:3306/test \
--username root \
--password root \
--table t_user \
--num-mappers 3 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-table baizhi.t_user \
--hive-partition-key city \
--hive-partition-value 'bj'
RDBMS-> Hbase
sqoop import \
--connect jdbc:mysql://CentOS:3306/test \
--username root \
--password root \
--table t_user \
--num-mappers 3 \
--hbase-table baizhi:t_user1 \
--column-family cf1 \
--hbase-create-table \
--hbase-row-key id \
--hbase-bulkload
參數 | 含義 |
---|---|
–hbase-table | 寫入hbase中的表 |
–column-family | 導入的列簇 |
–hbase-create-table | 創建表 |
–hbase-row-key | 指定字段作爲rowkey |
–hbase-bulkload | 啓動Hbase 批量寫入 |
HDFS -> MySQL
0 zhangsan true 20 2020-01-11
1 lisi false 25 2020-01-10
3 wangwu true 30 2020-01-17
create table t_user(
id int primary key auto_increment,
name VARCHAR(32),
sex boolean,
age int,
birthDay date
) CHARACTER SET=utf8;
sqoop-export \
--connect jdbc:mysql://CentOS:3306/test \
--username root \
--password root \
--table t_user \
--update-key id \
--update-mode allowinsert \
--export-dir /mysql/test/t_user \
--input-fields-terminated-by '\t'
導入模式可選值可以是updateonly或者allowinsert,updateonly僅僅會更新已經存在的記錄。
Hbase-> MySQL
1、現將Hbase數據->HIVE
[root@CentOS ~]# hive -e 'use baizhi;create table t_tmp as select * from t_employee'
create table t_employee(empno INT,
ename varchar(32),
job varchar(32),
mgr INT,
hiredate TIMESTAMP,
sal DECIMAL(7,2),
comm DECIMAL(7,2),
deptno INT)
2、將Hive數據導出到MySQL
sqoop-export \
--connect jdbc:mysql://CentOS:3306/test \
--username root \
--password root \
--table t_employee \
--export-dir '/user/hive/warehouse/baizhi.db/t_tmp' \
--input-fields-terminated-by '\001' \
--input-null-string '\\N' \
--input-null-non-string '\\N';
參數 | 含義 |
---|---|
–export-dir | 需要讀取的文件位置 |
–input-fields-terminated-by | 字段分割符號 |
–input-null-string | 對於一些字符串字段,出現該值認爲是null |
–input-null-non-string | 對於一些字符串非空字段,出現該值認爲是null |