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 \
--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 | 带指定关系数据库的表名 |