Sqoop数据收集与入库系统的应用

2017-12-22 07:35作者杨彬辽宁行政学院
电子制作 2017年21期
关键词:关系数据库命令架构

作者/杨彬,辽宁行政学院

Sqoop数据收集与入库系统的应用

作者/杨彬,辽宁行政学院

大多数情况下单位或组织有价值的数据都要存储在关系型数据库系统中,随着时间的累计,数据量已非常庞大,为了进一步进行处理,有些数据需要抽取出来,利用大数技术进行处理再次加工。为了能够和Hadoop HDFS系统之外的数据库系统机型交互,Sqoop孕育而生。Sqoop 是一款开源的工具,是Apache顶级项目,通过JDBC和关系数据库进行交互,用户可将数据从关系型数据库抽取到Hadoop HDFS中;也可以把hadoop MapReduce处理完的数据导回到关系数据库中。

数据导入;数据导出;JDBC;关系数据库

1. Sqoop架构

Sqoop架构非常简单,整合了Hive、Hbase和Oozie,通过hadoop 的MapReduce任务来传输数据并提供并发和容错功能。Sqoop接收到客户端的shell命令或者Java api命令后,通过Sqoop中的任务翻译器把命令转换为对应的MapReduce任务,将关系型数据库中的数据和Hadoop HDFS中的数据进行相互转移,进而完成数据导入和数据导入导出。Sqoop架构如图1所示。

图1 Sqoop架构

2. Sqoop数据库导入与使用

■2.1 Sqoop数据库导入

Sqoop是通过一个MapReduce作业从关系数据库中导入一个表,抽取一行行记录,然后写入到HDFS。首先Sqoop使用JDBC来检查将要导入的表并检索出表中所有的列及其对应的SQL数据类型。这些SQL类型被映射到Java数据类型中,这些对应的java类型在MapReduce应用中将被作为字段值被保存,这些信息被Sqoop的代码生成器使用来创建对应表的类,用于保存从表中抽取的记录。在导入中,关键的是DBWritable接口的序列化方法,Widget类和JDBC进行交互使用这些方法。

JDBC的ResultSet接口提供用户从检查结果中检索记录的游标,readFields()方法将用ResultSet中一行数据的列来填充Example对象的字段。其格式如下:

Public void readFields(resultSet _dbResults)throws SQLException;

InputFormat()方法通过JDBC从一个数据库表中读取部分内容,它通过 Sqoop启动MapReduce作业来完成。

DataDriverDBInputFormat()方法能够完成多个Map任务对查询结果的划分,为了提高导入性能,查询根据表的主键我的做为“划分列”来进行划分的。在配置InputFormat之后,Sqoop将作业发送到MapReduce集群。Map任务将执行查询并将ResultSet中的数据反序列化到生成类的实例,这些数据保存在SequenceFile文件中也可以被分割为多个文本文件。导入指令为:Sqoop import –connect jdbc:mysql://hostname:port/database –username root –password 123456 –tablename –m n。

其构成含义如下:

(1)––co n n e c t j d b c:m y s q l://hostname:port/database指定mysql数据库主机名和端口号和数据库名;

(2)––username root 指定数据库用户名;

(3)––password 123456 指定数据库密码;

(4)––tablename 导出的表名;

(5)–m n 启动一个map进程数,如果表很大,可以启动多个map进程。

默认情况下,Sqoop会将导入的数据保存为逗号分隔的文本文件。

Sqoop从关系数据库中导入到HDFS的过程,如图2所示。

具体操作实例如下:关系数据库(10.8.218.89)表为base,执行Sqoop命令将数据从mysql导入到hive中,具体命令为:

Sqoop import ––connect jdbc:mysql://10.8.218.89:3208/dbvideo ––table base ––user root––password 123456 –m 1 ––hive–import ––hive–database dbvideo ––hive–table base ––hive–overwrite ––fields–ter–minated–by “ ”––lines–terminated–by “ ”––as–textf i le

通过help指令查看sqoop导入帮助: Sqoop help import。

图2 Sqoop从数据库中导入到HDFS的过程

■2.2 Sqoop导入数据的使用

数据被导入HDFS,以文本格式数据可以供Hadoop Streaming中的脚本使用,也可以为TextInputFormat为默认格式运行的MapReduce作业使用。同时Sqoop和Hive可共同构成一个强大的服务用于分析任务,在进行导入时,Sqoop可以生成hive表,将数据导入hive表,其命令如下:

Sqoop import –connect jdbc:mysql://localhost/ha–doopguide –table widgets –m 1 –hive–import

3. Sqoop数据库导出

■3.1 Sqoop数据库导出

Sqoop导出功能其导入功能非常相似,在执行导出操作之前,Sqoop一般使用jdbc连接数据库并选择一个导出方法,Sqoop会根据目标表的定义生成一个java类,通过这个生成类从文本文件中解析记录,接着会启动一个MapReduce作业,从HDFS中读取源数据文件,使用生成的类解析记录,执行选定的导出方法。jdbc的导出方法会产生一批insert语句,每条语句都会向目标表中插入多条记录。

Sqoop还可以将存储在SequenceFile中的记录导出到输出表。Sqoop从SequenceFile中读取对象,发送到OutputCollector,由它将这些对象传递给数据库导出OutputFormat(),由OutputFormat()完成输出到表的过程。Sqoop从HDFS导出到关系数据库的过程,如图3所示

图3 Sqoop从HDFS导出到关系数据库的过程

■3.2 Sqoop导出数据的执行

在Sqoop中,导出的数据源是HDFS,关系数据库作为目标。在将一张表从HDFS导出到关系数据库时,须在关系数据库中创建一张用于接收数据的目标表。执行过程如下:

①先在mysql中创建一个具有相同序列顺序的sql目标表

Create table sales(volume decimal(10,2),zip inte ger);

②接着运行导出命令:

Sqoop export –connect jdbc:mysql://localhost/ha doopguide –m 1 –table sales –export–dir /user/hive/zip_prof i ts –input–f i elds–terminated–by “001”

③过mysql来确认导出成功:

mysql hadoopguide –e ‘select * from salesp’

* [1]于金良,朱志祥,梁小江.一种基于Sqoop的数据交换系统[J].物联网技术,2016(03).

* [2]公怀予,徐劲松,王攀.一种关联感知的大数据导入方法[J]电信科学,2016(03).

* [3]曾志浩,姚贝,张琼林,孙琪.基于.Hadoop平台的用户行为挖掘[J].计算技术与自动化, 2015(02).

* [4]张惠民,胡海荣,向阳霞.云平台下的装备保障管理系统结构化数据查询[J].计算机系统应用.2015(02).

* [5]陆嘉恒编著.大数据挑战NoSQL数据库技术[J].电子工业出版社.2013.04.

猜你喜欢
关系数据库命令架构
基于FPGA的RNN硬件加速架构
只听主人的命令
功能架构在电子电气架构开发中的应用和实践
安装和启动Docker
构建富有活力和效率的社会治理架构
移防命令下达后
基于单表结构的Web动态树设计与实现
探讨关系数据库设计中范式理论的教学方法
解析Windows10的内部命令
VoLTE时代智能网架构演进研究