什么是Sqoop?它的工作机制是什么?

大数据技术 潘老师 3年前 (2021-05-18) 2702 ℃ (0) 扫码查看

一、Sqoop是什么

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

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

二、Sqoop 工作机制

Sqoop的成层原理本质上是MapRatuce 任务。Sqoop是通过个MapReduve作业从数据库中导入一个表,这个作业从表中逐行抽取数据,接着将一行行的数据写入HDFS。

那么底层是如何实现的呢?下面我们具体介绍Sqoop如何将数据从数据库中导入到HDFS中以及从HDFS中导入到数据库中的过程,以此来更好地了解Sqop的工作机制。如下图所示为Sqoop将数据从关系型数据库导入到HDFS中的原理图。
什么是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 vold write (PreparedStatement dbstmt) throws SQLException;

在导入过程中,Sqoop 会启动相应的MapReduce 作业,而MapReduce作业会通InpuFormat以JDBC的方式从数据库中读取数据,Hadop中的DataDrivenDBInpuFormat能够为不同的Map任务将查询结果进行划分。

在生成反序列化代码和配置了InpuFormat之后,Sqoop就会将作业发到MapReduce集群,Map任务会把查询到的ResultSet数据填充到类的实例中。在导出数据时,如果不想取出全部数据,可以通过类似于where的语句进行限制,如图所示。
什么是Sqoop?它的工作机制是什么?

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


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/java/bigdata/3172.html
喜欢 (1)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】