Quantcast
Channel: CodeSection,代码区,数据库(综合) - CodeSec
Viewing all articles
Browse latest Browse all 6262

重拾初心――Sqoop1和Sqoop2的刨析对比

$
0
0

重拾初心――Sqoop1和Sqoop2的刨析对比
打开微信扫一扫,关注微信公众号【码农故事多】

转载请注明出处: http://www.voidcn.com/blog/gamer_gyt/

博主微博: http://weibo.com/234654758

Github: https://github.com/thinkgamer 写在前面的话

或许我们经常会遇到这样一个场景,就是当我们的某种日志数据积累到一定程度的时候,我们需要大数据平台来进行存储,包括hdfs,hive等,这个时候Sqoop就发挥他的巨大价值了。

Sqoop简介 1. Sqoop简单介绍

Sqoop是一款开源的工具,主要用于在Hadoop和传统的数据库(mysql、postgresql等)进行数据的传递,可以将一个关系型数据库(例如:MySQL、Oracle、Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

Sqoop中一大亮点就是可以通过hadoop的mapreduce把数据从关系型数据库中导入数据到HDFS。

Sqoop目前版本已经到了1.99.7,我们可以在其官网上看到所有的版本,Sqoop1.99.7是属于sqoop2,Sqoop1的最高版本为1.4.6,版本号划分区别,Apache:1.4.x,1.99.x~

2. Sqoop一代和二代对比 版本号对比

两代之间是两个完全不同的版本,不兼容

sqoop1:1.4.x

sqoop2:1.99.

sqoop2比sqoop1的改进

(1) 引入sqoop server,集中化管理connector等

(2) 多种访问方式:CLI,Web UI,REST API

(3) 引入基于角色 的安全机制

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 相同的解决方法操作 sqoop1和sqoop2的架构对比

(1) : sqoop1的架构图


重拾初心――Sqoop1和Sqoop2的刨析对比

版本号为1.4.x为sqoop1

在架构上:sqoop1使用sqoop客户端直接提交的方式

访问方式:CLI控制台方式进行访问

安全性:命令或脚本中指定用户数据库名及密码

(2) : sqoop2的架构图


重拾初心――Sqoop1和Sqoop2的刨析对比

版本号为1.99x为sqoop2

在架构上:sqoop2引入了sqoop server,对connector实现了集中的管理

访问方式:REST API、 JAVA API、 WEB UI以及CLI控制台方式进行访问

CLI方式访问,会通过交互过程界面,输入的密码信息丌被看到,同时Sqoop2引入基亍角色的安全机制,Sqoop2比Sqoop多了一个Server端。

(3) : 优缺点

sqoop1与sqoop2的优缺点如下:

sqoop1的架构,仅仅使用一个sqoop客户端,sqoop2的架构,引入了sqoop server集中化管理connector,以及rest api,web,UI,并引入权限安全机制。

sqoop1与sqoop2优缺点比较 :

sqoop1优点架构部署简单

sqoop1的缺点命令行方式容易出错,格式紧耦合,无法支持所有数据类型,安全机制不够完善,例如密码暴漏,

安装需要root权限,connector必须符合JDBC模型

sqoop2的优点多种交互方式,命令行,web UI,rest API,conncetor集中化管理,所有的链接安装在sqoop server上,完善权限管理机制,connector规范化,仅仅负责数据的读写。

sqoop2的缺点,架构稍复杂,配置部署更繁琐。

Sqoop的部署 1. Sqoop1的部署

sqoop1的部署相对比较简单,以1.4.6为例

(1) 下载: 点击链接到下载页

(2) 解压到指定目录

sudo tar -zxvf /home/thinkgamer/下载/sqoop-1.4.6.tar.gz -C sudo mv sqoop-1.4.6/ sqoop

(3) 配置环境变量

sudo vim ~/.bashrc

添加以下两行

export SQOOP_HOME=/opt/sqoop export PATH=$PATH:$SQOOP_HOME/bin

保存即可

source ~/.bashrc

(4) 复制Mysql-jdbc 包到sqoop/lib目录下

sudo cp /home/thinkgamer/下载/MySQL-connector-Java-5.1.39-bin.jar /opt/bigdata/sqoop/lib/

(5) 修改bin/configure-sqoop文件

此时如果没有启用hbase,zookeeper等组件,将相应的信息注释,如果启用了,就pass,直接进入下一步

(6) 执行sqoop help查看帮助

2. Sqoop2的部署

以下部分大部分来自官方安装教程: https://sqoop.apache.org/docs/1.99.7/admin/Installation.html sqoop的部署相对比较麻烦,因为sqoop2即包含了client端,又包含了server端,官方给出的提示是:

服务器您需要在集群中的单个节点上安装服务器。此节点将用作所有Sqoop客户端的入口点。 客户端客户端可以安装在任意数量的计算机上。

下载文件解压到指定目录:

sudo tar -zxvf /home/thinkgamer/下载/package/hadoop-family/sqoop-1.99.7.tar.gz /opt/bigdata (1) 目录说明

bin:可执行脚本,一般使用sqoop都是通过这个目录中的工具调用,是一些shell或batch脚本。

conf:存放配置文件

docs:目前不清楚具体是什么,可能是帮助文档,不过一般使用sqoop不会用到。

server:里面只有一个lib目录,存了很多jar文件,是sqoop2 的server包。

shell:同理,sqoop2的shell包。

tools:同理,sqoop2的工具包。

(2) 服务器端安装 2.1 环境变量设置

sqoop的安装依赖于hadoop的环境变量, $ HADOOP_COMMON_HOME, $ HADOOP_HDFS_HOME, $ HADOOP_MAPRED_HOME 和 $ HADOOP_YARN_HOME,请你确定这些环境变量被定义和指向了hadoop的安装目录,如果这些没有被正确配置,sqoop server端将不会被正常启动。

如果换将变量里已经配置了 $ HADOOP_HOME,那么sqoop将会在以下这几个路径中找寻 $ HADOOP_COMMON_HOME, $ HADOOP_HDFS_HOME, $ HADOOP_MAPRED_HOME 和 $ HADOOP_YARN_HOME

$ HADOOP_HOME/share/hadoop/common

$ HADOOP_HOME/share/hadoop/hdfs

$ HADOOP_HOME/share/hadoop/mapreduce

$ HADOOP_HOME/share/hadoop/yarn

若$HADOOP_HOME已经配置了,最好不要再配置下面的变量,可能会有些莫名错误。

2.2 hadoop配置

Sqoop服务器将需要模拟用户访问集群内外的HDFS和其他资源,作为开始给定作业的用户,而不是运行服务器的用户。 您需要配置Hadoop以通过所谓的proxyuser系统显式地允许此模拟。 您需要在core-site.xml文件 - hadoop.proxyuser。 $ SERVER_USER.hosts和hadoop.proxyuser。 $ SERVER_USER.groups中创建两个属性,其中$ SERVER_USER是将运行Sqoop 2服务器的用户。 在大多数情况下,配置*是足够的。

当服务器在sqoop2 user下运行时,需要在core-site.xml文件中配置如下:

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

我是用thinkgamer用户运行hadoop,所以这里将sqoop2换成thinkgamer

2.3 配置第三方jar包引用路径一般我们使用的数据库驱动包都没有随着Sqoop一起释出,多半是因版权问题,所以将这些包放置在这个第三方组件下。再在配置一个SQOOP_SERVER_EXTRA_LIB系统变量即可,本例指定路径为 $ SQOOP_HOME/extra

sudo vim ~/.bashrc

加入

export SQOOP_HOME=/opt/bigdata/sqoop export SQOOP_SERVER_EXTRA_LIB=$SQOOP_HOME/extra export PATH=$PATH:$SQOOP_HOME/bin

最后把mysql的驱动jar文件复制到这个目录下。

2.4 服务器配置主要是配置conf目录下的sqoop.properties和sqoop_bootstrap.properties两个文件

sqoop_bootstrap.properties文件配置config支持类,这里一般使用默认值即可:

sqoop.config.provider=org.apache.sqoop.core.PropertiesConfigurationProvider

sqoop.properties文件配置比较多,这里按需要配置,我写下我配置的项,其他都使用默认值:

org.apache.sqoop.submission.engine.mapreduce.configuration.directory=/opt/bigdata/hadoop/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

注意:官方文档上只说了配置上面第一项,mapreduce的配置文件路径,但后来运行出现authentication异常,找到sqoop文档描述security部分,发现sqoop2支持hadoop的simple和kerberos两种验证机制。所以配置了一个simple验证,这个异常才消除。

2.5 初始化元数据存储库需要在第一次启动Sqoop 2服务器之前进行初始化。 使用升级工具初始化存储库:

sqoop sqoop2-tool upgrade Setting conf dir: /opt/bigdata/sqoop/bin/../conf Sqoop home directory: /opt/bigdata/sqoop Sqoop tool executor: Version: 1.99.7 Revision: 435d5e61b922a32d7bce567fe5fb1a9c0d9b1bbb Compiled on Tue Jul 19 16:08:27 PDT 2016 by abefine Running too

Viewing all articles
Browse latest Browse all 6262

Trending Articles