简介
Sqoop是sql to hadoop的缩写,是一个关系型数据库和HDFS的数据转换工具。
环境
Sqoop是apache的一个顶级项目,如果使用apache版本,需要自己编译源码,很麻烦。
所以采用另一个发行版本Cloudra。hadoop、hive和sqoop全部采用cdh-5.3.6版本。
示例
sqoop help command 可以查看命令的参数列表。
参数分几部分
Common arguments
--connect jdbc:mysql://localhost:3306/employees指定mysql数据库的连接
--username xxx用户名
--password xxx明文密码
-P 控制台数据密码
Import control arguments
--append Append data to an existing dataset in HDFS
--as-avrodatafile 导出文件成什么格式
--as-sequencefile
--as-textfile 默认
--as-parquetfile
--boundary-query <statement>
--columns <col,col,col…> 指定某些列导出
--delete-target-dir 如果目标文件夹存在就删除,否则导出会报错
--direct 加此参数,会直接走mysql的export方式
--fetch-size <n> 相当于mysql的limit方法
--inline-lob-limit <n>
-m,--num-mappers <n> 设置多少个并行的map job,根据实际情况设置,数据量小,设置为1
-e,--query <statement> 可以写sql复杂语句,不能与table同时使用
--split-by <column-name> Column of the table used to split work units
--table <table-name> 读取的表名
--target-dir <dir> HDFS文件存放地址,如果不指定,为默认存放在当前用户的目录下 /user/xxx/
--warehouse-dir <dir> HDFS文件仓库地址
--where <where clause> 查询条件
-z,--compress 压缩,可以指定压缩类型
--compression-codec 指定对应的压缩类
增量导入的参数
--check-column (col) 哪些列
--incremental (mode) 增量
--last-value (value) 上次导入的最后一个值
mysql数据库的数据类型和java、hive的对应
--map-column-java <mapping> Override mapping from SQL to Java type for configured columns.
--map-column-hive <mapping> Override mapping from SQL to Hive type for configured columns.
Argument Description
--enclosed-by <char> Sets a required field enclosing character
--escaped-by <char> Sets the escape character
--fields-terminated-by <char> 字段之间用什么隔开
--lines-terminated-by <char> 行之间用什么隔开
--mysql-delimiters Uses MySQL’s default delimiter set: fields: , lines: \n escaped-by: \ optionally-enclosed-by: ‘
--optionally-enclosed-by <char> Sets a field enclosing character
创建一个mysql的表
create table user( id int, username varchar, password varchar ); insert into user values(1,‘zhangsan‘,‘123456‘); insert into user values(2,‘lisi‘,‘123456‘); insert into user values(3,‘wangwu‘,‘123456‘); insert into user values(4,‘zhaoliu‘,‘123456‘);
Example1:从mysql的test数据库导出user表数据,压缩格式为snappy,存储目录为/user/sqoop/import,如果存在就删除。只用一个map job。
sqoop import \
--connect jdbc:mysql://localhost:3306/test \
--username root \
--password 123456 \
--table user \
--delete-target-dir \
--num-mappers 1
--target-dir /user/sqoop/import \
--compress \
--compression-codec org.apache.hadoop.io.compress.Snappy
Example2:从mysql的test数据库导出user表数据,压缩格式为snappy,存储目录为/user/sqoop/import,如果存在就删除。只用一个map job。
sqoop import \
--connect jdbc:mysql://localhost:3306/test \
--username root \
--password 123456 \
--table user \
--where id >2
--num-mappers 1
--delete-target-dir \
--target-dir /user/sqoop/import \
--compress \
--compression-codec org.apache.hadoop.io.compress.Snappy
如果文件存储为parquet,字段类型为字符串的,导入到HDFS后为null。
原文:https://www.cnblogs.com/morning056724/p/9476346.html