Sqoop 是一个开源工具,主要用于在Hadoop和传统的数据库(Mysql, Oracle,等)进行数据传递,可以将一个关系型数据库中的数据导入Hadoop 的HDFS中,也可以将HDFS中的数据导出到关系型数据库中。

1.  目前主要有sqoop1 和sqoop2两个版本,两者架构如下图所示:

a.  sqoop1 架构:                                                                                    b. sqoop2 架构

Sqoop2 (1.99.7)安装部署及问题解决  Sqoop2 (1.99.7)安装部署及问题解决

很明显,sqoop2中引入了sqoop server集中化管理connector,以及rest api,web,CLI多种交互方式,并引入权限安全机制,较sqoop1有较大改变。他的配置过程及配置文件较sqoop1也有较大不同。


2. 安装和配置过程  

    tar zxvf sqoop-1.99.7-bin-hadoop200.tar.gz

    mv sqoop-1.99.7-bin-hadoop200 sqoop

    mv sqoop  /home/hadoop/    

    cd /home/hadoop/sqoop  && mkdir logs

2.1  sqoop 环境变量设置

     .bashrc 中增加以下变量声明:

     export SQOOP_HOME=/home/hadoop/sqoop

     export PATH=$SQOOP_HOME/bin:$PATH

     export CATALINA_HOME=$SQOOP_HOME/server

     export LOGDIR=$SQOOP_HOME/logs


2.2  hadoop 参数配置

    Sqoop server 需要模拟用户访问集群内外的HDFS和其他资源,所以,需要配置Hadoop通过所谓proxyuser系统显示地允许这种模拟。也就是要在hadoop 目录的etc/hadoop/core-site.xml 中增加下面两个属性。两个value的地方写*或实际用户名均可。

<property>
  <name>hadoop.proxyuser.sqoop2.hosts</name>
  <value>*</value>       
</property>
<property>
  <name>hadoop.proxyuser.sqoop2.groups</name>
  <value>*</value>            
</property>


2.3  sqoop server 配置

主要是配置sqoop目录下的 conf/sqoop.properties文件的下面配置项:

# mapreduce的配置文件路径

org.apache.sqoop.submission.engine.mapreduce.configuration.directory=$HADOOP_HOME/etc/hadoop     // 把$HADOOP_HOME替换为实际i的路径

# sqoop2支持hadoop的simple>和kerberos两种验证机制,需要配置,否则会报authentication异常
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

同时,把有LOGDIR, BASEDIR引用的均替换为实际的绝对路径,如/home/hadoop/sqoop/logs, /home/hadoop/sqoop

2.4 安装mysql JDBC Driver 到sqoop/server/lib 下

        cp  -afr mysql-connector-java-xxx.jar  sqoop/server/lib


2.5 初始化metadata repository 并验证配置是否生效:

    bin/sqoop2-tool upgrade

    执行 bin/sqoop2-tool verify 将看到如下 successful相关信息。

    ................

    Verification was successful.

    Tool class org.apache.sqoop.tools.tool.VerifyTool has finished correctly.


3.  启动

bin/sqoop.sh --help 会输出启动相关的帮助信息,如:

Usage: sqoop.sh COMMAND,

     where COMMOND is one of :

         server <start/stop/run>

         client [script]


 3.1  start server

启动sqoop2 server 前,确保Hadoop 已经启动,然后 bin/sqoop2-server start  or  bin/sqoop.sh serve rstart/stop

   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

    Sqoop2 server started.

 输入jps 能看到 SqoopJettyServer进程。


3.2 start client

bin/sqoop.sh slient 报下面错误, 

java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable

sqoop.sh 脚本中的JAVA_OPTS 行,增加  -Djava.awt.headless=true

然后再启动就可以看到交互终端了

Setting conf dir: /home/hadoop/bigdata/sqoop/bin/../conf
Sqoop home directory: /home/hadoop/bigdata/sqoop
Sqoop Shell: Type 'help' or '\h' for help.

sqoop:000>


更多操作,见sqoop 官网文档:

https://sqoop.apache.org/docs/1.99.7/admin/Installation.html

https://sqoop.apache.org/docs/1.99.7/user/CommandLineClient.html



附:  Sqoop2的核心概念  (摘录自 http://blog.csdn.net/gamer_gyt/article/details/55225700,以便理解客户端命令行中的操作和参数,引用的图片也来自于此网页)

由于sqoop2是C-S架构,Sqoop的用户都必须通过sqoop-client类来与服务器交互,sqoop-client提供给用户的有:
    连接服务器
    搜索connectors
    创建Link
    创建Job
    提交Job
    返回Job运行信息等功能

这些基本功能包含了用户在数据迁移的过程中所用到的所有信息。
sqoop2中将数据迁移任务中的相关概念进行细分。将数据迁移任务中的数据源, 数据传输配置, 数据传输任务进行提取抽象。经过抽象分别得到核心概念Connector, Link, Job, Driver。
(1)connector

    sqoop2中预定一了各种里链接,这些链接是一些配置模板,比如最基本的generic-jdbc-connector,还有hdfs-connector,通过这些模板,可以创建出对应数据源的link,比如我们链接mysql,就是使用JDBC的方式进行链接,这时候就从这个generic-jdbc-connector模板继承出一个link,可以这么理解。

(2)link
    Connector是和数据源(类型)相关的。对于Link是和具体的任务Job相关的。
    针对具体的Job, 例如从MySQL->HDFS 的数据迁移Job。就需要针对该Job创建和数据源MySQL的Link1,和数据目的地MySQL的Link2.
    Link是和Job相关的, 针对特定的数据源,配置信息。
    Link定义了从某一个数据源读出和写入时的配置信息。

(3)job
    Link定义了从某一个数据源的进行读出和写入时的配置信息。Job是从一个数据源读出, 写入到另外的一个数据源的过程。
    所以Job需要由Link(From), Link(To),以及Driver的信息组成。

(4)Dirver
    提供了对于Job任务运行的其他信息。比如对Map/Reduce任务的配置。



相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-11-12
  • 2022-01-18
  • 2021-04-03
  • 2022-12-23
  • 2021-11-08
  • 2021-09-27
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-08-26
  • 2022-12-23
  • 2021-11-25
  • 2021-12-26
  • 2021-07-28
相关资源
相似解决方案