首页 > 其他 > 详细

Sqoop学习笔记

时间:2018-08-23 18:48:49      阅读:209      评论:0      收藏:0      [点我收藏+]

简介

  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。

Sqoop学习笔记

原文:https://www.cnblogs.com/morning056724/p/9476346.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!