Centos7安装sqoop1.4.7超详细教程
Apache Sqoop
Sqoop(SQL to Hadoop)是一个开源工具,用于在 Hadoop 和关系型数据库之间高效地传输大规模的数据。它主要用于将数据从关系数据库(如 MySQL、PostgreSQL、Oracle 等)导入到 Hadoop 的分布式文件系统(HDFS)中,或将数据从 Hadoop 导出到关系数据库。
主要功能和特性:
-
数据导入:
- 从关系数据库将数据导入到 HDFS、HBase 或 Hive。
- 支持增量导入,可以只导入新数据或更新数据。
-
数据导出:
- 将数据从 HDFS、HBase 或 Hive 导出到关系数据库中。
-
多种连接支持:
- 支持多种关系型数据库,通过 JDBC 驱动进行连接。
-
并行处理:
- 支持数据的并行导入和导出,可以通过划分数据的方式提高性能。
-
数据转换:
- 在导入过程中,可以对数据进行转换,比如过滤和格式化。
-
支持多种格式:
- 支持多种数据存储格式,如文本文件、Avro、Parquet 等。
常用命令:
导入数据:
sqoop import --connect jdbc:mysql://localhost:3306/dbname \
--username user --password password \
--table tablename --target-dir /path/to/hdfs
导出数据
sqoop export --connect jdbc:mysql://localhost:3306/dbname \
--username user --password password \
--table tablename --export-dir /path/to/hdfs
--username user --password password \
--table tablename --export-dir /path/to/h
--username user --password password \
--table tablename --export-dir /path
--username user --password password \
--table tablename --export-dir
--username user --password password \
--table tablename --exp
--username user --password password \
--table tablenam
--username user --password password \
--table
--username user --password password \
--username user --password passwor
--username user --password p
--username user --pas
--username us
--us
列出数据库:`
sqoop list-databases --connect jdbc:mysql://localhost:3306/ \
--username user --password password
更多使用方法:
Apache Sqoop详细教程-CSDN博客
sqoop使用入门 - 斐波那切 - 博客园
Sqoop入门(一篇就够了)-阿里云开发者社区
使用场景:
- 大数据集成: 将大规模的历史数据导入 Hadoop 进行分析和处理。
- 数据备份: 常规的
- 实时数据处理: 利用 Hadoop 的实时处理能力,结合数据库中的实时数据。
Sqoop 是数据工程师和分析师常用的工具,帮助他们高效地管理和迁移数据,支持大数据处理和分析的需求。
环境一览表
Hadoop | 3.3.0 |
MySQL | 5.7.25 |
Hive | 3.1.2 |
Sqoop | 1.4.7 |
基础组件安装教程:
Hadoop安装https://blog.csdn.net/qq_73252299/article/details/139551486?ops_request_misc=%257B%2522request%255Fid%2522%253A%252223128DE1-B118-4D86-97F0-23C5B033CFA3%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=23128DE1-B118-4D86-97F0-23C5B033CFA3&biz_id=0&spm=1018.2226.3001.4450
Mysql安装https://blog.csdn.net/qq_73252299/article/details/142316629?spm=1001.2014.3001.5501
Hive安装https://blog.csdn.net/qq_73252299/article/details/142515226?spm=1001.2014.3001.5501
Sqoop安装包下载
同版本下载(安装配套下载站)
官方下载(原版)
安装
sqoop主要安装在主节点master/node1上,其他计算节点看具体需求
下载好的压缩包上传解压
解压使用命令
tar -zxvf 压缩包.tar.gz
修改配置文件
先进入Sqoop解压包目录中的conf文件夹目录下,将sqoop-env-template.sh文件复制并重命名为sqoop-env.sh,对该文件中的如下内容进行修改。
sqoop-env.sh(原)
sqoop-env.sh(新)
文件中需要修改的变量:
export HADOOP_COMMON_HOME=/export/server/hadoop-3.3.0
export HADOOP_MAPRED_HOME=/export/server/hadoop-3.3.0
export HIVE_HOME=/export/server/apache-hive-3.1.2-bin
在sqoop-env.sh配置文件中,需要配置的是Sqoop运行时必备环境的安装目录,Sqoop运行在Hadoop之上,因此必须指定Hadoop环境。另外,在配置文件中还要根据需要自定义配置Hbase、Hive和Zookeeper等环境变量(例如本章后续将会使用到Hive,所以必须配置Hive的环境变量,而其他无关环境变量如果未配置,使用过程中可能会出现警告提示,但不影响其他操作)。
小提示:
需要说明的是,本文讲解的Hadoop是Apache社区版本,Hadoop重要的组件都是安装在一个安装包中,所以上述配置文件中配置的HADOOP_COMMON_HOME与HADOOP_MAPRED_HOME指定的Hadoop安装目录一致。如果使用第三方的Hadoop,这些组件都是可选择配置的,那么这两个路径可能会有所不同。
将sqoop加入系统环境变量
为了后续方便Sqoop使用和管理,可以配置Sqoop系统环境变量。使用“vi /etc/profile”指令进入到profile文件,在文件底部进一步添加如下内容类配置Sqoop系统环境变量。
vim /etc/profile
export SQOOP_HOME=/opt/sqoop1.4.7
export PATH=$PATH:$SQOOP_HOME/bin:
(hadoop环境变量我放在别地,不影响使用)
编辑完成后保存退出
:wq
刷新环境变量
source /etc/profile
看到出现环境变量后配置完成
当完成前面Sqoop的相关配置后,还需要根据所操作的关系型数据库添加对应的JDBC驱动包,用于数据库连接。本书将针对MySQL数据库进行数据迁移操作,所以需要将mysql-connector-java-5.1.32.jar(版本可以自行选择)包上传至Sqoop解压包目录的lib文件夹下。
这里我直接从hive的lib目录中复制,保持驱动版本一致
cp mysql-connector-java-5.1.47-bin.jar /opt/sqoop1.4.7/lib/
完成
如遇到报错提示commons-lang-2.6.jar缺失,从hive的lib目录下复制到sqoop的lib目录下即可解决
报错相似日志:
[root@node1 lib]# sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password 123456
Warning: /opt/sqoop1.4.7/../hbase does not exist! HBase imports will fail.
Please set $HBASE_HOME to the root of your HBase installation.
Warning: /opt/sqoop1.4.7/../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /opt/sqoop1.4.7/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
Warning: /opt/sqoop1.4.7/../zookeeper does not exist! Accumulo imports will fail.
Please set $ZOOKEEPER_HOME to the root of your Zookeeper installation.
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
2024-10-23 10:02:37,907 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7
2024-10-23 10:02:38,334 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
2024-10-23 10:02:38,603 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils
at org.apache.sqoop.manager.MySQLManager.initOptionDefaults(MySQLManager.java:73)
at org.apache.sqoop.manager.SqlManager.<init>(SqlManager.java:89)
at com.cloudera.sqoop.manager.SqlManager.<init>(SqlManager.java:33)
at org.apache.sqoop.manager.GenericJdbcManager.<init>(GenericJdbcManager.java:51)
at com.cloudera.sqoop.manager.GenericJdbcManager.<init>(GenericJdbcManager.java:30)
at org.apache.sqoop.manager.CatalogQueryManager.<init>(CatalogQueryManager.java:46)
at com.cloudera.sqoop.manager.CatalogQueryManager.<init>(CatalogQueryManager.java:31)
at org.apache.sqoop.manager.InformationSchemaManager.<init>(InformationSchemaManager.java:38)
at com.cloudera.sqoop.manager.InformationSchemaManager.<init>(InformationSchemaManager.java:31)
at org.apache.sqoop.manager.MySQLManager.<init>(MySQLManager.java:65)
at org.apache.sqoop.manager.DefaultManagerFactory.accept(DefaultManagerFactory.java:67)
at org.apache.sqoop.ConnFactory.getManager(ConnFactory.java:184)
at org.apache.sqoop.tool.BaseSqoopTool.init(BaseSqoopTool.java:272)
at org.apache.sqoop.tool.ListDatabasesTool.run(ListDatabasesTool.java:44)
at org.apache.sqoop.Sqoop.run(Sqoop.java:147)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:234)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:243)
at org.apache.sqoop.Sqoop.main(Sqoop.java:252)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.StringUtils
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 20 more
解决:
从hive/lib目录下复制到sqoop/lib目录下即可解决
测试
执行完上述Sqoop的安装配置操作后,就可以执行Sqoop相关指令来验证Sqoop的执行效果了,测试查看数据库
sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password 123456
从图中可以看出,执行完上述指令后,通过Sqoop成功查询出连接的MySQL数据库中的所有数据库名,这就说明Sqoop的安装配置正确。