自己动手做大数据系统(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.4 Sqoop

Sqoop是一个用Java编程语言开发的数据同步工具,主要用来同步关系型数据库(如MySQL、Oracle、SQL Server等)的数据到大数据平台,当然其也支持把大数据平台计算的结果数据同步到关系型数据库。所以,我们也可以将Sqoop理解为SQL+Hadoop。在企业大数据平台中选用Sqoop来做数据同步工具,主要有以下3个原因。

第一,Sqoop可以保证数据类型的兼容性,从而保证可以把数据不失真地采集到大数据平台。Sqoop在抽取各种数据库的数据时,会先获取该数据库所对应的数据类型。Sqoop会使用目标数据库所自带的数据库驱动程序来读取数据类型,从而保证数据类型的可靠性。比如,Sqoop要从MySQL数据库读取数据时,用户要从MySQL官网下载对应的连接驱动,并将该驱动文件放至Sqoop的lib类库文件夹下,以供后续连接使用。

第二,Sqoop区别于其他传统的ETL(Extract-Transform-Load)工具的一个主要优势是,在Sqoop的源码中通过使用MapReduce分布式并行算法的调用,可以进行多任务的数据同步。这在同步效率上会比传统的单任务执行得好。

第三,Sqoop支持多种文件格式。除了常见的文本格式外,其还可以支持Hadoop环境中便于动态脚本使用的Avro类型和可压缩、可切分的SequenceFile数据类型,这样就可以满足在HDFS中根据特定的业务场景来选用对应的文件存储格式。

Sqoop在生产应用中主要有两个版本,即以1.4.*开头的Sqoop 1和以1.99.*开头的Sqoop 2。从选型角度来看,如果大数据平台有统一的安全平台和调度系统,采用Sqoop 1部署比较简单。这时对应的Sqoop任务直接接入调度系统,这样就减少了与生产系统相关的依赖和运维排查(对于Hadoop 2.2以后的版本,Sqoop 1需要根据具体的版本进行编译)。Sqoop 2相对于Sqoop 1增加了安全机制和任务调度管理。如果大数据平台没有统一的安全平台和调度系统,就可以基于该Sqoop 2形成统一的Sqoop数据同步、任务调度接口来进行运维。Sqoop 1和Sqoop 2的架构及部署对比说明如图2-4、图2-5和表2-2所示。

图2-4 Sqoop 1架构图

图2-5 Sqoop 2架构图

表2-2 Sqoop 1和Sqoop 2的架构及部署对比说明

img

2.4.1 Sqoop安装文件的准备

具体准备如下:

• Sqoop 1.4.*版本的安装文件为sqoop-1.4.5.bin-hadoop-2.0.4-alpha.tar.gz。

• Sqoop 2的安装文件为sqoop-1.99.6-bin-hadoop200.tar.gz。

• MySQL的连接驱动也可以在Oracle官网找到。

2.4.2 Sqoop的安装及配置

1.Sqoop 1的安装及配置

Sqoop 1的安装与配置比较简单,直接解压缩并重命名解压缩后的文件夹,具体配置可参考Sqoop 2。只需设置基本环境变量和对应的连接jar包即可。

2.Sqoop 2的安装及配置

在要安装Sqoop的服务器上解压缩安装包并重命名,然后修改相关参数:

2.4.3 Sqoop运行验证

启动Sqoop的服务器和客户端(Client):