Sqoop 简介及安装部署

1.Sqoop 简介及架构

1.Sqoop 简介

      Sqoop即SQL to Hadoop,是一个将数据在关系数据库(如 MySQL/Oracle 等)和大数据产品(如 Hadoop/Hive/HBase等)之间导入/导出的有效工具,底层是通过MapReduce作业来完成。它充分利用了MapReduce的并行特点以批处理的方式加快数据的传输,同时也借助MapReduce实现了容错。

      目前主要包括两个版本:Sqoop1和Sqoop2,这两个版本不同,是完全不兼容的,版本<=1.4.6的都是Sqoop1,版本>=1.99.2的都是Sqoop2。Sqoop官网:http://sqoop.apache.org/

      不借助Sqoop实现数据的导入导出,我们也可以通过自己编写MapReduce来完成,但这样做存在的问题就是手动编写MapReduce比较麻烦,增加工作量,无法复用。

2.Sqoop 架构

Sqoop 1.x

Sqoop 简介及安装部署_第1张图片

      Sqoop1.x中,仅仅使用了一个Sqoop客户端,它是单用户的、架构部署简单。客户端发送命令到Sqoop,Sqoop转换为MapReduce作业运行在Hadoop集群环境上,从而实现RDBMS和Hadoop之间相互导入导出。Sqoop1.x只一个mapreduce作业,只有map没有reduce。

Sqoop2.x

Sqoop 简介及安装部署_第2张图片

      Sqoop2.x 中,引入了sqoop server集中化管理Connector,支持多种交互方式:命令行、Web UI、Rest API,所有的链接安装在sqoop server上,完善了权限管理机制(可配置管理员、使用者等角色),Connector规范化( 不再包含数据传输,格式转换、与Hive、Hbase交互等功能仅负责数据读写)。Sqoop2.x中的MapReduce作业既有Map也有Reduce。

Sqoop官网:http://sqoop.apache.org/,

2.Sqoop 安装部署

1.Sqoop 1.x 安装部署

(1).下载并解压安装包

笔者下载的Sqoop1的版本为1.4.6

Sqoop 简介及安装部署_第3张图片

Sqoop 简介及安装部署_第4张图片

解压安装包

$ tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
$ mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop1

(2).配置sqoop

$ cd sqoop1/conf
$ cp sqoop-env-template.sh sqoop-env.sh
$ vim sqoop-env.sh

修改sqoop-env.sh配置文件,设置HADOOP_COMMON_HOME、HADOOP_MAPRED_HOME、HIVE_HOME这三个属性,如下

export HADOOP_COMMON_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=/usr/local/hadoop
export HIVE_HOME=/home/hadoop/hive

将MySQL的驱动包复制到如下命令

$ cp mysql-connector-java-5.1.38.jar /home/hadoop/sqoop1/lib

(3).配置环境变量

$ vim ~/.bashrc

# Sqoop
export SQOOP_HOME=/home/hadoop/sqoop1
export PATH=$PATH:$SQOOP_HOME/bin

$ source ~/.bashrc

(4).查看是否安装成功

sqoop1/bin目录下存放了sqoop1.x的执行脚本,里面也有windows下的执行脚本,windows下的执行脚本我们不需要,执行如下命令删除

$ cd sqoop1/bin
$ rm *.cmd

Sqoop 简介及安装部署_第5张图片

上图中可以看到有一个sqoop的命令,但是又不知道如何使用,所以输入如下命令来查看帮助

$ sqoop help

Sqoop 简介及安装部署_第6张图片

笔者在输入sqoop help命令后,报错:
错误: 找不到或无法加载主类 org.apache.sqoop.Sqoop

解决方法:将sqoop1目录下的sqoop-1.4.6.jar拷贝到hadoop的lib目录下

$ cp sqoop-1.4.6.jar $HADOOP_HOME/lib/

拷贝到hadoop的lib目录后,如果还是报错,那么打开sqoop脚本显示指定sqoop-1.4.6.jar文件的所在位置

修改前:

exec ${HADOOP_COMMON_HOME}/bin/hadoop org.apache.sqoop.Sqoop "$@"

修改后:

exec ${HADOOP_COMMON_HOME}/bin/hadoop jar $SQOOP_HOME/sqoop-1.4.5.jar org.apache.sqoop.Sqoop "$@"

输入如下命令,查看当前Sqoop的版本信息

$ sqoop version

每次执行命令都会出现如下的警告信息,笔者是一个强迫症患者,看到这些警告甚是不爽,虽然不会对我们的操作造成任何影响。你可以直接略过。

Warning: /home/hadoop/sqoop2/../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /home/hadoop/sqoop2/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
Warning: /home/hadoop/sqoop2/../zookeeper does not exist! Accumulo imports will fail.
Please set $ZOOKEEPER_HOME to the root of your Zookeeper installation.

解决方法:修改Sqoop的文件bin/configure-sqoop,注释掉如下内容

if [ ! -d "${HCAT_HOME}" ]; then
  echo "Warning: $HCAT_HOME does not exist! HCatalog jobs will fail."
  echo 'Please set $HCAT_HOME to the root of your HCatalog installation.'
fi

if [ ! -d "${ACCUMULO_HOME}" ]; then
  echo "Warning: $ACCUMULO_HOME does not exist! Accumulo imports will fail."
  echo 'Please set $ACCUMULO_HOME to the root of your Accumulo installation.'
fi
if [ ! -d "${ZOOKEEPER_HOME}" ]; then
  echo "Warning: $ZOOKEEPER_HOME does not exist! Accumulo imports will fail."
  echo 'Please set $ZOOKEEPER_HOME to the root of your Zookeeper installation.'
fi

(5).查看数据库及数据库表

  • 查看数据库

查看数据库使用的命令是list-databases,如果不知道怎么使用,可以使用如下命令来查看命令帮助

$ sqoop help list-databases

输入命令查看mysql中的所有数据库(如果想要换行在末尾加上’\’)

$ sqoop list-databases --connect jdbc:mysql://localhost:3306 --username root --password P@ssw0rd

使用sqoop查看mysql中的所有数据库时,出现了两个错误,错误信息及解放方法如下

错误1:
Got exception running Sqoop: java.lang.RuntimeException: Could not load db driver class: com.mysql.jdbc.Driver
解决方法:
1).将mysql的驱动包拷贝到$SQOOP_HOME/lib下
2).检查sqoop的环境变量是否配置成功

错误2:
SQLException: Access denied for user ‘root’@’localhost’ (using password: YES)
原因:mysql没有开启远程访问权限
解决方法:mysql中执行如下命令,开启远程访问权限

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'P@ssw0rd' WITH GRANT OPTION;
  • 查看数据库中的所有表
$ sqoop list-tables --connect jdbc:mysql://localhost:3306/hive_metadata --username root --password P@ssw0rd

2.Sqoop 2.x 安装部署

(1).下载

笔者下载的Sqoop2的版本为1.99.5

Sqoop 简介及安装部署_第7张图片

Sqoop 简介及安装部署_第8张图片

安装配置参考官网:http://sqoop.apache.org/docs/1.99.5/Installation.html

(2).解压安装包

$ tar -zxvf sqoop-1.99.5-bin-hadoop200.tar.gz
$ mv sqoop-1.99.5-bin-hadoop200 sqoop2
$ cd sqoop2/bin/

bin 目录下存放了sqoop的执行脚本,默认这些执行脚本是没有可执行权限的(可能和版本有关),输入如下目录,来授予可执行权限

$ chmod a+x *

Sqoop 简介及安装部署_第9张图片

(3).安装依赖

在sqoop的server/conf目录下的catalina.properties文件中配置Hadoop 库的路径,修改common.loader这个参数来包含Hadoop 库的所有目录,输入如下目录进入Hadoop库所在目录

$ cd $HADOOP_HOME/share/hadoop

Sqoop 简介及安装部署_第10张图片

将上图中所有所有目录下的jar包都添加到common.loader参数中,如下

$ cd sqoop2/server/conf
$ vim catalina.properties
common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,${catalina.home}/../lib/*.jar,/usr/local/hadoop/share/hadoop/common/*.jar,/us    r/local/hadoop/share/hadoop/common/lib/*.jar,/usr/local/hadoop/share/hadoop/hdfs/*.jar,/usr/local/hadoop/share/hadoop/hdfs/lib/*.jar,/usr/local/hadoop/share/hadoop/httpfs*.jar,/usr/local/    hadoop/share/hadoop/httpfs/../lib/*.jar,/usr/local/hadoop/share/hadoop/mapreduce/*.jar,/usr/local/hadoop/share/hadoop/mapreduce/lib/*.jar,/usr/local/hadoop/share/hadoop/tools/lib/*.jar,/u    sr/local/hadoop/share/hadoop/yarn/*.jar,/usr/local/hadoop/share/hadoop/yarn/lib/*.jar

最后,需要安装JDBC驱动,笔者使用的是MySQL,所以将MySQL的JDBC驱动放入server/lib/目录下即可。

$ cp mysql-connector-java-5.1.38.jar $SQOOP2_HOME/server/lib/ 

(4).配置服务端

服务端的配置文件存放在server/config目录下,修改sqoop.properties中的
org.apache.sqoop.submission.engine.mapreduce.configuration.directory这个属性设置为当前安装Hadoop的配置文件所在目录,比如

org.apache.sqoop.submission.engine.mapreduce.configuration.directory=/usr/local/hadoop/etc/hadoop

(5).配置sqoop代理访问

因为sqoop访问Hadoop的MapReduce使用的是代理的方式,必须在Hadoop中配置所接受的proxy用户和组,找到Hadoop的core-site.xml配置文件,添加如下内容,重启Hadoop即可。

<property>
<name>hadoop.proxyuser.sqoop2.hostsname>
       <value>*value>
property>
<property>
      <name>hadoop.proxyuser.sqoop2.groupsname>
      <value>*value>
property>

(6).配置环境变量

$ vim ~/.bashrc

添加如下内容

# Sqoop
export SQOOP_HOME=/home/hadoop/sqoop2
export PATH=$PATH:$SQOOP_HOME/bin
$ source ~/.bashrc

(7).验证配置是否成功

$ sqoop2-tool verify

如果看到类似如下的信息,恭喜你Sqoop的安装配置已经成功

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

(8).启动Sqoop服务器

安装和配置后,可以使用以下命令启动Sqoop服务器

$ sqoop2-server start

Sqoop 简介及安装部署_第11张图片

sqoop的日志信息默认存放在/home/hadoop/@LOGDIR@目录下的sqoop.log文件中,该目录可在sqoop.properties配置文件中的
org.apache.sqoop.log4j.appender.file.File这个属性中设置,笔者使用的是默认,输入如下命令查看sqoop的日志信息

$ tail -fn200 /home/hadoop/@LOGDIR@/sqoop.log

可以使用以下命令停止服务器

$ sqoop2-server stop

(9).启动客户端

$ sqoop2-shell

这里写图片描述

如果想要退出客户端,输入命令exit即可。

输入命令help或\h查看sqoop命令使用帮助

Sqoop 简介及安装部署_第12张图片

输入如下命令,来查看sqoop的版本信息

show version

这里写图片描述

如果想要查看更多的版本信息,加上参数-a

show version -a

这里写图片描述

查看所有的服务信息

show server --all

这里写图片描述

(10).连接sqoop客户端

sqoop 客户端启动后,输入如下命令来连接客户端

set server

set有四个参数分别如下

Sqoop 简介及安装部署_第13张图片

笔者在使用set命令连接sqoop的服务端时都是使用默认参数,默认主机为localhost,端口为12000,默认web应用为sqoop,你也可以指定参数,如下

set server --host localhost --port 12000 --webapp sqoop

你可能感兴趣的:(Sqoop)