沃土云创开源开发者专项计划是华为给开源开发者提供专属激励资源,鼓励开发者积极参与开源 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中部署运行项目,这样可以亲身体验项目的功能,从而获得更直观的感受。

代码实现如下逻辑:

  1. 先重写Beam计算框架中的Apply方法,目的是创建与GaussDB数据库连接

  2. 从GaussDB数据库中读取 beam_t 表中字段id的最大值,并记录为max1

  3. 将max1加上1得到max2值

  4. 将max2值回写到GaussDB数据库对应的 beam_t表中

  5. 再次查询 GaussDB数据库中表 beam_t 字段id最大值,并关闭数据库连接

  6. 对比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社区,您有何疑问,都可在此推文评论区留言,或前往开源开发者专属的问答板块提问,热切希望能与您深入交流,共同探讨。

点击关注,第一时间了解华为云新鲜技术~

开源for Huawei,Beam适配GaussDB实践案例分享的更多相关文章

  1. 实践案例:平安健康的 Dubbo3 迁移历程总结

    本篇是 Apache Dubbo 的实践案例.感兴趣的朋友可以访问官网了解更多详情,或搜索关注官方微信公众号 Apache Dubbo 跟进最新动态. 1 背景 我们公司从15年开始就使⽤dubbo作 ...

  2. 实践案例:同程艺龙网的 Dubbo 升级经验总结

    本篇为同程艺龙旅行网 Apache Dubbo 的实践案例总结.感兴趣的朋友可以访问官网了解更多详情,或搜索关注官方微信公众号 Apache Dubbo 跟进最新动态. 作者信息: 严浩:同程艺龙高级 ...

  3. 微服务实战(四):服务发现的可行方案以及实践案例 - DockOne.io

    原文:微服务实战(四):服务发现的可行方案以及实践案例 - DockOne.io 这是关于使用微服务架构创建应用系列的第四篇文章.第一篇介绍了微服务架构的模式,讨论了使用微服务架构的优缺点.第二和第三 ...

  4. DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能

    DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能 一.引言 在当前的电子商务平台中,用户下完订单之后,然后店家会在后台看到客户下的订单,然后店家可以对客户的订单进行发货操作.此时客户会在自己 ...

  5. [转载]DevOps在传统企业的落地实践及案例分享

    内容来源:2017年6月10日,优维科技高级解决方案架构师黄星玲在“DevOps&SRE 超越传统运维之道”进行<DevOps在传统企业的落地实践及案例分享>演讲分享.IT 大咖说 ...

  6. - 反编译 AndroidKiller 逆向 实践案例 MD

    目录 目录 反编译 AndroidKiller 逆向 实践案例 MD AndroidKiller 简介 插件升级 基本使用 实践案例 修改清单文件 打印 debug 级别的日志 方式一:直接代理 Lo ...

  7. 【案例分享】SpreadJS金融行业应用实践,开发基于Web Excel的指标补录平台

    SpreadJS作为一款基于 HTML5 的纯前端电子表格控件,以“高速低耗.高度类似Excel.可无限扩展”为产品特色,提供移动跨平台和浏览器支持,可同时满足 .NET.Java.App 等应用程序 ...

  8. 《SaltStack技术入门与实践》—— 实践案例 <中小型Web架构>3 Memcached配置管理

    实践案例 <中小型Web架构>3 Memcached配置管理 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Memcached介绍 Me ...

  9. PouchContainer 开源版本及内部版本一致性实践

    PouchContainer 开源版本及内部版本一致性实践 为什么要做内外版本一致 对外开源是提升影响力.共建生态的有力手段.在项目对外开源的过程中,首先是将可以开源的部分抽离出来,发布一个“开源版本 ...

  10. 老李案例分享:定位JAVA内存溢出

    老李案例分享:定位JAVA内存溢出   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的loadrunner的培 ...

随机推荐

  1. .NET周刊【10月第1期 2024-10-06】

    国内文章 基于DPAPI+RDP技术实现本地打开远程程序,并映射到本地机器桌面上 https://www.cnblogs.com/weskynet/p/18445584 该教程讲述如何使用Remote ...

  2. 关于使用plsql操作oracle的一点小技巧和几个常用的查询语句

    plsql是什么: 就是这个,专门操作oracle的一个工具,好用还免费. 创建一个测试表: create table Student( Id number not null, Name varcha ...

  3. python数据结构学习第一章——栈

    在这片文章中,我们使用python3.8自制一个具有基本功能的栈结构,它的功能只有push,pop,peek这三个功能 ` #!/usr/bin/env python # * coding: utf- ...

  4. 多校A层冲刺NOIP2024模拟赛05

    T1.好数(number) 签到题 把选三个数相加拆为选择一个数,然后看前面有没有能用两个数组合出答案. $ O(n^2) $ . 码( #include<bits/stdc++.h> u ...

  5. 鲲鹏(ARM64)+麒麟(Kylin v10)离线部署 KubeSphere

    作者:社区用户-天行1st 本文将详细介绍,如何基于鲲鹏 CPU(ARM64) 和操作系统 Kylin V10 SP2/SP3,利用 KubeKey 制作 KubeSphere 和 Kubernete ...

  6. 云原生周刊:CNCF 宣布 KEDA 毕业 | 2023.8.28

    开源项目推荐 KDash KDash 是一个用 Rust 构建的简单快速的 Kubernetes 仪表板.它提供了一个终端界面,用于监视和管理 Kubernetes 集群.该仪表板具有多种功能,包括节 ...

  7. 云原生爱好者周刊:KubeSphere 3.3.0 Alpha 版发布

    开源项目推荐 Collection of Linux eBPF slides/documents 这个项目收集了各种与 eBPF 相关的资料,非常全面. magic-trace magic-trace ...

  8. 解决IDEA中SpringBoot框架使用@Autowired注解方式注入mapper对象出现红色下划线的问题

    点击编译器左上角File,点击settings进入设置界面,找到图片中对应的位置,将红线圈住的地方改为Warning,点击右下角的Apply即可

  9. vivo 轩辕文件系统:AI 计算平台存储性能优化实践

    在早期阶段,vivo AI 计算平台使用 GlusterFS 作为底层存储基座.随着数据规模的扩大和多种业务场景的接入,开始出现性能.维护等问题.为此,vivo 转而采用了自研的轩辕文件系统,该系统是 ...

  10. LeetCode题目练习记录 _栈、队列01 _20211012

    LeetCode题目练习记录 _栈.队列01 _20211012 84. 柱状图中最大的矩形 难度困难1581 给定 n 个非负整数,用来表示柱状图中各个柱子的高度.每个柱子彼此相邻,且宽度为 1 . ...