开源 for Huawei,Beam 适配 GaussDB 实践案例分享
沃土云创开源开发者专项计划是华为给开源开发者提供专属激励资源,鼓励开发者积极参与开源 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 社区,您有何疑问,都可在此推文评论区留言,或前往开源开发者专属的问答板块提问,热切希望能与您深入交流,共同探讨。
评论