sqoop各参数详解
Sqoop是⼀款开源的⼯具,主要⽤于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进⾏数据的传递,可以将⼀个关系型数据库(例如: MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
注意不要使⽤localhost
1.HDFS 导出mysql (默认都号分隔)
bin/sqoop export \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff \
--num-mappers 1 \
parameter数据类型--export-dir /user/hive/warehouse/staff_hive \
--input-fields-terminated-by "\t"
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” 设置的是每⾏之间的分隔符,此处为换⾏符,也是默认的分隔符;
--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-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带指定关系数据库的表名
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论