大数据工具--Sqoop简介及使用

本文环境hadoop 2.7.7,sqoop 1.4.7
Sqoop是一个在结构化数据和Hadoop之间进行批量数据迁移的工具,此篇博客没有深入的介绍sqoop的底层,只是简单介绍其功能,重点记录sqoop的使用命令 sqoop import, sqoop export, sqoop job的使用
如果想更多更深入的了解,可以查看: 官网.

Sqoop简介

Sqoop是一个在结构化数据和Hadoop之间进行批量数据迁移的工具,结构化数据可以是Mysql、Oracle等RDBMS。Sqoop底层用MapReduce程序实现抽取、转换、加载,MapReduce天生的特性保证了并行化和高容错率。

在这里插入图片描述
正如上图所示:Sqoop工具接收到客户端的shell命令或者Java api命令后,通过Sqoop中的任务翻译器(Task Translator)将命令转换为对应的MapReduce任务,而后将关系型数据库和Hadoop中的数据进行相互转移,进而完成数据的拷贝

Sqoop命令

一、sqoop import
  1. MySQL -> HDFS
  • 导入数据命令

sqoop import --connect jdbc:mysql://127.0.0.1:3306/hadoop --username root --password 123456 --table test --where “id>10” --warehouse-dir /user/root/hadoop/ --column id, name –fields-terminated-by ‘|’ -m 1

参数说明

参数参数介绍示例
–connect数据库的连接字符串,dburi: mysqlIP: mysqlPort, dbname: 数据库名例如:jdbc:mysql://192.168.1.124:3306/mydatabase?useUnicode=true
–username数据库用户名root
–password数据库密码,-P 交互式指定密码 --password-file 指定密码文件123456
–query查询字符串即sql语句,不可与 --table , – where同时使用“select * from test where id <10 AND $CONDITION ”
–columns导入列的参数–columns id,name
–table数据库表名–table test
–where查询字符串–where “id > 10”
–warehouse-dir导入的HDFS目的目录–warehouse-dir /user/hadoop/
–fields-terminated-byHDFS存储格式的分割符,默认","–fields-terminated-by  “|”
-m控制导入时MR作业时map任务数量。在进行并行导入时,Sqoop会使用split-by进行负载切分(按照表PK切分),首先获取切分字段Max和Min值,再根据Max和Min进行切分,举例:student_id[0,1000],Sqoop使用4个Map任务“select * from student where id >=minand id <max” (0,250),(230,500),(500,750),(750,1000)。注释:Sqoop不能使用多个字段切分-m 1
–map-column类型映射,主要用于导入到hive使用–map-column id=String
  • 增量导入数据命令

sqoop import --connect jdbc:mysql://127.0.0.1:3306/hadoop --username root --password 123456 --table test --check-column id --incremental append --last-value “100”

sqoop import --connect jdbc:mysql://127.0.0.1:3306/hadoop --username root --password 123456 --table test --check-column create_time --incremental lastmodified --last-value “2019-09-08 08:56:09” --append

参数说明

参数参数介绍示例
–ckeck-column指定某些列来检查并决定数据是否为增量数据,一般为int或者data数据,不可为字符串–check-column id
–incremental指定导入模式,append和lastmodified。append: 在导入的新数据ID值是连续时使用,lastmodified:在源表中有数据更新时使用,检查列必须为日期类型的字段或者时间戳,并且有两种选择–merge-key或者–append–incremental append
–last-value指定上一次导入中指定字段最大值–last-value “10”
–append使用lastmodified模式时使用,会将修改或者新增的数据导入hdfs,不会将修改的数据进行合并–append
–merge-key使用lastmodified模式时使用,会将修改或者新增的数据导入hdfs,会将修改的数据与根据merge-key指定的字段进行合并–merge-key id
  1. MySQL -> HIVE
二、sqoop export
  1. HDFS -> MySQL
  • 导出数据命令

sqoop import --connect jdbc:mysql://127.0.0.1:3306/hadoop --username root --password 123456 --table test --export-dir /user/root/hadoop/ --column id, name -m 1
当表中没有主键时,可多次导入,重复导入数据,如果存在主键,则会报错,并且等待报错时间很长

参数说明

参数参数介绍示例
–connect数据库的连接字符串,dburi: mysqlIP: mysqlPort, dbname: 数据库名例如:jdbc:mysql://192.168.1.124:3306/mydatabase?useUnicode=true
–username数据库用户名root
–password数据库密码,-P 交互式指定密码 --password-file 指定密码文件123456
–columns导出列的参数,未被到处的列在数据库中规定必须是可以为空或者有默认值–columns id,name
–export-dir导出目录–export-dir /user/root/hadoop/
–table数据库表名–table test
–input-null-string对于字符串类型,“NULL”会被翻译为空值–input-null-string
–input-null-string对于非字符串类型,“NULL”和空字符串会被翻译为空值–input-null-string
  • 增量导出数据命令

sqoop import --connect jdbc:mysql://127.0.0.1:3306/hadoop --username root --password 123456 --table test --export-dir /user/root/hadoop/ --column id, name --update-key id --updatemode updateonly -m 1

参数说明

参数参数介绍示例
–update-key更新标志,可以指定多个更新标志–update-key id
–updatemod两种模式,一种updateonly(默认模式),仅仅更新已存在记录,不插入新数据,另一种allowinsert 允许插入新数据–input-null-string
重点
--updatemode updateonly 时 导出只是更新原记录中存在的数据,只执行 update
--updatemode allowinsert 并且 --update-key 为主键时 执行append 和 update的操作
 --updatemode allowinsert 并且 --update-key不是主键时, 会将所有数据导出
  1. Hive -> MySQL
三、sqoop job
  1. 创建job

sqoop job --create job1 – import --connect jdbc:mysql://127.0.0.1:3306/hadoop --username root --password 123456 --table test --export-dir /user/root/hadoop/ --column id, name -m 1

  1. 查看job

sqoop job --list

  1. 查看job参数

sqoop job --show job1

  1. 执行job

sqoop job --exec job1

注释:在增量导入时,job会自动记录last-value的值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值