Skip to content

Apache Sqoop

1. Apache Sqoop介绍

Alt text Sqoop 项目出现在2009年,它的名字取自 SQL–to–Hadoop,最初是 Hadoop 内部一个模块,后来成为独立项目。它是Apache旗下一款在Hadoop和关系数据库(RDBMS)之间传送数据的工具。Sqoop 的核心的功能有两个:
导入:将MySQL,Oracle 等的数据导入到Hadoop的HDFS、Hive、HBase等系统中;
导出:从Hadoop系统中的数据,导出到关系数据库如MySQL等。
Alt text Sqoop本质是批量迁移数据,迁移的方式就是把Sqoop命令转换成MapReduce 程序,进而能够分布式并行执行,提高数据导入导出的效率。
Alt text 到了2012年的时候,社区发出了下一代Sqoop架构的设计讨论,这就是Sqoop 2。Sqoop 2主要解决Sqoop的一些安全缺陷,例如客户端需要安装配置 RDBMS connector、需要以root身份运行、需要配置连接密码等,这些问题对于重视数据安全的企业来说非常重要。
Sqoop 2引入了Sqoop Server的组件(如下图),并将用户角色区分成Admin和Operator。Admin在Server端配置各个数据库的connector以及连接密码等重要信息;Operator通过CLI或API触发Sqoop任务的执行;这样Operator及客户端的信息安全得到大幅度提升。
Alt text 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安装包到指定目录,如:

sh
[jack@hadoop102 software]$ tar -zxf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz  -C /opt/module/

4)解压sqoop安装包到指定目录,如:

sh
[jack@hadoop102 module]$ mv sqoop-1.4.7.bin__hadoop-2.6.0/ sqoop

3.2 修改配置文件

  1. 进入到/opt/module/sqoop/conf目录,重命名配置文件
sh
[jack@hadoop102 conf]$ mv sqoop-env-template.sh sqoop-env.sh
  1. 修改配置文件
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

sh
[jack@hadoop102 sqoop]$ bin/sqoop help

出现一些Warning警告(警告信息已省略),并伴随着帮助命令的输出:

sh
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