sqoop安装部署问题事项

主要用于在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;

注意:配置这个变量主要是让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 相同的解决方法操作

你可能感兴趣的:(sqoop安装部署问题事项)