前提紧要:由于我的Java版本是Java 8所以为了兼容,我选择了apache-cassandra-3.11.11
官网下载链接:https://www.apache.org/dyn/closer.lua/cassandra/3.11.11/apache-cassandra-3.11.11-bin.tar.gz
通常推荐使用Java 8来运行Cassandra 3.x版本,因为它的性能和稳定性在这一组合下得到了优化。你们可以通过命令提示符输入java -version查看自己所对应的版本号
一、安装Cassandra并且配置环境变量
1、直接解压apache-cassandra-3.11.11-bin.tar.gz,记住自己的所解压的目录文件
2、配置环境变量
点击path编辑
输入自己的bin目录
二、配置Cassandra
1、打开Cassandra安装目录,找到conf
文件夹中的cassandra.yaml
配置文件。
特别注意缩进关系!
修改cassandra.yaml配置,这里可以先复制data_file_directories定位到,记得提前创建好三个文件夹
-
data
:用于存储Cassandra的数据文件。它包含了所有Cassandra的表数据文件,数据库的核心数据将会存储在这个目录中。每个表都会有一个对应的子目录,用来存储数据。 -
commitlog
:用于存储Cassandra的提交日志(Commit Log)。提交日志记录了所有的写操作,以便在系统崩溃或重启时进行数据恢复。它确保数据的持久性和一致性。 -
saved_caches
:存储Cassandra的缓存数据。它包含了预先计算好的缓存内容,可以加速查询操作,提高数据库性能。
data_file_directories:
- E:\apache-cassandra-3.11.11\data
commitlog_directory: E:\apache-cassandra-3.11.11\commitlog
saved_caches_directory: E:\apache-cassandra-3.11.11\saved_caches
根据Cassandra的安装和配置过程,修改lib\sigar-bin
为sigar-bin_tmp
这一步并不是必须的,通常只有在一些特定的情况下才需要执行。
为什么修改?
sigar-bin
是Cassandra用来监控系统资源的库,它基于SIGAR(System Information Gatherer and Reporter)工具。如果你在运行Cassandra时遇到与系统监控相关的问题,或者看到类似于"sigar-bin"的问题,可能需要按要求进行修改。
是否需要修改?
- 如果你没有遇到任何问题,尤其是与SIGAR库相关的错误或警告,那么你可以忽略这一步。
- 如果你在启动Cassandra时遇到问题,并且错误日志中提到
sigar-bin
,那么按照文档的要求,将lib\sigar-bin
改为sigar-bin_tmp
可能会解决问题。
如果Cassandra正常启动并且没有相关错误,通常不需要执行这一步。如果有相关问题,再执行修改。
三、启动
1、打开命令提示符,在你所处的目录列如我的E:\apache-cassandra-3.11.11\bin
cassandra -f
2、最后一行提示出现 Created default superuser role 'cassandra'说明启动成功!
3、注意事项:
1.PowerShell 脚本执行警告:
日志开头的警告表示,你的 PowerShell 脚本执行权限被限制。为了让 Cassandra 具有完整功能,你需要通过运行 powershell Set-ExecutionPolicy Unrestricted 来解决此问题,尤其是在 Windows 平台上。如果不解决这个问题,某些 Cassandra 功能可能会受到影响。
SIGAR 库初始化失败:
2.Cassandra 在启动时尝试初始化 SIGAR 库(一个用于系统信息的工具),但是出现了严重的错误(EXCEPTION_ACCESS_VIOLATION),导致 Cassandra 崩溃。
错误发生在 sigar-amd64-winnt.dll 库中,这通常是因为操作系统与本地库之间的不兼容,或者库文件损坏。
3.Java 虚拟机(JVM)崩溃并生成了错误报告(hs_err_pid37516.log),这表明出现了内存访问冲突(EXCEPTION_ACCESS_VIOLATION)。这种类型的错误通常是由于与系统相关的底层问题引起的,比如内存分配错误、库文件损坏等。
4、如果你报错了怎么办?通常遇到最多的错误是什么?
初始化 SIGAR 库报错:解决的方法很简单,在apache-cassandra-3.11.2\lib\sigar-bin文件夹中把“sigar-amd64-winnt.dll”这个文件更改为“sigar-amd64-winntt.dll”即可
四、使用DataGrip连接cassandra数据库
点击Driver:Apache Cassandra,下载导入这个包
测试连接成功
进行简单测试
代码如下:
// 1. 创建 Keyspace(数据库)首先,在 Cassandra 中,你需要创建一个 Keyspace,它相当于传统关系型数据库中的数据库。以下是创建一个简单 Keyspace 的语法:
CREATE KEYSPACE IF NOT EXISTS my_keyspace
WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
// 2. 使用 Keyspace
USE my_keyspace;
// 3. 创建表
CREATE TABLE IF NOT EXISTS users (
user_id UUID PRIMARY KEY,
username TEXT,
email TEXT,
created_at TIMESTAMP
);
// 4. 插入数据
INSERT INTO users (user_id, username, email, created_at)
VALUES (uuid(), 'alice', '[email protected]', toTimestamp(now()));
// 5. 查询数据
SELECT * FROM users;
五、编程访问cassandra数据库
1、使用Java实现cassandra编程访问
创建Maven项目
在pom.xml引入依赖
<dependency>
<groupId>com.datastax.oss</groupId>
<artifactId>java-driver-core</artifactId>
<version>4.13.0</version>
</dependency>
编写测试类代码CassandraTest.java
import com.datastax.oss.driver.api.core.CqlSession;
public class CassandraTest {
public static void main(String[] args) {
// 建立与Cassandra集群的连接
try (CqlSession session = CqlSession.builder().build()) {
// 如果连接成功,则输出连接成功的消息
System.out.println("Cassandra连接成功!");
} catch (Exception e) {
// 如果连接失败,则输出错误信息
System.out.println("连接Cassandra失败: " + e.getMessage());
}
}
}
测试连接
另外一种连接方法的代码--
import com.datastax.oss.driver.api.core.CqlSession;
import com.datastax.oss.driver.api.core.CqlSessionBuilder;
public class CassandraTest {
private static final String CONTACT_POINT = "127.0.0.1"; // Cassandra节点IP地址
private static final int PORT = 9042; // Cassandra端口号
private static final String LOCAL_DATACENTER = "datacenter1"; // 本地数据中心名称
private CqlSession session;
// 建立连接的方法
public void connect() {
try {
CqlSessionBuilder builder = CqlSession.builder();
builder.addContactPoint(java.net.InetSocketAddress.createUnresolved(CONTACT_POINT, PORT)); // 设置Cassandra的IP和端口
builder.withLocalDatacenter(LOCAL_DATACENTER); // 显式指定数据中心
session = builder.build();
System.out.println("Cassandra连接成功!"); // 连接成功时输出
} catch (Exception e) {
System.out.println("连接Cassandra失败: " + e.getMessage());
}
}
// 关闭连接的方法
public void close() {
if (session != null) {
session.close();
System.out.println("Cassandra连接已关闭。");
}
}
// 主函数,测试连接
public static void main(String[] args) {
CassandraTest connector = new CassandraTest();
connector.connect(); // 建立连接
// 在此可以添加执行查询、插入等其他操作
connector.close(); // 关闭连接
}
}
关键更改:
withLocalDatacenter(LOCAL_DATACENTER)
:此方法明确指定了数据中心(在此示例中为 datacenter1
)。确保你指定的值与 Cassandra 配置中的数据中心名称一致。通常,datacenter1
是默认数据中心,但如果你的 Cassandra 配置不同,请调整为相应的名称。
数据中心名称的获取:
如果你不确定数据中心的名称,可以通过以下命令在 Cassandra 中查看:
nodetool status
该命令将显示 Cassandra 集群的所有节点和其所在的 "数据中心" 信息。你可以根据输出中的 DC
列来确认数据中心名称。
可能的输出示例:
Datacenter: datacenter1
===============
Status=Up/Down | State=Normal/Leaving/Joining/Moving
Address | Load | Tokens | Host ID | DC | Rack
127.0.0.1 | 10.56 MB| 256 | 6788dee1-1264-4247-9abb-fbf29f958ba3 | datacenter1| rack1
其他可能的配置:
如果你的 Cassandra 集群有多个数据中心或者你想设置多个 contact points,也可以进行调整。例如:
builder.addContactPoint(java.net.InetSocketAddress.createUnresolved("127.0.0.1", 9042)); // Contact point 1
builder.addContactPoint(java.net.InetSocketAddress.createUnresolved("127.0.0.2", 9042)); // Contact point 2
builder.withLocalDatacenter("datacenter1"); // 本地数据中心名称
运行结果:
如果连接成功,控制台将显示: