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:访问,看是否有结果展示,数据库是否保存
- 点赞
- 收藏
- 关注作者
评论(0)