sudo -u hdfs \
sqoop list-databases \
--connect jdbc:mysql://192.168.0.20:23306 \
--username root \
--password xxxxxxxx
sudo -u hdfs \
sqoop list-tables \
--connect jdbc:mysql://192.168.0.20:23306/test_mysql \
--username root \
--password xxxxxxxx
sudo -u hdfs \
sqoop eval \
--connect jdbc:mysql://192.168.0.20:23306/test_mysql \
--username root \
--password xxxxxxxx \
--query "SELECT * FROM cars where id < 10;"
import参数
--append 将数据追加到HDFS上一个已存在的数据集上
--as-avrodatafile 将数据导入到Avro数据文件
--as-sequencefile 将数据导入到SequenceFile
--as-textfile 将数据导入到普通文本文件(默认)
--boundary-query <statement> 边界查询,用于创建分片(InputSplit)
--columns <col,col,col…> 从表中导出指定的一组列的数据
--delete-target-dir 如果指定目录存在,则先删除掉
--direct 使用直接导入模式(优化导入速度)
--direct-split-size <n> 分割输入stream的字节大小(在直接导入模式下)
--fetch-size <n> 从数据库中批量读取记录数
--inline-lob-limit <n> 设置内联的LOB对象的大小
-m,--num-mappers <n> 使用n个map任务并行导入数据
-e,--query <statement> 导入的查询语句
--split-by <column-name> 指定按照哪个列去分割数据
--table <table-name> 导入的源表表名
--target-dir <dir> 导入HDFS的目标路径
--warehouse-dir <dir> HDFS存放表的根路径
--where <where clause> 指定导出时所使用的查询条件
-z,--compress 启用压缩
--compression-codec <c> 指定Hadoop的codec方式(默认gzip)
--null-string <null-string> 果指定列为字符串类型,使用指定字符串替换值为null的该类列的值
--null-non-string <null-string> 如果指定列为非字符串类型,使用指定字符串替换值为null的该类列的值
命令
sudo -u hdfs \
sqoop import \
--connect jdbc:mysql://192.168.0.20:23306/test_mysql?tinyInt1isBit=false \
--username root \
--password xxxxxxxx \
--table person
HDFS目录
默认在hdfs用户目录下,目录名直接以源表名保存
[root@master ~]# sudo -u hdfs hadoop fs -ls /user/hdfs/person
Found 5 items
-rw-r--r-- 3 hdfs supergroup 0 2019-08-26 17:12 /user/hdfs/person/_SUCCESS
-rw-r--r-- 3 hdfs supergroup 71413655 2019-08-26 17:11 /user/hdfs/person/part-m-00000
-rw-r--r-- 3 hdfs supergroup 72524741 2019-08-26 17:11 /user/hdfs/person/part-m-00001
-rw-r--r-- 3 hdfs supergroup 72527645 2019-08-26 17:11 /user/hdfs/person/part-m-00002
-rw-r--r-- 3 hdfs supergroup 72525860 2019-08-26 17:12 /user/hdfs/person/part-m-00003
HDFS文件内容
[root@master ~]# sudo -u hdfs hadoop fs -cat /user/hdfs/person/part-m-00000 | head -n 20
1,甲,子鼠,18,0
2,乙,丑牛,null,1
3,丙,寅虎,64,0
4,丁,卯兔,49,0
5,戊,辰龙,null,0
6,己,巳蛇,66,0
7,庚,午马,49,1
8,辛,未羊,14,1
9,壬,申猴,45,0
10,癸,酉鸡,88,1
11,,戌狗,24,0
12,,亥猪,78,0
13,,,31,1
14,llkkb,llkkbd,30,0
15,llkk,llkk,54,0
16,llkkb,llkkbd,13,1
17,llkk,llkk,7,1
18,llkk,llkk,12,0
19,llkkc,llkkc,84,1
20,llkkf,llkkf,47,1
cat: Unable to write to output stream.
默认使用 ","分割
使用制表符: --fields-terminated-by '\t'
使用双引号:--fields-terminated-by '\"'
使用反斜杠:--fields-terminated-by '\\'
命令
sudo -u hdfs \
sqoop import \
--connect jdbc:mysql://192.168.0.20:23306/test_mysql?tinyInt1isBit=false \
--username root \
--password xxxxxxxx \
--table person \
--fields-terminated-by '\t' \
--delete-target-dir
HDFS目录
[root@master ~]# sudo -u hdfs hadoop fs -ls /user/hdfs/person
Found 5 items
-rw-r--r-- 3 hdfs supergroup 0 2019-08-26 17:41 /user/hdfs/person/_SUCCESS
-rw-r--r-- 3 hdfs supergroup 71413655 2019-08-26 17:41 /user/hdfs/person/part-m-00000
-rw-r--r-- 3 hdfs supergroup 72524741 2019-08-26 17:41 /user/hdfs/person/part-m-00001
-rw-r--r-- 3 hdfs supergroup 72527645 2019-08-26 17:41 /user/hdfs/person/part-m-00002
-rw-r--r-- 3 hdfs supergroup 72525860 2019-08-26 17:41 /user/hdfs/person/part-m-00003
HDFS文件内容
[root@master ~]# sudo -u hdfs hadoop fs -cat /user/hdfs/person/part-m-00000 | head -n 20
1 甲 子鼠 18 0
2 乙 丑牛 null 1
3 丙 寅虎 64 0
4 丁 卯兔 49 0
5 戊 辰龙 null 0
6 己 巳蛇 66 0
7 庚 午马 49 1
8 辛 未羊 14 1
9 壬 申猴 45 0
10 癸 酉鸡 88 1
11 戌狗 24 0
12 亥猪 78 0
13 31 1
14 llkkb llkkbd 30 0
15 llkk llkk 54 0
16 llkkb llkkbd 13 1
17 llkk llkk 7 1
18 llkk llkk 12 0
19 llkkc llkkc 84 1
20 llkkf llkkf 47 1
cat: Unable to write to output stream.
指定/usr/hdfs/1目录:--target-dir /usr/hdfs/1
命令
sudo -u hdfs \
sqoop import \
--connect jdbc:mysql://192.168.0.20:23306/test_mysql?tinyInt1isBit=false \
--username root \
--password xxxxxxxx \
--table person \
--fields-terminated-by '\t' \
--target-dir /usr/hdfs/1 \
--delete-target-dir
HDFS目录
[root@master ~]# sudo -u hdfs hadoop fs -ls /usr/hdfs/1
Found 5 items
-rw-r--r-- 3 hdfs supergroup 0 2019-08-26 17:59 /usr/hdfs/1/_SUCCESS
-rw-r--r-- 3 hdfs supergroup 62664632 2019-08-26 17:58 /usr/hdfs/1/part-m-00000
-rw-r--r-- 3 hdfs supergroup 63776345 2019-08-26 17:58 /usr/hdfs/1/part-m-00001
-rw-r--r-- 3 hdfs supergroup 63778151 2019-08-26 17:58 /usr/hdfs/1/part-m-00002
-rw-r--r-- 3 hdfs supergroup 63776312 2019-08-26 17:59 /usr/hdfs/1/part-m-00003
指定1个map数:-m 1
或 --num-mappers 1
命令
sudo -u hdfs \
sqoop import \
--connect jdbc:mysql://192.168.0.20:23306/test_mysql?tinyInt1isBit=false \
--username root \
--password xxxxxxxx \
--table person \
--fields-terminated-by '\t' \
--target-dir /usr/hdfs/1 \
--delete-target-dir \
-m 1
HDFS目录
指定map为1后,只会生成一个文件
[root@master ~]# sudo -u hdfs hadoop fs -ls /usr/hdfs/1
Found 2 items
-rw-r--r-- 3 hdfs supergroup 0 2019-08-26 18:01 /usr/hdfs/1/_SUCCESS
-rw-r--r-- 3 hdfs supergroup 253995440 2019-08-26 18:01 /usr/hdfs/1/part-m-00000
text文件格式--as-textfile
(默认格式)
Parquet Data Files文件格式--as-parquetfile
(推荐)
Avro Data Files文件格式 --as-avrodatafile
SequenceFiles文件格式 --as-sequencefile
导出指定列--columns "id,fname,lname"
命令
sudo -u hdfs \
sqoop import \
--connect jdbc:mysql://192.168.0.20:23306/test_mysql?tinyInt1isBit=false \
--username root \
--password xxxxxxxx \
--table person \
--fields-terminated-by '\t' \
--target-dir /usr/hdfs/1 \
--delete-target-dir \
--columns "id,fname,lname" \
-m 1
HDFS文件内容
[root@master ~]# sudo -u hdfs hadoop fs -cat /usr/hdfs/1/part-m-00000 | head -n 20
1 甲 子鼠
2 乙 丑牛
3 丙 寅虎
4 丁 卯兔
5 戊 辰龙
6 己 巳蛇
7 庚 午马
8 辛 未羊
9 壬 申猴
10 癸 酉鸡
11 戌狗
12 亥猪
13
14 llkkb llkkbd
15 llkk llkk
16 llkkb llkkbd
17 llkk llkk
18 llkk llkk
19 llkkc llkkc
20 llkkf llkkf
cat: Unable to write to output stream.
导出id小于13的数据:--query "SELECT * FROM person where id < 13"
命令
注意查询语句要加上:WHERE $CONDITIONS
如果SQL中已经写了where条件,则加上:AND \$CONDITIONS
sudo -u hdfs \
sqoop import \
--connect jdbc:mysql://192.168.0.20:23306/test_mysql?tinyInt1isBit=false \
--username root \
--password xxxxxxxx \
--fields-terminated-by '\t' \
--target-dir /usr/hdfs/1 \
--delete-target-dir \
--query "SELECT * FROM person where id < 13 AND \$CONDITIONS" \
-m 1
HDFS文件内容
[root@master ~]# sudo -u hdfs hadoop fs -cat /usr/hdfs/1/part-m-00000 | head -n 20
1 甲 子鼠 18 0
2 乙 丑牛 null 1
3 丙 寅虎 64 0
4 丁 卯兔 49 0
5 戊 辰龙 null 0
6 己 巳蛇 66 0
7 庚 午马 49 1
8 辛 未羊 14 1
9 壬 申猴 45 0
10 癸 酉鸡 88 1
11 戌狗 24 0
12 亥猪 78 0
追加在原有数据集上:--append
追加--append
不能与--delete-target-dir
一起使用
命令
追加id大于12小于20的数据
sudo -u hdfs \
sqoop import \
--connect jdbc:mysql://192.168.0.20:23306/test_mysql?tinyInt1isBit=false \
--username root \
--password xxxxxxxx \
--fields-terminated-by '\t' \
--target-dir /usr/hdfs/1 \
--query "SELECT * FROM person where id > 12 and id <20 AND \$CONDITIONS" \
--append \
-m 1
HDFS目录
多了一个文件
[root@master ~]# sudo -u hdfs hadoop fs -ls /usr/hdfs/1
Found 3 items
-rw-r--r-- 3 hdfs supergroup 0 2019-08-27 10:25 /usr/hdfs/1/_SUCCESS
-rw-r--r-- 3 hdfs supergroup 217 2019-08-27 10:25 /usr/hdfs/1/part-m-00000
-rw-r--r-- 3 hdfs supergroup 125 2019-08-27 10:31 /usr/hdfs/1/part-m-00001
HDFS文件内容
[root@master ~]# sudo -u hdfs hadoop fs -cat /usr/hdfs/1/part-m-00001 | head -n 20
13 31 1
14 llkkb llkkbd 30 0
15 llkk llkk 54 0
16 llkkb llkkbd 13 1
17 llkk llkk 7 1
18 llkk llkk 12 0
19 llkkc llkkc 84 1
指定\N代替原表中字符串的null值:--null-string '\\N'
指定\N代替原表中非字符串的null值:--null-non-string '\\N'
命令
sudo -u hdfs \
sqoop import \
--connect jdbc:mysql://192.168.0.20:23306/test_mysql?tinyInt1isBit=false \
--username root \
--password xxxxxxxx \
--table person \
--fields-terminated-by '\t' \
--target-dir /usr/hdfs/1 \
--delete-target-dir \
--null-string 'NULL' \
--null-non-string 'NULL' \
-m 1
HDFS文件内容
[root@master ~]# sudo -u hdfs hadoop fs -cat /usr/hdfs/1/part-m-00000 | head -n 20
1 甲 子鼠 18 0
2 乙 丑牛 \N 1
3 丙 寅虎 64 0
4 丁 卯兔 49 0
5 戊 辰龙 \N 0
6 己 巳蛇 66 0
7 庚 午马 49 1
8 辛 未羊 14 1
9 壬 申猴 45 0
10 癸 酉鸡 88 1
11 戌狗 24 0
12 亥猪 78 0
13 31 1
14 llkkb llkkbd 30 0
15 llkk llkk 54 0
16 llkkb llkkbd 13 1
17 llkk llkk 7 1
18 llkk llkk 12 0
19 llkkc llkkc 84 1
20 llkkf llkkf 47 1
cat: Unable to write to output stream.
要使全表导入,必须满足以下条件:
/user/hdfs/
其他的与单表类似
命令
sudo -u hdfs \
sqoop import-all-tables \
--connect jdbc:mysql://192.168.0.20:23306/test_mysql?tinyInt1isBit=false \
--username root \
--password xxxxxxxx \
--fields-terminated-by '\t' \
--autoreset-to-one-mapper \
-m 1
HDFS目录
有cars和person表
[root@master ~]# sudo -u hdfs hadoop fs -ls /user/hdfs/
Found 5 items
drwx------ - hdfs supergroup 0 2019-08-27 11:12 /user/hdfs/.Trash
drwx------ - hdfs supergroup 0 2019-08-27 11:14 /user/hdfs/.staging
drwxr-xr-x - hdfs supergroup 0 2019-08-27 10:39 /user/hdfs/_sqoop
drwxr-xr-x - hdfs supergroup 0 2019-08-27 11:14 /user/hdfs/cars
drwxr-xr-x - hdfs supergroup 0 2019-08-27 11:14 /user/hdfs/person