1.Sqoop 产生背景
Sqoop 的产生主要源于以下几种需求:
• 多数使用 Hadoop 技术处理大数据业务的企业,有大量的数据存储在传统的关系型数据库(RDBMS)中。
• 由于缺乏工具的支持,对 Hadoop 和 传统数据库系统中的数据进行相互传输是一件十分困难的事情。
• 基于前两个方面的考虑,亟需一个在 RDBMS 与 Hadoop 之间进行数据传输的项目。
2.Sqoop 是什么
Sqoop 是连接传统关系型数据库和 Hadoop 的桥梁。它包括以下两个方面:
• 将关系型数据库的数据导入到 Hadoop 及其相关的系统中,如 Hive和HBase。
• 将数据从 Hadoop 系统里抽取并导出到关系型数据库。
Sqoop 的核心设计思想是利用 MapReduce 加快数据传输速度。也就是说 Sqoop 的导入和导出功能是通过 MapReduce 作业实现的。所以它是一种批处理方式进行数据传输,难以实现实时的数据进行导入和导出。
3.为什么选择 Sqoop
我们为什么选择 Sqoop 呢?通常基于三个方面的考虑:
• 它可以高效、可控地利用资源,可以通过调整任务数来控制任务的并发度。另外它还可以配置数据库的访问时间等等。
• 它可以自动的完成数据类型映射与转换。我们往往导入的数据是有类型的,它可以自动根据数据库中的类型转换到 Hadoop 中,当然用户也可以自定义它们之间的映射关系。
• 它支持多种数据库,比如,Mysql、Oracle和PostgreSQL等等数据库。
4.Sqoop1与Sqoop2的比较
(1)sqoop1和sqoop2是两个不同的版本,它们是完全不兼容的。
(2)版本划分方式:Apache 1.4.x 之后的版本属于sqoop1,1.99.x之上的版本属于sqoop2.
(3)与sqoop1相比,sqoop2有以下优势:
• 它引入的sqoop Server,便于集中化的管理Connector或者其它的第三方插件;
• 多种访问方式:CLI、Web UI、REST API;
• 它引入了基于角色的安全机制,管理员可以在sqoop Server上配置不同的角色。
5.Sqoop安装
安装Sqoop的前提是已经具备Java和Hadoop的环境。
(1) 下载并解压
• 最新版下载地址:http://mirrors.hust.edu.cn/apache/sqoop/1.4.6/
• 上传安装包sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz到虚拟机中,如我的上传目录是:/opt/software
• 解压sqoop安装包到指定目录,如:$ tar -zxf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/module
(2) 修改配置文件
Sqoop的配置文件与大多数大数据框架类似,在sqoop根目录下的conf目录中。
(1)重命名配置文件
$ mv sqoop-env-template.sh sqoop-env.sh
$ mv sqoop-site-template.xml sqoop-site.xml
(2)修改配置文件:sqoop-env.sh
export HADOOP_COMMON_HOME=/opt/module/hadoop-2.7.2
export HADOOP_MAPRED_HOME=/opt/module/hadoop-2.7.2
export HIVE_HOME=/opt/module/hive
export HIVE_CONF_DIR=/opt/module/hive/conf
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.10
export ZOOCFGDIR=/opt/module/zookeeper-3.4.10
(3) 拷贝JDBC驱动
拷贝jdbc驱动到sqoop的lib目录下,如:$ cp -a mysql-connector-java-5.1.27-bin.jar /opt/module/sqoop/lib
(4) 验证Sqoop
我们可以通过某一个command来验证sqoop配置是否正确:
[luomk@hadoop102 sqoop]$ bin/sqoop help
Warning: /opt/module/sqoop/bin/../../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /opt/module/sqoop/bin/../../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
18/08/26 22:09:54 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
usage: sqoop COMMAND [ARGS]
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
(5) 测试Sqoop是否能够成功连接数据库
$ bin/sqoop list-databases --connect jdbc:mysql://hadoop102:3306/ --username root --password 123456
出现如下输出:
information_schema
company
ct
metastore
mysql
oozie
performance_schema
test
说明:出现上面自己新建的表,说明sqoop能够成功连接mysql