沃土云创开源开发者专项计划是华为给开源开发者提供专属激励资源,鼓励开发者积极参与开源 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. iOS通知使用小结

    最近在项目开发中遇到了一个问题,首页底部菜单和底部子菜单的互动.需求是这样的,编辑状态下点击红色删除按钮,首页底部菜单移除该项,子菜单中对应项选中状态设置为未选中,典型的一对多方式.刚开始的方案是想通 ...

  2. DIKI:清华提出基于残差的可控持续学习方案,完美保持预训练知识 | ECCV'24

    本研究解决了领域-类别增量学习问题,这是一个现实但富有挑战性的持续学习场景,其中领域分布和目标类别在不同任务中变化.为应对这些多样化的任务,引入了预训练的视觉-语言模型(VLMs),因为它们具有很强的 ...

  3. KubeSphere 社区双周报| 2024.07.19-08.01

    KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...

  4. OpenFunction v1.1.0 发布:新增 v1beta2 API,支持 Dapr 状态管理

    OpenFunction 是一个开源的云原生 FaaS(Function as a Service,函数即服务)平台,旨在帮助开发者专注于业务逻辑的研发.在过去的几个月里,OpenFunction 社 ...

  5. Spring实现MySQL事务操作

    一.创建数据库表 表名:account 字段:(`id`,`username`,`money`) 二.dao.service层创建业务接口.类 1 public interface UserDao { ...

  6. 专访|开源之夏最佳质量奖 Apache RocketMQ Committer 黄章衡

    随着开源之夏2022年度优秀学生名单出炉,其中Apache RocketMQ Committer 黄章衡同学获得开源之夏最佳质量奖.今天,我们也带来黄章衡同学的人物专访. https://summer ...

  7. JS 数组转对象 对象转数组 对象数组互相转换 数组对象互相转换

    JS 数组转对象 对象转数组  对象数组互相转换  数组对象互相转换 声明一个函数,arr_obj ,里面接收一个参数,参数类型只接受对象或者数组 如果没有传递任何参数  或者 传递的参数类型不符合要 ...

  8. 创建一个专属的 CLI

    作为一个前端,基本上每次初始化项目都会用到脚手架,通过一些脚手架可以快速的搭建一个前端的项目并集成一些所需的功能模块,避免自己每次都手动一个一个去安装.安装各个包的这个过程其实没啥营养,通过封装一个脚 ...

  9. Python通过requests模块处理form-data请求格式

    1.安装 requests_toolbelt 模块,引入该模块下的 MultipartEncoder 2.在 请求体 中使用该模块函数,请求头中增加对应参数值 from requests_toolbe ...

  10. apache做负载均衡器 配置

    将Apache作为LoadBalance前置机分别有三种不同的部署方式,分别是: 1 )轮询均衡策略的配置 进入Apache的conf目录,打开httpd.conf文件,在文件的末尾加入: Proxy ...