大数据之Sqoop1.99.7部署实战

背景 

有时候需要将大数据hive与传统关系型数据传递,这个时候就需要一个同步组件了,sqoop就是这么一个导数据的小工具

 Sqoop简介

  • Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
  • Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop独立成为一个Apache项目。

PS:Sqoop2的最新版本是1.99.7,算是2.x系列了,与1不兼容 ,在CDH安装中,是可以选装Sqoop组件的
Sqoop1.99.7官方安装文档icon-default.png?t=M4ADhttps://sqoop.apache.org/docs/1.99.7/admin/Installation.html

部署与配置 

## 这个地址可以找到需要的版本,本文采用的是1.99.7的版本
http://archive.apache.org/dist/sqoop

大数据之Sqoop1.99.7部署实战_第1张图片 

 

PS:  sqoop-1.99.7-bin-hadoop200.tar.gz是可以直接离线安装部署的版本,其他需要进行编译,比较麻烦
## 在线或者是离线获取离线包
wget http://archive.apache.org/dist/sqoop/1.99.7/sqoop-1.99.7-bin-hadoop200.tar.gz
## 解压文件
tar -zxvf sqoop-1.99.7-bin-hadoop200.tar.gz

1)Hadop相关的依赖

在sqoop官方部署文档中,有提到,如果是已经设置了HADOOP_HOME,会自动使用对应的lib文件(修改的文件在/etc/profile[不同系统有不通的配置方式])

export HADOOP_HOME=
export HADOOP_COMMON_HOME=
export HADOOP_HDFS_HOME=
export HADOOP_MAPRED_HOME=
export HADOOP_YARN_HOME=
如果已经配置$HADOOP_HOME变量,sqoop将会使用以下路径下的配置文件:
$HADOOP_HOME/share/hadoop/common, $HADOOP_HOME/share/hadoop/hdfs, $HADOOP_HOME/share/hadoop/mapreduce and $HADOOP_HOME/share/hadoop/yarn

 大数据之Sqoop1.99.7部署实战_第2张图片

 2)Hadoop相关的配置

需要修改HDOOP_HOME/etc/hadoop路径下的core-site.xmlcontainer-executor.cfg文件

## core-site.xml追加

  hadoop.proxyuser.sqoop2.hosts
  *


  hadoop.proxyuser.sqoop2.groups
  *
## container-executor.cfg 追加内容
allowed.system.users=sqoop2

大数据之Sqoop1.99.7部署实战_第3张图片

 3) 三方依赖包配置

在/etc/profile文件中追加配置SQOOP_SERVER_EXTRA_LIB,在SQOOP_HOME路径下创建extLib,并配置到/etc/profile中

# 三方依赖库
export SQOOP_SERVER_EXTRA_LIB = $SQOOP_HOME/extLib

 4)配置server中的配置文件

主要是sqoop_bootstrap.properties  sqoop.properties两个文件

## 修改sqoop.properties文件中的 hadoop配置文件的路径
org.apache.sqoop.submission.engine.mapreduce.configuration.directory=/opt/hadoop/hadoop-3.1.3/etc/hadoop
## @LOGDIR@ @BASEDIR@两个位置的变量最好也修改成真实的路径

5) 执行启动命令 

正常启动会有正常提示,如果是有异常的话需要根据日志进行排错

## 初始化仓库
sqoop2-tool upgrade
## 校验
sqoop2-tool verify
## 启动服务
sqoop2-server start
## 停止服务
sqoop2-server stop

错误解决 

[root@hadoop-master bin]# ./sqoop2-tool upgrade
Setting conf dir: /usr/local/share/demo/sqoop/sqoop-1.99.7-bin-hadoop200/bin/../conf
Sqoop home directory: /usr/local/share/demo/sqoop/sqoop-1.99.7-bin-hadoop200
Sqoop tool executor:
        Version: 1.99.7
        Revision: 435d5e61b922a32d7bce567fe5fb1a9c0d9b1bbb
        Compiled on Tue Jul 19 16:08:27 PDT 2016 by abefine
Running tool: class org.apache.sqoop.tools.tool.UpgradeTool
0    [main] INFO  org.apache.sqoop.core.PropertiesConfigurationProvider  - Starting config file poller thread
Tool class org.apache.sqoop.tools.tool.UpgradeTool has finished correctly.
[root@hadoop-slave01 bin]# ./sqoop2-tool verify
Setting conf dir: /usr/local/share/demo/sqoop/sqoop-1.99.7-bin-hadoop200/bin/../conf
Sqoop home directory: /usr/local/share/demo/sqoop/sqoop-1.99.7-bin-hadoop200
Sqoop tool executor:
        Version: 1.99.7
        Revision: 435d5e61b922a32d7bce567fe5fb1a9c0d9b1bbb
        Compiled on Tue Jul 19 16:08:27 PDT 2016 by abefine
Running tool: class org.apache.sqoop.tools.tool.VerifyTool
0    [main] INFO  org.apache.sqoop.core.SqoopServer  - Initializing Sqoop server.
6    [main] INFO  org.apache.sqoop.core.PropertiesConfigurationProvider  - Starting config file poller thread
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
        at org.apache.hadoop.conf.Configuration.set(Configuration.java:1357)
        at org.apache.hadoop.conf.Configuration.set(Configuration.java:1338)
        at org.apache.sqoop.security.authentication.SimpleAuthenticationHandler.secureLogin(SimpleAuthenticationHandler.java:37)
        at org.apache.sqoop.security.AuthenticationManager.initialize(AuthenticationManager.java:98)
        at org.apache.sqoop.core.SqoopServer.initialize(SqoopServer.java:57)
        at org.apache.sqoop.tools.tool.VerifyTool.runTool(VerifyTool.java:36)
        at org.apache.sqoop.tools.ToolRunner.main(ToolRunner.java:72)

错误分析

从具体报错来看是缺少了要使用的方法, 那么这个就和依赖包的版本可能有极大的关系,从包路径来来是google的包,进而猜测是guava低版本依赖造成的

## 用命令找到需要调整的包 
## grep -P 正则 (包含guava并以jar结尾或者是./开头包含server、shell、tools.的目录)
[[email protected]]# 
ls -lR | grep -P '^(-.*guava.*jar)$|(\.\/[server|shell|tools].*)'

./server:
./server/lib:
-rw-r--r-- 1 root root  1648200 7月  20 2016 guava-11.0.2.jar
./shell:
./shell/lib:
-rw-r--r-- 1 root root 1648200 7月  20 2016 guava-11.0.2.jar
./tools:
./tools/lib:
-rw-r--r-- 1 root root 1648200 7月  20 2016 guava-11.0.2.jar

将对应的路径下的guava包替换成高本版的包,重新启动问题得以解决 

## 已经替换成了新的包 
[root@hadoop-slave01 sqoop-1.99.7-bin-hadoop200]# 
ls -lR | grep -P '^(-.*guava.*jar)$|(\.\/[server|shell|tools].*)'

./server:
./server/lib:
-rw-r--r-- 1 root root  2747878 6月  16 10:34 guava-27.0-jre.jar
./shell:
./shell/lib:
-rw-r--r-- 1 root root 2747878 6月  16 10:34 guava-27.0-jre.jar
./tools:
./tools/lib:
-rw-r--r-- 1 root root 2747878 6月  16 10:19 guava-27.0-jre.jar

你可能感兴趣的:(技术实战,hadoop,大数据,sqoop,big,data,java)