Sqoop的工作机制(一)

1. 什么是Sqoop

Sqoop是一种用于在Hadoop和结构化数据存储之间高效传输大批量数据的工具。它允许用户将数据从结构化存储器抽取到Hadoop中,用于进一步处理。举个栗子:

Sqoop可以从关系型数据库管理系统向Hadoop分布式文件系统中导入数据,可以通过MapReduce处理或者被Hive使用,甚至可以使用Sqoop将数据从数据库转移到HBase上。同时Sqoop可以将数据从Hadoop中(如Hive中)导入到关系型数据库,会基于配置文件来完成数据的导入和导出工作。

2. Sqoop的工作机制

Sqoop的底层工作原理本质上是MapReduce任务。Sqoop是通过一个MapReduce作业从数据库中导入一个表,这个job从表中逐行抽取数据,接着将一行行的数据写入到HDFS中。下面分别介绍Sqoop的导入导出机制:

2.1 Sqoop的导入机制

下图为Sqoop数据导入机制图:
在这里插入图片描述

Sqoop底层是Java,而Java提供了JDBC API,通过JDBC API,应用程序可以访问存储在关系型数据库中的数据。Sqoop在进行数据的导入导出操作时都会用到JDBC。在导入数据之前,Sqoop会通过JDBC查询出表中的列和列的类型,同时这些类型会与Java的数据类型相匹配,而底层运行的MapReduce会根据这些Java类型来保存字段对应的值。
在数据导入的过程中,有两个DBWritable接口的序列化方法,通过这两个方法可以实现对JDBC的交互,其中readFields()方法将ResultSet中的数据填充到对象的字段中。

//方法一:
public void readFields(resultSet _dbResults) throws SQLException;
//方法二:
public void write(PreparedStatement _dbstmt) throws SQLException;

在导入的过程中,Sqoop会启动相应的MapReduce作业,而MapReduce作业会通过InputFormat以JDBC的方式从数据库中读取数据,Hadoop中的DataDrivenDBInputFormat能够为不同的Map任务将查询结果进行划分。
在生成反序列化代码和配置了InputFormat之后,Sqoop就会将作业发到MapReduce集群,Map任务会把查询到的ResultSet数据填充到类的实例中。在导入数据时,如果不想取出全部数据,可以通过类似于where的语句进行限制。

2.2 Sqoop的导出机制

下图为Sqoop数据导出机制图:
在这里插入图片描述

Sqoop的导出通常是将HDFS的数据导入到关系型数据库中,关系型数据库中的表必须提前创建好。在底层方面,导出之前,Sqoop会选择导出方法,通常是JDBC,接着Sqoop会生成一个Java类,这个类可以解析文本中的数据,并将相应的值插入表中,在启动MapReduce之后,会从HDFS中读取并解析数据,同时执行选定的导出方法。
基于JDBC的导出方法会生成多条insert语句,每条insert语句均会向表中插入多条数据,同时为了确保不同I/O可以并行执行,在从HDFS读取数据并与数据库通信的时候,多个单线程同时运行。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值