sqoop各参数详解

Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

sqoop各参数详解_第1张图片

注意不要使用localhost

1.HDFS 导出mysql (默认都号分隔)

bin/sqoop export \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff \
--num-mappers 1 \
--export-dir /user/hive/warehouse/staff_hive \
--input-fields-terminated-by "\t"

2.mysql 导入 HDFS

bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t"

1.将关系型数据的表结构复制到hive中

sqoop create-hive-table --connect jdbc:mysql://localhost:3306/test --table users --username dyh 
--password 000000 --hive-table users  --fields-terminated-by "\0001"  --lines-terminated-by "\n";

参数说明:

–fields-terminated-by “\0001” 是设置每列之间的分隔符,"\0001"是ASCII码中的1,它也是hive的默认行内分隔符, 而sqoop的默认行内分隔符为","
–lines-terminated-by “\n” 设置的是每行之间的分隔符,此处为换行符,也是默认的分隔符;

3.mysql 导入hive

sqoop import 
--connect jdbc:mysql://localhost:3306/hive 
--username root 
--password 123456
--table user 
--split-by id 
--hive-import

参数 说明
–append 将数据追加到hdfs中已经存在的dataset中。使用该参数,sqoop将把数据先导入到一个临时目录中,然后重新给文件命名到一个正式的目录中,以避免和该目录中已存在的文件重名。
–as-avrodatafile 将数据导入到一个Avro数据文件中
–as-sequencefile 将数据导入到一个sequence文件中
–as-textfile 将数据导入到一个普通文本文件中,生成该文本文件后,可以在hive中通过sql语句查询出结果。
–boundary-query 边 界查询,也就是在导入前先通过SQL查询得到一个结果集,然后导入的数据就是该结果集内的数据,格式如:–boundary-query ‘select id,creationdate from person where id = 3′,表示导入的数据为id=3的记录,或者select min(), max() from ,注意查询的字段中不能有数据类型为字符串的字段,否则会报错:java.sql.SQLException: Invalid value for getLong(),目前问题原因未知。
–columns 指定要导入的字段值,格式如:–columns id,username
–direct 直接导入模式,使用的是关系数据库自带的导入导出工具。官网上是说这样导入会更快
–direct-split-size 在使用上面direct直接导入的基础上,对导入的流按字节数分块,特别是使用直连模式从PostgreSQL导入数据的时候,可以将一个到达设定大小的文件分为几个独立的文件。
–inline-lob-limit 设定大对象数据类型的最大值
-m,–num-mappers 启动N个map来并行导入数据,默认是4个,最好不要将数字设置为高于集群的节点数
–query,-e 从 查询结果中导入数据,该参数使用时必须指定–target-dir、–hive-table,在查询语句中一定要有where条件且在where条件中需 要包$CONDITIONS,
示例:–query ‘select * from person where $CONDITIONS ‘ –target-dir
/user/hive/warehouse/person –hive-table person
–split-by 表的列名,用来切分工作单元,一般后面跟主键ID
–table 关系数据库表名,数据从该表中获取
–target-dir 指定hdfs路径
–warehouse-dir 与–target-dir不能同时使用,指定数据导入的存放目录,适用于hdfs导入,不适合导入hive目录
–where 从关系数据库导入数据时的查询条件,示例:–where ‘id = 2′
-z,–compress 压缩参数,默认情况下数据是没被压缩的,通过该参数可以使用gzip压缩算法对数据进行压缩,适用于SequenceFile, text文本文件, 和Avro文件
–compression-codec Hadoop压缩编码,默认是gzip
–null-string 可选参数,如果没有指定,则字符串null将被使用
–null-non-string 可选参数,如果没有指定,则字符串null将被使用

增量导入参数 说明

–check-column (col) 用来作为判断的列名,如id –incremental
(mode) append:追加,比如对大于last-value指定的值之后的记录进行追加导入。lastmodified:最后的修改时间,追加last-value指定的日期之后的记录
–last-value (value) 指定自从上次导入后列的最大值(大于该指定的值),也可以自己设定某一值。
–split-by指定数据库表中的主键字段名,在这里为id。

4.hive导入mysql

sqoop eval 
--connect 'jdbc:mysql://localhost:3306/data_analyses?useUnicode=true&characterEncoding=utf-8' 
--username data  
--password x8
--query "delete from d_compete_run_time_statistic"

sqoop export --connect 'jdbc:mysql://localhost:3306/data_analyses?useUnicode=true&characterEncoding=utf-8' 
--username data  
--password x8 
--table d_compete_run_time_statistic 
--export-dir /user/hive/warehouse/dm.db/d_compete_run_time_statistic --input-fields-terminated-by '\t' --input-null-string '\\N' --input-null-non-string '\\N'
hive参数解释
  --hive-home   重写$HIVE_HOME
  --hive-import  插入数据到hive当中,使用hive的默认分隔符
  --hive-overwrite  重写插入
  --create-hive-table  建表,如果表已经存在,该操作会报错!
  --hive-table [table]  设置到hive当中的表名
  --hive-drop-import-delims  导入到hive时删除 \n, \r, and \01 
  --hive-delims-replacement  导入到hive时用自定义的字符替换掉
                              \n, \r, and \01 
  --hive-partition-key   hive分区的key
  --hive-partition-value hive分区的值
  --map-column-hive     类型匹配,sql类型对应到hive类型

1. 常规配置

序号 参数 说明
1 –import 将数据导入到集群
2 –export 将集群数据导出
3 –codegen 获取数据库某张表数据生成java并打包jar
4 –create-hive-table 创建hive表
5 –eval 查看SQL执行结果
6 –eval 查看SQL执行结果

2.数据库相关配置

序号 参数 说明
1 –connect 将数据导入到集群
2 –connection-manager 将集群数据导出
3 –driver JDBC 的driver class
4 –password 链接数据库密码
5 –username 链接数据库用户名
6 –verbose 控制台打印

3.公共参数 :import 配置

序号 参数 说明
1 –enclose-by 给字段前后加上指定的字段
2 –escaped-by 对字符中的双引号加转义符
3 –fields-terminated-by 设定每个字段是以什么符号作为结束默认为逗号
4 –lines-terminated-by 设定每行记录之间的分隔符默认 是\n
5 –mysql-delimiters Mysql 默认分隔符设置,字段之间逗号分隔,行之间\n
6 –optionally-enclosed-by 带给有双引号或单引号的字段前加上指定字符

4. Hive 相关配置

序号 参数 说明
1 –hive-delims-replacement 用自定义的字符串替换掉数据中的\r \n
2 –hive-drop-import-delims 在导入数据到hive时。去掉数据中的\r \n \013字符
3 –map-column-hive 生成hive 表时 可以更改
4 –hive-partition-key 创建分区后面直接跟分区名,分区字段的默认类型为string
5 –hive-partition-value 导入数据是指定某个分区的值
6 –hive-home hive安装目录,可以通过改参数覆盖之前默认配置的目录
7 –hive-import 将数据从关系数据库导入至hive表中
8 –hive-overwrite 覆盖掉在hive表中已经存在的数据
9 –create-hive-table 默认是false 如果目标表已经存在了那么创建任务失败
10 –hive-table 后面接要创建hive表默认使用mysql表名
11 –table 带指定关系数据库的表名

你可能感兴趣的:(sqoop)