kafka消息系统-海量数据迁移方案

一、需求描述

由于本人主要从事大数据可视化的工作,就少不了对海量数据的分析,但是我们并不是数据的生产来源,数据来自有大数据可视化分析需求的用户,所以实际业务中往往会遇到大量数据从传统存储方式(关系型数据库、文件存储等)到数据仓库的迁移,本次就以实现如何基于kafka从oracle到hive仓库做数据的迁移工作。
本次操作的数据量为空间坐标数据,原始数据存储在oracle中,大概10亿条左右,通过本身oracle的sql查询操作已经是非常慢,很难用传统的查询统计方式对数据做大数据的聚合、统计、计算等分析操作,所以得到数据之后第一步就是将其迁移到hadoop 文件系统中,通过hive进行存储管理。
二、实现思路
1.hive
Hive是一个基于Hadoop的开源数据仓库工具,用于存储和处理海量结构化数据。它是Facebook 2008年8月开源的一个数据仓库框架,提供了类似于SQL语法的HQL语句作为数据访问接口,Hive有如下特点:
1.Hive 使用类SQL 查询语法, 最大限度的实现了和SQL标准的兼容,大大降低了传统数据分析人员学习的曲线;
2.使用JDBC 接口/ODBC接口,开发人员更易开发应用;
3.以MR 作为计算引擎、HDFS 作为存储系统,为超大数据集设计的计算/ 扩展能力;
4.统一的元数据管理(Derby、MySql等),并可与Pig 、Presto 等共享;
Hive的结构如下图所示:
这里写图片描述
2.主要实现思路
主要实现了两个程序,一个生产者程序,一个消费者程序,主要流程如下:
1.生产者程序通过sql查询获取前n条数据(实际操作是1000万条)
2.生产者程序创建临时表将这前n条数据存储起来
3.生产者程序对这n条数据进行清洗,转换,计算等操作(根据实际情况,处理成最终的数据结构和要求)
4.生产者程序将数据发送到kafka集群
5.消费者程序接收kafka 发送指定topic的数据,分批存储成hdfs文件
6.生产者程序删除前n条数据,然后重新按照第一条依次执行,直到数据处理完毕

三、总结

虽然上述执行操作可能不是一个很好的解决方案,但是实现了海量数据迁移的目的,能够支持多种关系数据库和多种文件格式的数据迁移,两个程序(生产者和消费者程序)之间通过中间格式(json,Protobuf等)进行数据的对接,耦合度非常低,针对不同业务,虽然需要调整解析代码,但是相对来说已经是比较便利的方式。

猜你喜欢

转载自blog.csdn.net/xinlingjun2007/article/details/80316271