介绍
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中转。HDFSHive/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;