1.什么是sqoop
Sqoop是Apache旗下的一款开源数据转移工具。Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop独立成为一个Apache项目。
Sqoop主要用于在Hadoop(HDFS,Hive,HBase等)与传统关系型数据(MySQL,Oracle,Postgres等)之间进行数据传递:可以将一个关系型数据库中的数据导入到Hadoop中,也可以将Hadoop中的数据导入到关系型数据库中。
Sqoop类似于其他ETL工具,使用元数据模型来判断数据类型,并在数据从数据源转移到Hadoop时确保类型安全的数据处理。Sqoop专为大数据批量传输设计,能够分割数据集,并创建Hadoop任务来处理每个区块。
2.sqoop的工作原理
Sqoop使用JDBC连接RDBMS和Hadoop(HDFS、Hive、HBase等),进行数据转移(对于某些NoSQL数据库它也提供了连接器)。如下图所示:

Sqoop的内部工作原理如下图所示:

Sqoop接收到客户端的shell命令或者Java API命令后,通过Sqoop内部的任务翻译器(Task Translator)将命令转换为对应的MapReduce任务,而后将关系型数据库和Hadoop中的数据进行相互转移,进而完成数据的拷贝。
3.Sqoop两个版本的区别
Sqoop有两个主流的版本1.4.x(Sqoop1)和1.99.x(Sqoop2),这两个版本完全不兼容,Sqoop1几乎无法平滑地升级到Sqoop2。
Sqoop2相比Sqoop1做了如下改进:
- 引入Sqoop Server,集中化管理Connector等;
- 访问方式多样化:CLI命令行界面、Web UI、Java API、REST API等;
- 引入基于角色的安全机制;
另外,其在安全性能方面也有一定的改善,在sqoop1中常用脚本的方式将HDFS中的数据导入到mysql中,或者反过来将mysql数据导入到HDFS中,其中在脚本里边都要显示指定mysql数据库的用户名和密码的,安全性做的不是太完善。在sqoop2中,如果是通过CLI方式访问的话,会有一个交互过程界面,输入的密码信息不会被看到。
Sqoop1和Sqoop2的架构图对比如下所示:

网友评论