ignite适配华为云&Gaussdb

举报
yd_282553764 发表于 2024/11/27 11:10:44 2024/11/27
【摘要】 展示ignite组件适配华为云和Gaussdb的过程中遇到的问题

Apache Ignite 是一种高性能的分布式内存计算平台和分布式内存数据库,能够提供高吞吐量、低延迟的数据处理能力。Ignite 的核心特点是以内存为主,并可以结合持久化存储,为分布式应用提供快速的存储和计算功能。以下是 Ignite 的主要特性和功能介绍:

1. 核心特性

分布式内存存储

支持数据分区和复制,提供高可靠性和高可用性。

所有数据都可以存储在内存中,以实现快速读写操作。

可选持久化存储(Ignite Native Persistence),在内存数据丢失时提供持久化恢复能力。

高性能计算

提供分布式计算能力,支持分布式任务执行和大规模数据处理。

内置 SQL 查询引擎,支持 ANSI SQL-99 标准。

与 Hadoop 和 Spark 集成,支持大数据生态的扩展。

内置多模型支持

键值存储: 类似 Redis 的功能。

关系型数据库: 支持 SQL 查询。

流数据处理: 可处理实时流数据。

机器学习: 提供简单易用的机器学习库(Ignite ML)。

扩展性与弹性

无中心化设计,支持动态扩展。

节点故障时自动重新平衡数据。

步骤1:fork 仓库

主要ignite的仓库:https://github.com/apache/ignite,将其fork到自己的账号下

步骤2:本地编译并运行

主要步骤:

  • 执行mvn clean install -DskipTests

过程比较顺利。

步骤3:适配思路

因为ignite自己本身是支持Mysql作为本地存储的,我想先写一个本地demo连接mysql。然后将驱动改为opengauss,看有什么问题。然后在去适配。

步骤3:适配过程的问题

问题1:需要配置Java Home,我使用命令echo $JAVA_HOME是存在的。

解决:

检查 IDEA 的 Maven 配置

	1.	打开 Preferences (⌘+,)。
	2.	进入 Build, Execution, Deployment > Build Tools > Maven > Runner。
	3.	确认 Environment variables 是否配置了 JAVA_HOME:
	•	如果没有,请手动添加:JAVA_HOME=/path/to/your/java_home。
	•	路径可以通过命令 /usr/libexec/java_home -v 21 获取。

问题2:java: 不允许在使用 --release 时从系统模块 java.base 导出程序包:

解决:

这个错误是由于使用了 --release 参数编译代码,而该参数限制了 Java 编译器只能访问某些特定模块或包,这会导致部分模块的包(如 java.base 的内部包)无法导出或访问。

这是一个典型的问题,通常出现在使用高版本 JDK(如 JDK 9+)进行项目编译时。以下是解决方案:
1.	打开 File > Settings > Build, Execution, Deployment > Compiler > Java Compiler。
2.	查看 Target bytecode version 是否设置为 21,而不是低版本(如 8 或 11),因为我的Java 版本是21。

问题3:找不到main函数入口

解决:

自己写一个main方法,调用Ignition.start即可。Ignition.start是ignite启动的核心方法

问题4:高版本不适用反射,问题如下,在运行过程中因为这个错误引起的。我将所有的配置都放在解决方案里了。

Caused by: java.lang.RuntimeException: java.nio.DirectByteBuffer.address field is unavailable.
	at org.apache.ignite.internal.util.GridUnsafe$2.run(GridUnsafe.java:1615)
	at org.apache.ignite.internal.util.GridUnsafe$2.run(GridUnsafe.java:1602)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:319)
	at org.apache.ignite.internal.util.GridUnsafe.bufferAddressOffset(GridUnsafe.java:1602)
	at org.apache.ignite.internal.util.GridUnsafe.<clinit>(GridUnsafe.java:115)
	... 8 more
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field long java.nio.Buffer.address accessible: module java.base does not "opens java.nio" to unnamed module @7aec35a
	at java.base/

解决:添加如下启动参数

-Djdk.attach.allowAttachSelf
--add-opens
java.base/java.io=ALL-UNNAMED
--add-opens
java.base/java.lang=ALL-UNNAMED
--add-opens
java.base/java.lang.reflect=ALL-UNNAMED
--add-opens
java.base/java.net=ALL-UNNAMED
--add-opens
java.base/java.nio=ALL-UNNAMED
--add-opens
java.base/java.nio.channels.spi=ALL-UNNAMED
--add-opens
java.base/java.nio.file=ALL-UNNAMED
--add-opens
java.base/java.util=ALL-UNNAMED
--add-opens
java.base/java.util.concurrent=ALL-UNNAMED
--add-opens
java.base/java.util.concurrent.atomic=ALL-UNNAMED
--add-opens
java.base/java.util.jar=ALL-UNNAMED
--add-opens
java.base/java.util.stream=ALL-UNNAMED
--add-opens
java.base/java.time=ALL-UNNAMED
--add-opens
java.base/jdk.internal.loader=ALL-UNNAMED
--add-opens
java.base/sun.net.dns=ALL-UNNAMED
--add-opens
java.base/sun.nio.ch=ALL-UNNAMED
--add-opens
java.base/sun.security.jca=ALL-UNNAMED
--add-opens
java.xml/jdk.xml.internal=ALL-UNNAMED
--add-reads
java.base=java.desktop
-DIGNITE_REST_START_ON_CLIENT=true

步骤4:完整代码

git项目:https://github.com/SweetWuXiaoMei/ignite

分支:dev_ignite

模块:demo

步骤5:购买华为云Gaussdb和ECS,上云测试

购买华为云Gaussdb,并且购买公网IP,不然无法访问。配置如下:

产品名称

产品类型

数据库引擎版本

性能规格

实例类型

部署形态

备注

云数据库 GaussDB

基础版

8.201

独享型1:4

集中式

1主2备

推荐


产品名称 CPU架构 实例类型 公共镜像 镜像版本 备注
弹性云服务器 鲲鹏计算 鲲鹏通用计算增强型 Huawei Cloud EulerOS Huawei Cloud EulerOS 2.0 标准版 64位 ARM版(10GiB) 推荐


步骤6:访问,看是否有结果展示,数据库是否保存

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。