sqoop
博客专区 > goldbin 的博客 > 博客详情
sqoop
goldbin 发表于3个月前
sqoop
  • 发表于 3个月前
  • 阅读 14
  • 收藏 0
  • 点赞 0
  • 评论 0

华为云·免费上云实践>>>   

摘要: Apache Sqoop是用来实现结构型数据(如关系数据库)和Hadoop之间进行数据迁移的工具。它充分利用了MapReduce的并行特点以批处理的方式加快数据的传输,同时也借助MapReduce实现了容错。

版权声明:本文为yunshuxueyuan原创文章。
如需转载请标明出处: https://my.oschina.net/yunshuxueyuan/blog
QQ技术交流群:299142667

sqoop

Apache Sqoop是用来实现结构型数据(如关系数据库)和Hadoop之间进行数据迁移的工具。它充分利用了MapReduce的并行特点以批处理的方式加快数据的传输,同时也借助MapReduce实现了容错。

sqoop支持的数据库:

Database

version

--direct support?

connect string matches

HSQLDB

1.8.0+

No

jdbc:hsqldb:*//

MySQL

5.0+

Yes

jdbc:mysql://

Oracle

10.2.0+

No

jdbc:oracle:*//

PostgreSQL

8.3+

Yes (import only)

jdbc:postgresql:/

通过sqoop help命令查看sqoop帮助

import(将关系数据库迁移到HDFS上)

[例1]  将mysql中的sds表导入HDFS中

sqoop import

--connectjdbc:mysql://node01/test

--username root -password passwd

--table sds

[例2]  将mysql中的sds,指定的列表导入HDFS中

sqoop import

--connect jdbc:mysql://node01/test

--username root -password 123

--table sds

--columns "SD_ID,CD_ID,LOCATION"

 [例3] 将整个数据库中的表全部导入到hdfs上

import-all-tables命令


sqoop import-all-tables

--connect jdbc:mysql://node01/test

--username root -password 123

[例4] 指定导出文件为SequenceFiles,文件命名为com.ctrip.sds


sqoop import

--connect jdbc:mysql://node01/test

--username root -password 123

--table psn

--class-name com.ctrip.psn --as-sequencefile

[例5] 导入文本时可以指定分隔符

sqoop import

--connect jdbc:mysql://node01/test

--username root -password 123

--table psn

--fields-terminated-by '\t'

--lines-terminated-by '\n'

--optionally-enclosed-by '\"'

 [例6] 可以指定过滤条件

sqoop import

--connect jdbc:mysql://node01/test

--username root -password passwd

--table sds

--where "sd_id > 100"

--m设置并行数据,即map的数据,决定文件的个数。

--target-dir设置hdfs上的目标目录。

export(将hdfs上的数据导入到关系数据库中)

[例一]  将HDFS中数据导入到mysql中的sds表


sqoop export

--connect jdbc:mysql://node01/test

--username root -password 123 

--table psn 

--export-dir /user/root/psn

mysql数据库的sds表需要先把表结构创建出来,否则export操作会直接失败。

[例二]  将关系数据库表导入到hive表中

create-hive-table 

sqoop create-hive-table

--connect jdbc:mysql://node01/test

--username root --password 123

--table psn

--hive-table sds_bak

默认sds_bak是在default数据库的。

这一步需要依赖HCatalog,需要先安装HCatalog,否则报错。

list-databases列出一台server上可用的数据库


sqoop list-databases

--connect jdbc:mysql://node01/

--username root -password 123

list-tables列出一个数据库中的表

sqoop list-tables

--connect jdbc:mysql://node01/test

--username root -password 123

codegen:

将关系数据库表映射为一个java文件、java class类相关的jar包


sqoop codegen

--connect jdbc:mysql://node01/test

--username root -password 123

--table psn

 

eval用户可以很快的使用sql语句对数据库进行操作。


sqoop eval

--connect jdbc:mysql://node01/test 

--username root -password 123 

--query "SELECT * FROM psn LIMIT 10"

job用来生成sqoop任务。

sqoop job

--create myjob

-- import

--connect jdbc:mysql://node01/test

 --username root -password 123 

--table psn -m 1




sqoop job -exec myjob

metastore 配置sqoop job的共享元数据信息,这样多个用户定义和执行sqoop job在这一metastore中。

启动:sqoop metastore

关闭:sqoop metastore –shutdown

存储位置: conf/sqoop-site.xml/sqoop.metastore.server.location

 

[补充]

由于sqoop是通过map完成数据的导入,各个map过程是独立的,没有事物的概念,可能会有部分map数据导入失败的情况。为了解决这一问题,sqoop中有一个折中的办法,即是指定中间staging表,成功后再由中间表导入到结果表。

--staging-table <staging-table-name>staging表结构也是需要提前创建出来


sqoop export

--connect jdbc:mysql://192.168.81.176/sqoop

--username root -password passwd

--table sds

--export-dir /user/guojian/sds

--staging-table sds_tmp

[注]在使用 –direct,--update-key或者--call存储过程的选项时,staging中间表是不可用的。

验证结果:

(1)数据会首先写到sds_tmp表,导入操作成功后,再由sds_tmp表导入到sds结果表中,同时会清除sds_tmp表。

(2)如果有map失败,则成功的map会将数据写入tmp表,export任务失败,同时tmp表的数据会被保留。

(3)如果tmp中已有数据,则此export操作会直接失败,

--clear-staging-table 指定在执行前清除中间表。

版权声明:本文为yunshuxueyuan原创文章。
如需转载请标明出处: https://my.oschina.net/yunshuxueyuan/blog
QQ技术交流群:299142667

标签: Sqoop 大数据
共有 人打赏支持
粉丝 0
博文 13
码字总数 26896
×
goldbin
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: