Sqoop2架构与功能说明(1.99.3) 2015-07-21 19:00

介绍

Sqoop是一个开源的ETL软件。通过Sqoop可以在关系数据库(如Oracle、MySQL)与HDFS之间导入和导出数据。

Sqoop通过Hadoop的MapReduce将关系数据库中的数据导入到HDFS中。Sqoop也支持从HDFS数据导出到关系数据库。

关系数据库方面:Sqoop支持可通过JDBC驱动访问的各种常见数据库。比如Oracle、MySQL、Microsoft SQL Server和PostgreSQL等。

Hadoop方面:最新版本的Sqoop仅支持导入到HDFS中,不支持直接导入到Hive和HBase中(详见后文Sqoop 1和Sqoop 2的对比)。

Sqoop1和Sqoop2对比

Sqoop1是指Sqoop 1.4.x系列版本,此系列版本Sqoop为单机模式部署形态。

Sqoop2是指Sqoop 1.99.x系列版本,此系列版本Sqoop的C/S模式部署形态。

  • 对比1:支持的关系数据库类型

差别不大,常见的关系型数据库二者都可以支持。

  • 对比2:集成Kerberos认证

Sqoop1支持集成Kerberos认证,Sqoop2的1.99.3版本还不支持(Sqoop 1.99.6版本已经支持)。

  • 对比3:关系数据库与Hive、HBase之间的数据互导

Sqoop1支持,Sqoop2不支持。在Sqoop2场景下,可以通过先将数据导入/导出到HDFS中转。HDFS<->Hive/HBase可以使用Hive的LOAD DATA等命令完成。

Sqoop2架构

架构图

我画的架构图:

网上的架构图:

架构描述

  • Sqoop Server提供REST接口,Sqoop Client的内部实现实际上通过REST接口访问Sqoop Server;
  • Sqoop提供Java API,可通过此API连接Server;
  • Sqoop Server启动后会监听两个端口,分别是12000和12001。其中12000用于提供REST接口,12001说是用于管理,具体使用方法未知。

Sqoop不足

  • Sqoop Server不支持基于时间的任务调度。Sqoop Server支持以批处理脚本的方式执行命令,可以基于批处理脚本结合crontab等时间调度软件,实现任务的周期性调度;
  • Sqoop只支持从关系型数据库中导数据,只支持导出结构化数据,不支持导非结构化数据;
  • 作为ETL软件,Sqoop有提供Extract和Load的功能,但Transformation的功能基本没有提供。比如无法对抽取的数据作为格式变换;
  • Sqoop的metadata保存在Derby数据库中,目前暂不支持使用MySQL存储Metadata;
Tags: #Sqoop    Post on ETL