sqoop

简介

apache开源提供的一个数据导入导出的工具,从关系型数据库导入到hdfs,或者从hdfs导出到关系型数据库等等
	从关系型数据库到hdfs  叫做导入
	从hdfs到关系型数据库  叫做导出
	通过MR的inputformat和outputformat来实现数据的输入与输出,底层执行的全部都是MR的任务,只不过这个mr只有map阶段,没有reduce阶段
	说白了只是对数据进行抽取,从一个地方,抽取到另外一个地方

架构

sqoop 1.x 不用安装,解压就能用  
sqoop 2.x 架构发生了变化,引入了一个服务端   可以通过代码提交sqoop的任务
	
一般用sqoop1.x比较多,直接将我们的命令写入到脚本里面去,执行脚本即可

sqoop常用操作

数据导入

#导入到hdfs
bin/sqoop import  --connect jdbc:mysql://192.168.29.130:3306/userdb --username root -password 123456  --table emp --m 1
#导入到hdfs指定目录
bin/sqoop import  --connect jdbc:mysql://192.168.29.130:3306/userdb --username root -password 123456 --delete-target-dir  --table emp --target-dir /sqoop/emp --m 1
#指定分割符号
bin/sqoop import  --connect jdbc:mysql://192.168.29.130:3306/userdb --username root -password 123456 --delete-target-dir  --table emp --target-dir /sqoop/emp --m 1 --fields-terminated-by '\001'

#导入到hive
#先要将hive的一个jar包拷贝到sqoop
bin/sqoop import  --connect jdbc:mysql://192.168.29.130:3306/userdb --username root -password 123456  --table emp1 --target-dir /sqoop/emp --m 1 --fields-terminated-by '\001' --hive-import --hive-table sqooptohive.emp_hive

#导入并自动创建hive表
bin/sqoop import  --connect jdbc:mysql://192.168.29.130:3306/userdb --username root -password 123456  --table emp --target-dir /sqoop/emp5 --m 1 --fields-terminated-by '\001' --hive-import --hive-database sqooptohive


#导入数据库子集
bin/sqoop import\
  --connect jdbc:mysql://192.168.29.130:3306/userdb --username root -password 123456\
 --table emp --target-dir /sqoop/emp_where --m 1 --fields-terminated-by '\001'\
 --hive-import --hive-database sqooptohive  --where "salary>4000"

#sql语句查询插入
bin/sqoop import \
--connect jdbc:mysql://192.168.29.130:3306/userdb --username root -password 123456 \
--target-dir /sqoop/emp_sql --m 1 \
--query 'select phno from emp_conn where 1=1 and $CONDITIONS' \


#增量导入
#
如何解决导入增量的问题
每个数据都会有一个创建时间,可以根据我们的创建时间来判断是否是我们前一天的数据

如何解决导入减量数据的问题???
什么是减量数据????删除掉的数据  数据不是做真删除  
做假删除,其实就是改变了一些数据的状态,数据的更细时间,同步改变
所有的减量数据都转化为变更数据来处理
使用--where来实现增量的导入
bin/sqoop import \
--connect jdbc:mysql://192.168.163.30:3306/userdb \
--username root \
--password admin  \
--table emp \
--incremental append  \
--where "create_time > '2018-06-17 00:00:00' and is_delete='1' and create_time < '2018-06-17 23:59:59' " \
--target-dir /sqoop/incement2 \
--check-column id  \
--m 1

数据导出

sqoop的数据的导出:
导出:从hdfs到关系型数据库


bin/sqoop export \
--connect jdbc:mysql://192.168.163.30:3306/userdb \
--username root --password admin \
--table emp_out \
--export-dir /sqoop/emp \
--input-fields-terminated-by ","


导出数据的时候,如果导出到一半,报错了怎么办????
一般都是创建mysql的临时表 如果临时表导入成功,再往目的表里面导入

扩展

sqoop导入导出是一个离线处理的工具
底层使用的都是MR的程序
有没有什么工具,可以实现实时的抽取数据
canal  通过解析binlog可以实现实时的数据抽取
flume  自定义source 代码在github上面  也可以实现近似实时的数据抽取
streamSet  比较强大,可以实现实时的抽取数据
下去调研了解以上三个工具实现实时的抽取
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值