Sqoop

Sqoop

1.sqoop产生的原因:

  • 多数使用hadoop技术的处理大数据业务的企业,有大量的数据存储在关系型数据中。

  • 由于没有工具支持,对hadoop和关系型数据库之间数据传输是一个很困难的事。依据以上的原因sgoop产生的。

2.sqoop介绍:

sqoop是连接关系型数据库和hadoop的桥梁,主要有两个方面(导入和导出):

  • 导入imoport:将关系型数据库的数据导入到Hadoop及其相关的系统中,如Hive和HBase

  • 导出export:将数据从Hadoop系统里抽取并导出到关系型数据库

img

由于 Hive 的数据是存储在 HDFS 上的,所以 Hive 导入数据到 MySQL,实际上就是 HDFS 导入数据到 MySQL。

3.Sqoop的优点:

  • 可以高效、可控的利用资源,可以通过调整任务数来控制任务的并发度。

  • 可以自动的完成数据映射和转换。由于导入数据库是有类型的,它可以自动根据数据库中的类型转换到Hadoop中,当然用户也可以自定义它们之间的映射关系。

  • 支持多种数据库,如mysql,orcale等数据库。

4.sqoop工作的机制:

将导入或导出命令翻译成MapReduce程序来实现在翻译出的MapReduce中主要是对InputFormat和OutputFo1 mat进行定制。

5.sqoop版本介绍:sqoop1和sqoop2

  • sqoop的版本sqoop1和sqoop2是两个不同的版本,它们是完全不兼容的。

  • 版本划分方式:apache1.4X之后的版本是11.99.0之上的版本是2。

  • Sqoop2相比sqoop1的优势有:

  1. 它引入的sqoop Server,便于集中化的管理Connector或者其它的第三方插件;

  2. 多种访问方式:CLI、WebUIRESTAPI;

  3. 它引入了基于角色的安全机制,管理员可以在sqoop Server上配置不同的角色。

  • Sqoop2和sqoop1的功能性对比:

img

6. sqoop1和sqoop2的架构区别:

1)sqoop1的架构图:

img

版本号:1.4X以后的sqoop1

在架构上:sqoop1使用sqoop客户端直接提交代码方式

访问方式:CLI命令行控制台方式访问

安全性:命令或者脚本指定用户数据库名和密码

原理:Sgoop工具接收到客户端的shell命令或者Javaapi命令后,通过Sgoop中的任务翻译器(TaskTranslator)将命令转换为对应的MapReduce任务,而后将关系型数据库和Hadoop中的数据进行相互转移,进而完成数据的拷贝。

2)sqoop2架构图:

img

  • Sqoop1和sqoop2优缺点:

sqoop1优点:架构部署简单

sqoop1缺点:命令行方式容易出错,格式紧耦合,无法支持所有数据类型,安全机制不够完善,例如密码暴漏,安装需要root权限,connector必须符合JDBC模型。

sqoop2优点:多种交互方式,命令行,webUI,restA PI,conncetor集中化管理,所有的链接安装在sgoopser ver上,完善权限管理机制,connector规范化,仅仅负责数据的读写。

  • sqoop2缺点:sqoop2的缺点:架构稍复杂,配置部署更繁琐。

7.Sqoop原理

7.1 import

以从 MySQL 中导入数据到 HDFS 为例,Sqoop 通过提交任务给 Hadoop 集群,然后 MapReduce 通过 JDBC 从 MySQL 中读取数据,并存入 HDFS ,注意只需要 Map 阶段即可,并不需要 Reduce 阶段,根据启动的 Map 的数量,数量越大,并行度越高,以此可以实现大数据量的同步。

  • Sqoop Import 将关系型数据库中的数据导入到 HDFS 或 HIVE 上,导入过程实际上是通过 select 语句,可以通过 sqoop importsqoop-import 后跟参数使用。

7.2export

  • Sqoop Export 将 HDFS 或 HIVE 上的数据导出到关系型数据库中,导出的时候,Sqoop 会读取 HDFS 上的文件,然后按照我们指定的分隔符将其分成字段,根据我们传递的参数,Sqoop 会生成 insert 语句或 update 语句,将数据插入到关系型数据库中,使用方法可以通过 sqoop exportsqoop-export 后跟参数。

8.Sqoop数据划分

  • Sqoop 是如何获取分片字段的范围的呢? Sqoop 会执行
select min(<split-by>), max(<split-by>) from <table name>  

来获取分片字段的最大最小值,再根据分片字段范围划分出每个 Mapper 需要读取的数据范围,我们可以通过 --boundary-query 参数来替换掉获取分片范围的查询语句。

  • Sqoop在import时,需要制定split-by参数。Sqoop根据不同的split-by参数值来进行切分,然后将切分出来的区域分配到不同map中。每个map中再处理数据库中获取的一行一行的值,写入到HDFS中。

  • 同时split-by根据不同的参数类型有不同的切分方法,如比较简单的int型,Sqoop会取最大和最小split-by字段值,然后根据传入的num-mappers来确定划分几个区域。

9. 类型映射

Sqoop 在创建导入导出任务前,会先根据数据的结构,将每一条数据记录构造成一个 JavaBean 对象,这样就可以将对数据的操作转化为对 JavaBean 的操作,这其中比较重要的一点是数据类型映射,也就是如何将数据库中的数据类型与 JavaBean 中的数据类型对应起来,Sqoop 默认的对应关系是:

img

如果想要更改对应关系,可以通过 --map-column-java 参数来指定,例如:如果数据库中有张 user 表,字段为 id,name,age,通过 --map-column-java id=String, name=String, age=Integer ,这样就实现了自定义类型映射。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值