当前位置:首页 期刊杂志

用Sqoop 实现异构环境的数据交换

时间:2024-05-04

陈玉林 湖南现代物流职业技术学院 陈晓玲 张铮 湖南文理学院芙蓉学院

引言

实际应用中,常常会碰到一些信息管理系统的数据(如日志数据、交通数据等)积累到一定程度的时候,一般的关系数据库容量及性能就会出现瓶颈,从而需要大数据平台(例如HDFS、Hive、Hbase 等)来进行存储,这个时候需要一种工具来与关系数据库服务器进行交互,以导入和导出驻留在其中的大数据,此时Sqoop 就能发挥出它应有的价值了。

1 Sqoop 简介

Sqoop 是一个用来将关系型数据库和Hadoop 中的数据进行相互转移的工具,可以将一个关系型数据库(例如Mysql、Oracle)中的数据导入到Hadoop(例如HDFS、Hive、Hbase)中,也可以将Hadoop 中的数据导入到关系型数据库中。因为Sqoop 充分利用了Hadoop MapReduce 的并行化优点,整个数据交换过程基于MapReduce 实现并行化的快速处理,所以应用在十万、百万这种小数据量系统上性能会受到限制,但数据量级若超过一亿以上则sqoop优势明显。简单原理就是Sqoop 工具接收到客户端的shell 命令或者Java api 命令后,通过Sqoop 中的任务翻译器(Task Translator)将命令转换为对应的MapReduce 任务,而后将关系型数据库和Hadoop 中的数据进行相互转移,进而完成数据的拷贝。

2 从关系数据库导入数据到HDFS

Sqoop 把关系型数据库(以mysql 为例)的数据导入到HDFS中,主要分为两步:一是得到元数据(mysql 数据库中的数据) ,二是提交map。这样流程就很清晰了,首先连接到mysql 数据库得到表中的数据,然后进行map 任务即可。具体实现为:bin/sqoop import --connect jdbc:mysql://192.168.1.100:3306/test --username root --password root --table STUDENT

根据map 任务执行来看,这里如果不指定输出到hdfs 的目录的话,会自动在hdfs 用户主目录下生成一个与表的名称一致的目录来存放数据,这里默认是会有四个map 任务,数据量小,所以这里比较耗时。一般需要自己指定存放在hdfs 的位置目录和map 的个数,执行如下命令如图1 所示:

图1 MYSQL 导入数据到HDFS

--target-dir”指定导入到hdfs 中的位置,“--num-mappers 1”指定map 任务的个数为1 个。

3 从关系数据库导入数据到HBASE、HIVE

Hbase 和Hive 在大数据架构中处于不同位置,Hbase 主要解决实时数据查询问题,Hive 主要解决数据处理和计算问题,一般是配合使用。

在实际的业务当中,首先对原始数据集通过MapReduce 进行数据清洗,然后将清洗后的数据存入到Hbase 数据库中,接着通过数据仓库Hive 对Hbase 中的数据进行统计与分析,分析之后将分析结果存入到Hive 表中,然后通过Sqoop 这个工具将数据挖掘结果导入到MySql 数据库中,最后通过Web 将结果展示给客户。

(1)把MYSQL 的STUDENT 表导入到HBASE。执行命令如图2 所示:

图2 MYSQL 导入数据到HBAS

hbase-create-table 用于自动创建缺少的HBase 表,如果hbase 中 已经有同名表,则会产生冲突。

(2)把MYSQL 的 STUDENT 表导入到 HIVE。执行命令如图3 所示:

图3 MYSQL 导入数据到HIVE

hive-import 说明sqoop 此处导入是导入到hive 而不是其他 ,create-hive-table 自动创建表(如果存在会报错),hive-table 指定自动创建表的名称.这里是一次性导入,如果需要增量导入数据使用参数incremental lastmodified 或incremental append。

4 小结

sqoop 的使用对业务信息系统数据迁移带来许多的便利,应用过程中遇到问题时,应检查 sqoop 需要提前安装好的环境变量配置,或者依赖,它包括Linux 操作系统和JDK 开发环境,以及hadoop、hive、hbase、zookeeper 四个应用模块。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!