沃土云创开源开发者专项计划是华为给开源开发者提供专属激励资源,鼓励开发者积极参与开源 for Huawei适配,践行“让优秀开发者支持更优秀开发者”的理念。
之前我们介绍了fake2db的适配过程,本文主要分享一位开源开发者参与Beam适配GaussDB的实践经验。
Beam是一个由ASF社区孵化的开源统一编程模型,适用于复杂的数据处理,提供了一个可移动(兼容性好)的 API 层。这层 API 的核心概念基于 Beam 模型(以前被称为 Dataflow 模型),并在 Beam 这个计算引擎上执行。
随着业务数据量不断增加,业界出现了越来越多的分布式数据处理框架,从最早的hadoop Mapreduce到Apache Spark、Apache Storm、以及Apache Flink。新的分布式处理框架带来了更高性能,更强大功能,更低的延迟等,但是当用户把程序切换到新的分布式处理框架的代价也非常大,需要重写对应的业务逻辑。
解决这个问题需要注意两部分,首先,需要一个编程范式,能够统一规范分布式数据处理,例如采用批处理还是流处理;其次数据处理程序需要可以在各个分布式引擎上正常执行,用户可以根据实际情况切换计算引擎和执行环境。Apache Beam 正好可以解决以上问题。
了解和分析开源项目
以Beam为例,官网文档详尽地说明了怎么使用。开发者需实现对应的接口,尤其是其中连接数据库的方法,这通常要求使用不同的连接方式,主要是实现Apply方法。完成前期准备工作,有利于开发者在动手之前就能对项目的适配目标和功能有较清晰的认识,从而避免开发者在后续开发中因直接面对大量代码无从下手,节省了大量寻找适配路径的宝贵时间。
此外,在正式开发之前,建议在本地环境或华为云环境中先运行项目。这样不仅能通过实际操作来直观感受项目的功能,而且提前部署好环境还能为后续的测试和验证工作带来便利。
如何开发开源项目
经过对Beam的了解,对适配该项目开发工作有了初步认识。在开始开发Beam项目时候,第一步将华为云 OpenSourceForHuaweiDemoJava 仓库代码fork至个人仓库(地址:https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiDemoJava/overview),然后克隆到本地开发环境中。
鉴于Beam项目主要采用Java语言开发,接下来我们将华为云提供的Java SDK添加为项目依赖,并借助该SDK来实现Beam组件中的Apply关键方法。在适配GaussDB时主要是重写Apply方法实现数据库的连接。
在开发Beam过程中,我们参考了华为云官方接口文档(https://support.huaweicloud.com/intl/zh-cn/sdkreference-iothub/iot_10_10002.html),以全面掌握其SDK的各项功能。成功实现接口后,我们进行了单元测试,确保软件功能正常运行。
案例验证流程
若Beam计算引擎可以从GaussDB中读取和写入数据,则可说明Beam这个计算引擎能在GaussDB中正常使用,demo案例验证过程如下:
首先需要在GaussDB数据库中创建一张表beam_t,其中表的主键字段是id,在表中输入几笔测试数据;
然后使用Beam这个计算引擎框架编写代码,在华为云CCE中部署运行项目,这样可以亲身体验项目的功能,从而获得更直观的感受。
代码实现如下逻辑:
-
先重写Beam计算框架中的Apply方法,目的是创建与GaussDB数据库连接
-
从GaussDB数据库中读取 beam_t 表中字段id的最大值,并记录为max1
-
将max1加上1得到max2值
-
将max2值回写到GaussDB数据库对应的 beam_t表中
-
再次查询 GaussDB数据库中表 beam_t 字段id最大值,并关闭数据库连接
-
对比max1和max2发现前后最大值有变化,可以验证Beam计算引擎是可以连接GaussDB并读取数据以及向GaussDB写入数据的
测试流程如下:
-
先在客户端查表中最大值是9:
-
执行运行程序(接口返回运行程序前是9,运行程序后是10,符合预期),CCE部署:
-
接口测试:
-
用客户端再查对应表的最大id值是10:
至此,通过以上测试证明Beam可以从GaussDB读取数据以及写入数据。
本案例使用的数据库驱动是GaussDB官网推荐的驱动gsjdbc4.jar(主类名为“ org.postgresql.Driver ”,数据库连接的url前缀为“ jdbc:postgresql ”)。基于GaussDB是从PostgreSQL演变而来,Beam能够支持postgresql数据库,理论 GaussDB也能够支持 gsjdbc4.jar,果不其然,通过使用 gsjdbc4.jar替换postgresql的驱动jar,也同样可以连接操作GaussDB 。
如何提交开源贡献
当你完成了开源项目Beam的适配工作,并且新增的代码已经经过严格测试确认无误后,你可以通过提交一个Pull Request(PR)来请求官方社区将你的功能代码合并到项目中。在此之前,请务必仔细阅读项目的贡献指南和代码编写规范,以确保你的代码能够顺利地被项目接纳并合并。
诚邀各位技术达人加入到使用GaussDB序列的Beam社区,您有何疑问,都可在此推文评论区留言,或前往开源开发者专属的问答板块提问,热切希望能与您深入交流,共同探讨。