spark开发mysql伪实时数据接入与写入

一、写在前头。

早先考虑到并且调研的架构师flume或者canel等读取mysql的binlog,但是需要mysql开启row模式存binlog,但是目前mysql库是已经积攒了很多业务数据,举个例子就是批量修改一万条,仅记录一条update语句,如果改成行,对服务器的磁盘空间要求很大。

但是不开启行,就会造成,解析binlog的insert还好,我可以解析后放入kafka中,但是如果涉及到update,可能我只能存入到另一个groupid中了,回头还要在触发器端消费消息时,解析update后的where条件,反查表,反查的过程是漫长而不可控的,所以纯粹的实时是做不到的。所以,flume+kafka+sparkstreaming,就需要舍弃flume了,至少暂时是不可实现的。

好消息是后期这些大表都要改掉,改成按照客户分库,那样,数据库binlog开启row模式,就可以按行读取binlog并且解析了,多好,或者自己写工具实现。

 

好了,话不多说,开始说怎么开发了。

二、思路

首先我们需要spark的jdbcRDD,来读取mysql数据源,当然了,源表需要开启createTime和updateTime索引,只要速度够快,我们可以做小时级任务,10分钟级任务。

数据源查到后,其实jdbcRDD的行是resultSet数据类型,可以作为RDD行处理,当然了,这一步有挺多的坑的,国内外的网站找了很多资料才解决这个问题。

从RDD,我们转换成dataFrame,最后写入mysql数据库即可。(这中间正在考虑是否需要引入kafka+sparkstreaming组件)

总体上的事儿是很简单的,但是业务可不简单,首先数据源是形形色色的很多个库的,每个库可能有20张表,每个表的字段,数据类型都不一样,然后在我这里统一组装。这中间还有很多特别的公司、机构,在业务上需要处理,再者,还需要去目标库中拿到各个系统的映射字段做系统间的打通工作。

每条记录在插入之前还需要校验目标数据该唯一数据是否用户已修改。

最重要的是,要负责起来普通的hadoop、spark的搭建和运维工作。

Spark是一个用于大数据处理的开发平台,支持多种数据源的读入和输出。HBase是一个分布式的非关系型数据库,常用于海量数据的存储和查询。而MySQL是一种关系型数据库,常用于小型数据的管理。在实际的数据处理中,经常需要将HBase中的数据清洗后放入MySQL中进行进一步的处理,那么该如何处理呢? 首先,需要考虑如何读取HBase中的数据Spark提供了对HBase的支持,可以通过Spark SQL或RDD API来读取HBase中的数据。当使用Spark SQL时,需先创建HBase表对应的Schema,再用Spark SQL 读取数据。如果使用RDD API,需要创建HBaseConfiguration 对象,并指定对应的表名、列族等信息。 其次,进行数据清洗。数据清洗是数据处理中不可或缺的一部分,通常包括数据过滤、字段选择、缺失值填充等操作。Spark提供了大量的API,便于对数据进行各种数据转换和处理。在数据清洗过程中,可能出现数据量过大或者计算时间较长的情况,可以考虑使用分布式的计算框架Spark进行加速处理。 最后,将清洗后的数据存入MySQL数据库。Spark的 SQLContext 或 DataFrame API 可以将数据直接写入MySQL中。需要指定连接MySQL数据库的信息,包括服务器地址、端口号、数据库名、用户名和密码等参数。 综上所述,Spark 读取HBase数据清洗后放入MySQL,需要先读取HBase中的数据,进行数据清洗和转换,最后将数据存储到MySQL中。Spark提供了丰富的API和分布式计算技术,便于处理大型数据集。实现这一过程,需要考虑数据的规模、计算时间和存储需求等多个因素,细致分析后,选择合适的技术和算法,方能获得良好的处理效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值