Apache Sqoop
1. Apache Sqoop介绍
Sqoop 项目出现在2009年,它的名字取自 SQL–to–Hadoop,最初是 Hadoop 内部一个模块,后来成为独立项目。它是Apache旗下一款在Hadoop和关系数据库(RDBMS)之间传送数据的工具。Sqoop 的核心的功能有两个:
导入:将MySQL,Oracle 等的数据导入到Hadoop的HDFS、Hive、HBase等系统中;
导出:从Hadoop系统中的数据,导出到关系数据库如MySQL等。 Sqoop本质是批量迁移数据,迁移的方式就是把Sqoop命令转换成MapReduce 程序,进而能够分布式并行执行,提高数据导入导出的效率。
到了2012年的时候,社区发出了下一代Sqoop架构的设计讨论,这就是Sqoop 2。Sqoop 2主要解决Sqoop的一些安全缺陷,例如客户端需要安装配置 RDBMS connector、需要以root身份运行、需要配置连接密码等,这些问题对于重视数据安全的企业来说非常重要。
Sqoop 2引入了Sqoop Server的组件(如下图),并将用户角色区分成Admin和Operator。Admin在Server端配置各个数据库的connector以及连接密码等重要信息;Operator通过CLI或API触发Sqoop任务的执行;这样Operator及客户端的信息安全得到大幅度提升。 Sqoop 2的设想是好的,但它也增加了用户部署和使用的复杂度;同时它跟Sqoop 1不兼容,不能无缝升级,一定程度上阻碍了它的普及。到Sqoop项目终止的时候,Sqoop 2仍然难产,2017年的时候Cloudera宣布Sqoop 2过时(不再发展),建议用户继续使用Sqoop 1。这在大数据技术快速发展的黄金时期,是非常少见的事情。
2. Sqoop项目停止发展
Apache董事会宣布终止Sqoop项目,并不是心血来潮;回看Sqoop项目的发展历史,你会发现 Sqoop 最近一次版本发布是在两年多以前,最近30个月没有任何新的PMC和committer加入到这个项目,这意味着Sqoop项目的活跃程度已经非常低,面临无人维护的尴尬局面。最终由其项目管理委员会(PMC)成员发起讨论,决定终止项目发展,将其归档至Apache Attic(阁楼)项目中,以告知广大用户相应的风险。
什么使得Sqoop项目停止了活跃?做为局外人,对于项目内部(特别是最大的贡献者Cloudera)到底发生了什么不得而知,但根据我们对大数据技术的演进和发展,总结出有这么几个方面:
- Sqoop功能趋于稳定和完整,功能比较完备了;
- Sqoop 1存在安全缺陷,而Sqoop 2架构复杂,用户左右为难;
- Sqoop依赖MapReduce;在越来越多用户迁移到云上、新的分布式计算框架(如 Spark、Flink、Kubernetes)越来越流行的今天,它已经不符合潮流;
- Hive、Spark、Presto等大数据组件都增加了对JDBC数据源的直接支持,可直接访问 RDBMS 数据,从而导致了用户对Sqoop的依赖度降低;
- 通过CDC/binlog的方式相比基于batch的Sqoop同步来讲实时性更好、对源系统的压力更小;
综合以上因素,Sqoop退出历史舞台是迟早的事情。
3. Sqoop安装
3.1 下载并解压
1)下载地址:https://archive.apache.org/dist/sqoop/
2)上传安装包sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz到hadoop102的/opt/software路径中。
3)解压sqoop安装包到指定目录,如:
[jack@hadoop102 software]$ tar -zxf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /opt/module/
4)解压sqoop安装包到指定目录,如:
[jack@hadoop102 module]$ mv sqoop-1.4.7.bin__hadoop-2.6.0/ sqoop
3.2 修改配置文件
- 进入到/opt/module/sqoop/conf目录,重命名配置文件
[jack@hadoop102 conf]$ mv sqoop-env-template.sh sqoop-env.sh
- 修改配置文件
[jack@hadoop102 conf]$ vim sqoop-env.sh
##增加如下内容
export HADOOP_COMMON_HOME=/opt/module/hadoop-3.3.6
export HADOOP_MAPRED_HOME=/opt/module/hadoop-3.3.6
3.3 验证Sqoop
[jack@hadoop102 sqoop]$ bin/sqoop help
出现一些Warning警告(警告信息已省略),并伴随着帮助命令的输出:
Available commands:
codegen Generate code to interact with database records
create-hive-table Import a table definition into Hive
eval Evaluate a SQL statement and display the results
export Export an HDFS directory to a database table
help List available commands
import Import a table from a database to HDFS
import-all-tables Import tables from a database to HDFS
import-mainframe Import datasets from a mainframe server to HDFS
job Work with saved jobs
list-databases List available databases on a server
list-tables List available tables in a database
merge Merge results of incremental imports
metastore Run a standalone Sqoop metastore
version Display version information