主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中
sqoop主要有两个版本:1.4.x、1.99.x ; sqoop1和sqoop2两个版本。
环境变量配置无问题。 【以下问题是1.99.6版本,经过多方尝试,仍报错】
报错
【-bash: sqoop: command not found】
- sqoop2中已经没有sqoop command指令了...sqoop指令是适用与sqoop1的
进入sqoop.sh client,使用show job 等。
报错
sqoop:000> show job
Exception has occurred during processing command
Exception: org.apache.sqoop.common.SqoopException Message: CLIENT_0000:An unknown error has occurred
- 原因是没有指定服务端,需设置 set server --host 主机名或IP地址
sqoop:000> set server --host 主机名或IP地址
Server is set successfully
- 可通过设置,查看错误原因
sqoop:000> set option --name verbose --value true
Verbose option was changed to true
尝试利用sqoop2 1.99.7版本
下载地址 [https://mirrors.tuna.tsinghua.edu.cn/apache/sqoop/]
配置好环境变量
export SQOOP2_HOME=/usr/local/sqoop/
export PATH=$PATH:$SQOOP2_HOME/bin
export CATALINA_BASE=$SQOOP2_HOME/server
修改 $SQOOP2_HOME/conf/sqoop.properties
org.apache.sqoop.submission.engine.mapreduce.configuration.directory=/usr/local/hadoop-2.7.7/etc/hadoop
org.apache.sqoop.security.authentication.type=SIMPLE
org.apache.sqoop.security.authentication.handler=org.apache.sqoop.security.authentication.SimpleAuthenticationHandler
org.apache.sqoop.security.authentication.anonymous=true
# Number of milliseconds, submissions created before this limit will be removed, default is one day //锁定提交的job时间,锁定时间内不能删除
org.apache.sqoop.submission.purge.threshold=300000
# JDBC repository provider configuration //jdbc配置目录
org.apache.sqoop.repository.jdbc.url=jdbc:derby:/usr/local/sqoop/logs/repository/db;create=true
org.apache.sqoop.log4j.appender.file.File=/usr/local/sqoop/logs/sqoop.log //sqoop2日志文件目录
org.apache.sqoop.repository.sysprop.derby.stream.error.file=/usr/local/sqoop/logs/derbyrepo.log //错误日志文件目录
启动服务端 $SQOOP2_HOME/bin/sqoop2-server start
报错
Setting conf dir: /usr/local/sqoop/bin/../conf
Sqoop home directory: /usr/local/sqoop
Can't load the Hadoop related java lib, please check the setting for the following environment variables:
HADOOP_COMMON_HOME, HADOOP_HDFS_HOME, HADOOP_MAPRED_HOME, HADOOP_YARN_HOME
检查Hadoop环境是否配置正确
export HADOOP_HOME=/usr/local/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin;
<span style="color:red">注意
</span>:配置这个变量主要是让Sqoop能找到以下目录的jar文件和Hadoop配置文件:
- $HADOOP_HOME/share/hadoop/common
- $HADOOP_HOME/share/hadoop/hdfs
- $HADOOP_HOME/share/hadoop/mapreduce
- $HADOOP_HOME/share/hadoop/yarn
官网上说名了可以单独对各个组建进行配置,使用以下变量:
HADOOP_HDFS_HOME, HADOOP_YARN_HOME
若$HADOOP_HOME已经配置了,最好不要再配置下面的变量,可能会有些莫名错误。
查看是否启动成功方式有三种
- 第一种查看日志
[root@localhost bin]# sqoop2-server start
Setting conf dir: /usr/local/sqoop/bin/../conf
Sqoop home directory: /usr/local/sqoop
Starting the Sqoop2 server...
0 [main] INFO org.apache.sqoop.core.SqoopServer - Initializing Sqoop server.
5 [main] INFO org.apache.sqoop.core.PropertiesConfigurationProvider - Starting config file poller thread
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hadoop-2.7.7/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/apache-hive-2.3.4-bin/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
Sqoop2 server started.
- 第二种执行访问 http://IP地址:12000/sqoop/version
- 第三种执行JPS命令查看进程:Bootstrap、SqoopJettyServer
[root@localhost bin]# jps
22402 RunJar
5861 Jps
11848 NamesrvStartup
2936 DataNode
3513 jenkins.war
5561 SqoopJettyServer
2060 NameNode
22317 RunJar
12285 JswLauncher
12686 NodeManager
12399 ResourceManager
5135 Bootstrap
启动客户端 $SQOOP2_HOME/bin/sqoop2-shell
再次尝试 show job、show connector 没有报错 这说明安装部署成功
sqoop:000> show connector
0 [main] WARN org.apache.hadoop.util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
+------------------------+---------+------------------------------------------------------------+----------------------+
| Name | Version | Class | Supported Directions |
+------------------------+---------+------------------------------------------------------------+----------------------+
| generic-jdbc-connector | 1.99.7 | org.apache.sqoop.connector.jdbc.GenericJdbcConnector | FROM/TO |
| kite-connector | 1.99.7 | org.apache.sqoop.connector.kite.KiteConnector | FROM/TO |
| oracle-jdbc-connector | 1.99.7 | org.apache.sqoop.connector.jdbc.oracle.OracleJdbcConnector | FROM/TO |
| ftp-connector | 1.99.7 | org.apache.sqoop.connector.ftp.FtpConnector | TO |
| hdfs-connector | 1.99.7 | org.apache.sqoop.connector.hdfs.HdfsConnector | FROM/TO |
| kafka-connector | 1.99.7 | org.apache.sqoop.connector.kafka.KafkaConnector | TO |
| sftp-connector | 1.99.7 | org.apache.sqoop.connector.sftp.SftpConnector | TO |
+------------------------+---------+------------------------------------------------------------+----------------------+
sqoop:000> show job
+----+------+----------------+--------------+---------+
| Id | Name | From Connector | To Connector | Enabled |
+----+------+----------------+--------------+---------+
+----+------+----------------+--------------+---------+
尝试后
我想要的功能是将hive数据移入mysql,经对sqoop2的使用发现,sqoop2并不支持。遗憾。接下来将尝试sqoop1。
区别在于
功能 | Sqoop 1 | Sqoop 2
--|---
用于所有主要 RDBMS 的连接器 | 支持 | 不支持 解决办法: 使用已在以下数据库上执行测试的通用 JDBC 连接器: Microsoft SQL Server 、 PostgreSQL 、 MySQL 和 Oracle 。 此连接器应在任何其它符合 JDBC 要求的数据库上运行。但是,性能可能无法与 Sqoop 中的专用连接器相比
Kerberos 安全集成 | 支持 | 不支持
数据从 RDBMS 传输至 Hive 或 HBase | 支持 | 不支持 解决办法: 按照此两步方法操作。 将数据从 RDBMS 导入 HDFS 在 Hive 中使用相应的工具和命令(例如 LOAD DATA 语句),手动将数据载入 Hive 或 HBase
数据从 Hive 或 HBase 传输至 RDBMS | 不支持 解决办法: 按照此两步方法操作。 从 Hive 或 HBase 将数据提取至 HDFS (作为文本或 Avro 文件) 使用 Sqoop 将上一步的输出导出至 RDBMS | 不支持 按照与 Sqoop 1 相同的解决方法操作