Sqoop

什么是Sqoop

它是将关系数据库(oracle、mysql、postgresql等)数hadoop数据进行转换的工具。
版本:(两个版本完全不兼容,sqoop1使用最多)
sqoop1:1.4.x
sqoop2:1.99.x版本
同类产品–DataX:阿里顶级数据交换工具

sqoop1架构

sqoop1由client端直接接入hadoop,任务通过解析生成对应的maprecue执行。
在这里插入图片描述

安装

  1. 解压安装包
  2. 配置环境变量
    export SQOOP_HOME=/XX/sqoop.xx
    source /etc/profile
  3. 添加数据库驱动包
    cp mysql-connector-java-5.1.10.jar /sqoop-install-path/lib
  4. 重命名配置文件
    mv sqoop-env-template.sh sqoop-env.sh
  5. 修改$SQOOP_HOME/bin/configure-sqoop
    注释掉HCatalog,Accumulo检查(除非你准备使用HCatalog,Accumulo等HADOOP上的组件)
## Moved to be a runtime check in sqoop.
#if [ ! -d "${HCAT_HOME}" ]; then
# echo "Warning: $HCAT_HOME does not exist! HCatalog jobs willfail."
# echo 'Please set $HCAT_HOME to the root of your HCatalog installation.'
#fi
#if [ ! -d "${ACCUMULO_HOME}" ];then
# echo "Warning: $ACCUMULO_HOME does not exist! Accumulo imports willfail.“# echo 'Please set $ACCUMULO_HOME to the root of your

Accumuloinstallation.’
#fi

  1. 测试 sqoop version
  • sqoop list–databases -connect jdbc:mysql://node03:3306/ -username root -password 123
  • sqoop list-tables --connect jdbc:mysql://192.168.235.18:3306/mysql --username root --password 123

导入/导出工具

http://blog.sina.com.cn/s/blog_13088c10a0102wv4i.html

  1. 导入工具import:
    选项 含义说明含义说明
--append		将数据追加到HDFS上一个已存在的数据集上
--as-avrodatafile	将数据导入到Avro数据文件
--as-sequencefile	将数据导入到SequenceFile
--as-textfile	将数据导入到普通文本文件(默认)
--boundary-query <statement>	边界查询,用于创建分片(InputSplit)
--columns <col,col,col…>	从表中导出指定的一组列的数据
--delete-target-dir	如果指定目录存在,则先删除掉
--direct			使用直接导入模式(优化导入速度)
--direct-split-size <n>	分割输入stream的字节大小(在直接导入模式下)
--fetch-size <n>		从数据库中批量读取记录数
--inline-lob-limit <n>	设置内联的LOB对象的大小
-m,--num-mappers <n>	使用n个map任务并行导入数据
-e,--query <statement>	导入的查询语句
--split-by <column-name>	指定按照哪个列去分割数据
--table <table-name>	导入的源表表名
--target-dir <dir>	导入HDFS的目标路径
--warehouse-dir <dir>	HDFS存放表的根路径
--where <where clause>	指定导出时所使用的查询条件
-z,--compress	启用压缩
--compression-codec <c>	    指定Hadoop的codec方式(默认gzip)
--null-string <null-string>   如果指定列为字符串类型,使用指定字符串替换值为null的该类列的值
--null-non-string <null-string>如果指定列为非字符串类型,使用指定字符串替换值为null的该类列的值
--validate <class-name>	                 启用数据副本验证功能,仅支持单表拷贝,可以指定验证使用的实现类
--validation-threshold <class-name>      指定验证门限所使用的类
--direct	使用直接导出模式(优化速度)
  1. 导出工具export
--export-dir <dir>			导出过程中HDFS源路径
--m,--num-mappers <n>			使用n个map任务并行导出
--table <table-name>			导出的目的表名称
--call <stored-proc-name>		导出数据调用的指定存储过程名
--update-key <col-name>			更新参考的列名称,多个列名使用逗号分隔
--update-mode <mode>			指定更新策略,包括:updateonly(默认)、allowinsert
--input-null-string <null-string>	使用指定字符串,替换字符串类型值为null的列
--input-null-non-string <null-string>	使用指定字符串,替换非字符串类型值为null的列
--staging-table <staging-table-name>	在数据导出到数据库之前,数据临时存放的表名称
--clear-staging-table	清除工作区中临时存放的数据
--batch	使用批量模式导出

导入导出操作

http://blog.sina.com.cn/s/blog_13088c10a0102wv4i.html

将MySQL中的数据导入到HDFS/Hive/Hbase

  1. 将MySQL中的数据导入到HDFS

sqoop import --connect jdbc:mysql://node03:3306/test --username root
–password 123 --table myuser -m1 -target-dir hdfs://shsxt/my02

  1. 将MySQL中的数据导入到到Hive:

sqoop import --connect jdbc:mysql://node03:306/test --username root
–password root --table testa --hive-import -m 1

由于使用Sqoop从MySQL导入数据到Hive需要指定target-dir,因此导入的是普通表而不能为外部表。
3. 将MySQL中的数据导入到到HBase:

sqoop import --connect jdbc:mysql://node04:3306/test --username root
–password 123 --table mysqoop --hbase-table jackie --column-family cf1 --hbase-row-key name --hbase-create-table -m 1

使用Sqoop将HDFS/Hive/HBase中的数据导出到MySQL

  1. 将HDFS中的数据导出到MySQL

sqoop export --connect jdbc:mysql://192.168.235.18:3306/test
–username root --password 123 --table my --export-dir /root/my

  1. 将Hive的数据导出到MySQL

sqoop export --connect jdbc:mysql://10.233.45.104:3306/test --username
root --password root --table testa --export-dir
/user/hive/warehouse/testa --input-fields-terminated-by '\001’

  1. 将HBase中的数据导出到MySQL
    目前sqoop没有办法把数据直接从Hbase导出到mysql。也可以通过Hive建立2个表,一个外部表是基于这个Hbase表的,另一个是单纯的基于hdfs的hive原生表,然后把外部表的数据导入到原生表(临时),然后通过hive将临时表里面的数据导出到mysql

sqoop export --connect jdbc:mysql://172.50.4.148:3306/mysql --username
root --password 123456 --table bb --export-dir
‘/mysql_data/part-m-00000’

Sqoop增量导入

sqoop import -D sqoop.hbase.add.row.key=true --connect 
jdbc:mysql://192.168.1.9:3306/spider --username root --password root 
--table TEST_GOODS --columns ID,GOODS_NAME,GOODS_PRICE 
--hbase-create-table --hbase-table t_goods --column-family cf 
--hbase-row-key ID --incremental lastmodified --check-column U_DATE 
--last-value '2017-06-27' --split-by U_DATE

--incremental lastmodified 增量导入支持两种模式 append 递增的列;lastmodified时间戳。
--check-column 增量导入时参考的列
--last-value 最小值,这个例子中表示导入2017-06-27到今天的值

Sqoop job定时任务

   sqoop job --create testjob01 --import --connect 
   jdbc:mysql://192.168.1.9:3306/spider --username root --password root 
   --table TEST_GOODS --columns ID,GOODS_NAME,GOODS_PRICE 
   --hbase-create-table --hbase-table t_goods --column-family cf 
   --hbase-row-key ID -m 1
   设置定时执行以上sqoop job
   使用linux定时器:crontab -e
   例如每天执行
   0 0 * * * /opt/local/sqoop-1.4.6/bin/sqoop job ….
   --exec testjob01
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值