当前位置: 首页 > news >正文

HBase Cassandra的部署和操作

目录

一.数据库的部署与配置

二.使用命令访问数据库

三.数据库的设计

四.编程实现数据库的访问


一.数据库的部署与配置

1.在单个节点上对进行数据库的单机部署

(1)下载apache-cassandra-4.1.7-bin.tar.gz,上传到hadoop1 的/export/software目录

(2)使用解压缩命令:tar -xzf /export/software/apache-cassandra-4.1.7-bin.tar.gz -C /export/servers/ 进行解压缩到/export/servers目录

(3)使用cd /export/servers命令进入/export/servers目录

(4)将Cassandra目录进行重命名:mv apache-cassandra-4.1.7 apache-cassandra-4.1.7-standalone

(5)启动Cassandra:bin/cassandra -R

(6)查看Cassandra启动信息:tail -f logs/system.log

(7)检查状态:bin/nodetool status

(8)连接数据库:bin/cqlsh

(9)关闭Cassandra:bin/nodetool stopdaemon

2.在多个节点上实现数据库的分布式部署

(1)在Hadoop1、Hadoop2和Hadoop3上分别执行systemctl stop firewalldsystemctldisable firewalld命令关闭防火墙;

(2)在Hadoop1、Hadoop2、Hadoop3上分别执行ssh-keygenssh-copy-id hadoop1ssh-copy-id hadoop2ssh-copy-id hadoop3,使各个节点可以免密登录

注:在Hadoop2和Hadoop3上的执行结果与Hadoop1几乎相同,故不再展示。

(3)进行免密登录测试,在Hadoop1、Hadoop2和Hadoop3上分别执行ssh hadoop1,ssh hadoop2,ssh hadoop3,可以免密登录即可

注:在Hadoop2和Hadoop3上的执行结果与Hadoop1几乎相同,故不再展示。

(4)在Hadoop1、Hadoop2和Hadoop3上分别上传压缩安装包

(5)在Hadoop1、Hadoop2和Hadoop3上分别解压缩apache-cassandra-4.1.7-bin.tar.gz:tar -xzf /export/software/apache-cassandra-4.1.7-bin.tar.gz -C /export/servers/

(6)分别修改Hadoop1、Hadoop2和Hadoop3的cassandra.yaml文件中的seeds、listen_address和rpc_address,具体修改如下:

Hadoop1:seeds=192.168.121.160,listen_address=192.168.121.160,rpc_address=192.168.121.160;

Hadoop1:seeds=192.168.121.160,listen_address=192.168.121.161,rpc_address=192.168.121.161;

Hadoop1:seeds=192.168.121.160,listen_address=192.168.121.162,rpc_address=192.168.121.162

注:因修改过程类似,此处只展示Hadoop1节点上的修改结果。

(7)在Hadoop1、Hadoop2和Hadoop3上使用命令分别启动Cassandra:

bin/cassandra -R

(8)查看运行状态:bin/nodetool status

(9)连接任一服务器均可:bin/cqlsh hadoop1,bin/cqlsh hadoop2,bin/cqlsh hadoop3

二.使用命令访问数据库

练习Cassandra的相关命令。

1.键空间:创建、删除和查看键空间

(1)创建并查看键空间

CREATE KEYSPACE IF NOT EXISTS library_system

WITH REPLICATION = {

    'class' : 'SimpleStrategy',

    'replication_factor' : 1

};

DESCRIBE KEYSPACES;

(2)删除并再次查看键空间

DROP KEYSPACE IF EXISTS library_system;

DESCRIBE KEYSPACES;

2.表:创建表、设置复合型主键、修改表结构(要求:复合主键要包括分区键和分簇键,数据类型要包含两种以上的集合类型和一种以上的自定义类型)

以图书管理系统为例进行如下操作:

(1)创建表(包含复合型主键)

在图书管理系统中,我们设计一个图书借阅记录表,复合主键由 book_id 和 borrower_id 组成,分区键使用 book_id,集群键使用 borrower_id。还使用了集合类型(SET)存储借阅的日期,以及自定义类型(user_info)来存储借阅人的信息。

语句如下:

CREATE TYPE IF NOT EXISTS library_system.user_info (

    name TEXT,

    email TEXT,

    phone_number TEXT

);

CREATE TABLE IF NOT EXISTS library_system.book_borrowing (

    book_id UUID,              -- 分区键

    borrower_id UUID,          -- 集群键

    borrow_date DATE,          -- 借阅日期

    return_date DATE,          -- 归还日期

    status TEXT,               -- 状态(如 已借出、已归还)

    tags SET<TEXT>,            -- 标签(如 热门、推荐等)

    borrower_info FROZEN<user_info>,  -- 自定义类型,借阅人信息

    PRIMARY KEY (book_id, borrower_id)  -- 复合主键

);

其中,book_id是分区键,borrower_id 是集群键,tags 是集合类型,用来存储书籍标签,borrower_info 是自定义类型 user_info,用于存储借阅人的信息。

(2)修改表结构

添加一个新列来记录图书的借阅次数。

语句如下:

ALTER TABLE library_system.book_borrowing ADD borrow_count INT;

3.数据查询 

(1)查询所有数据

SELECT * FROM library_system.book_borrowing;

(2)根据分区键查询

SELECT * FROM library_system.book_borrowing WHERE book_id = 3796171a-9a3d-45e6-8886-42601fed5c04;

(3)根据分区键和集群键查询

 SELECT * FROM library_system.book_borrowing WHERE book_id =  b8cdcddb-4b1e-4937-83cd-dbfbf5288671 AND borrower_id = b36f25ca-082c-4ded-afc9-6675eda47cd4;

(4)查询特定列

SELECT book_id, borrow_date, return_date FROM library_system.book_borrowing WHERE book_id = b8cdcddb-4b1e-4937-83cd-dbfbf5288671 AND borrower_id = b36f25ca-082c-4ded-afc9-6675eda47cd4;

(5)查询集合类型数据

SELECT tags FROM library_system.book_borrowing WHERE book_id = b8cdcddb-4b1e-4937-83cd-dbfbf5288671 AND borrower_id = b36f25ca-082c-4ded-afc9-6675eda47cd4;

(6)查询自定义类型数据

SELECT borrower_info FROM library_system.book_borrowing WHERE book_id = b8cdcddb-4b1e-4937-83cd-dbfbf5288671 AND borrower_id = b36f25ca-082c-4ded-afc9-6675eda47cd4;

4.数据更新:数据插入、数据更新、数据删除

(1)数据插入

INSERT INTO library_system.book_borrowing (book_id, borrower_id, borrow_date, return_date, status, tags, borrower_info)

VALUES (uuid(), uuid(), '2024-01-01', '2024-01-15', 'Borrowed', {'Popular', 'New Release'},

    {name: 'John Doe', email: 'johndoe@example.com', phone_number: '1234567890'});

(2)数据更新

UPDATE library_system.book_borrowing

SET return_date = '2024-01-20', status = 'Returned'

WHERE book_id = b8cdcddb-4b1e-4937-83cd-dbfbf5288671 AND borrower_id = b36f25ca-082c-4ded-afc9-6675eda47cd4;

(3)数据删除

①删除单条数据

DELETE FROM library_system.book_borrowing

WHERE book_id = b8cdcddb-4b1e-4937-83cd-dbfbf5288671 AND borrower_id = b36f25ca-082c-4ded-afc9-6675eda47cd4;

②删除整张表

TRUNCATE library_system.book_borrowing;

三.数据库的设计

图书管理系统包含三个主要实体:图书读者借阅记录。它们之间通过一个关系来进行联系,借阅记录表示图书与读者之间的借阅关系,本系统共设计三张表,分别是图书表(存储图书的相关信息)、借阅记录表(存储借阅的记录)和读者表(存储读者的基本信息)。

1.数据库设计

1图书表

表名:Books

列族(Column Families):

info:存储图书的基本信息

author:存储作者的详细信息

publisher:存储出版商的信息

行键设计:

行键:book_id(唯一标识每本图书)

列名与存储内容:

在info列族下:

title:书名

category:类别(如科幻、文学等)

published_date:出版日期

在author列族下:

name:作者名称

birth_date:作者出生日期

在publisher列族下:

publisher_name:出版商名称

publisher_address:出版商地址

2读者表

表名:Readers

列族(Column Families):

info:存储读者的基本信息

contact:存储读者的联系信息(例如地址、电话)

行键设计:

行键:reader_id(唯一标识每个读者)

列名与存储内容:

在info列族下:

reader_name:读者姓名

dob:出生日期

在contact列族下:

email:电子邮件地址

phone_number:电话号

address:家庭住址

3借阅记录表

表名:BorrowRecords

列族(Column Families):

info:存储借阅信息

reader:存储读者信息

行键设计:

行键:borrow_id(唯一标识每次借阅记录)

列名与存储内容:

在info列族下:

book_id:借阅的图书ID

borrow_date:借阅日期

return_date:归还日期

在reader列族下:

reader_name:读者姓名

reader_id:读者ID

4实体和关系的增删改查

①新增操作

新增图书:向Books表中插入新的行,包含图书ID(行键)及其对应的列族和列名。

新增借阅记录:向BorrowRecords表中插入新的行,包含借阅记录ID(行键)、借阅图书ID、借阅日期、归还日期、读者信息等。

新增读者:向Readers表中插入新的行,包含读者ID(行键)、姓名、出生日期、联系信息等。

②删除操作

删除图书:通过图书ID删除Books表中的记录。

删除借阅记录:通过借阅记录ID删除BorrowRecords表中的记录。

删除读者:通过读者ID删除Readers表中的记录。

③更新操作

更新图书信息:可以根据图书ID(行键)来更新Books表中的某些列,比如更新书名、作者或出版日期等。

更新借阅记录:可以根据借阅记录ID(行键)来更新借阅日期或归还日期等。

更新读者信息:可以根据读者ID(行键)来更新Readers表中的读者姓名、地址、电话等。

④查询操作

查询某本图书的详细信息:通过book_id查询Books表中的详细信息。

查询某本图书的借阅记录:通过book_id在BorrowRecords表中查找所有借阅记录。

查询某位读者的借阅记录:通过reader_id在BorrowRecords表中查找该读者的所有借阅记录。

查询某位读者的详细信息:通过reader_id查询Readers表中的详细信息。

2.表设计与填充数据

(1)图书表

行键(book_id)

列族

列名

列值

B001

info

title

《活着》

category

文学

published_date

1993-06-01

author

name

余华

birth_date

1960-04-03

publisher

publisher_name

作家出版社

publisher_address

北京市朝阳区

B002

info

title

《百年孤独》

category

小说

published_date

1967-06-05

author

name

加西亚·马尔克斯

birth_date

1927-03-06

publisher

publisher_name

南海出版公司

publisher_address

上海市徐汇区

(2)读者表

行键(reader_id)

列族

列名

列值

R001

info

reader_name

张三

dob

1990-05-15

contract

email

zhsan@email.com

phone_number

123-4567-8901

address

北京市海淀区

R002

info

reader_name

李四

dob

2005-02-28

contract

email

lisi@email.com

phone_number

987-6543-2100

address

上海市浦东新区

(3)借阅记录表

行键(borrow_id)

列族

列名

列值

BR001

info

Book_id

B001

Borrow_date

2024-11-01

Return_date

2024-11-15

reader

Reader_name

张三

Reader_id

R001

BR001

info

Book_id

B002

Borrow_date

2024-11-02

Return_date

2024-11-20

reader

Reader_name

李四

Reader_id

R002

四.编程实现数据库的访问

使用Python访问实现设计的图书管理系统的列式数据库,步骤如下:

(1)数据库连接:连接到Cassandra集群,并创建数据库library和数据表Books、Readers和BorrowRecords,具体代码如下:

from cassandra.cluster import Cluster

# 连接到 Cassandra 集群

cluster = Cluster(['192.168.121.160'])  虚拟机的 IP 地址

session = cluster.connect()

# 创建 Keyspace:library

session.execute("""

    CREATE KEYSPACE IF NOT EXISTS library WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1}

""")

# 使用创建的 Keyspace

session.execute("USE library")

# 创建表结构

# 创建 Books 表

session.execute("""

    CREATE TABLE IF NOT EXISTS Books (

        book_id TEXT PRIMARY KEY,

        title TEXT,

        category TEXT,

        published_date TEXT,

        author_name TEXT,

        author_birth_date TEXT,

        publisher_name TEXT,

        publisher_address TEXT

    )

""")

# 创建 Readers 表

session.execute("""

    CREATE TABLE IF NOT EXISTS Readers (

        reader_id TEXT PRIMARY KEY,

        reader_name TEXT,

        dob TEXT,

        email TEXT,

        phone_number TEXT,

        address TEXT

    )

""")

# 创建 BorrowRecords 表

session.execute("""

    CREATE TABLE IF NOT EXISTS BorrowRecords (

        borrow_id TEXT PRIMARY KEY,

        book_id TEXT,

        borrow_date TEXT,

        return_date TEXT,

        reader_name TEXT,

        reader_id TEXT

    )

""")

print("Keyspace and tables created.")

结果如下图所示:

(2)数据增加

分别给三张表插入数据,具体代码如下:

①插入图书记录

session.execute("""

    INSERT INTO Books (book_id, title, category, published_date, author_name, author_birth_date, publisher_name, publisher_address)

    VALUES (%s, %s, %s, %s, %s, %s, %s, %s)

""", ('B001', '《活着》', '文学', '1993-06-01', '余华', '1960-04-03', '作家出版社', '北京市朝阳区'))

结果如下图所示:

②插入读者信息

session.execute("""

    INSERT INTO Readers (reader_id, reader_name, dob, email, phone_number, address)

    VALUES (%s, %s, %s, %s, %s, %s)

""", ('R001', '张三', '1990-05-15', 'zhangsan@email.com', '123-4567-8901', '北京市海淀区'))

结果如下图所示:

③插入借阅记录

session.execute("""

    INSERT INTO BorrowRecords (borrow_id, book_id, borrow_date, return_date, reader_name, reader_id)

    VALUES (%s, %s, %s, %s, %s, %s)

""", ('BR001', 'B001', '2024-11-01', '2024-11-15', '张三', 'R001'))

结果如下图所示:

(3)数据更新

更新读者的联系方式,具体代码如下:

session.execute("""

    UPDATE Readers SET email = %s WHERE reader_id = %s

""", ('newemail@email.com', 'R001'))

结果如下图所示:

(4)数据查询

查询book_id为B001图书的详细信息,具体代码如下:

# 查询某本图书的详细信息

rows = session.execute("""

    SELECT * FROM Books WHERE book_id = %s

""", ('B001',))

for row in rows:

    print(row)

结果如下图所示:

(5)数据删除

删除book_id为B001图书的记录

session.execute("""

    DELETE FROM Books WHERE book_id = %s

""", ('B001',))

执行结果如下图所示:

http://www.lryc.cn/news/516174.html

相关文章:

  • 用户界面软件01
  • 【云原生】Docker Compose 从入门到实战使用详解
  • 【ShuQiHere】使用 SCP 进行安全文件传输
  • 海康威视H5player问题汇总大全
  • 力扣23.合并K个升序链表
  • 【C 语言指针篇】指针的灵动舞步与内存的神秘疆域:于 C 编程世界中领略指针艺术的奇幻华章
  • 游戏关卡设计的常用模式
  • 在一台服务器上使用docker运行kafka集群
  • Apache Celeborn 在B站的生产实践
  • JOIN 和 OUTER JOIN,SQL中常见的连接方式
  • Vue2: table加载树形数据的踩坑记录
  • 电子信息硕士面试经验
  • dns网址和ip是一一对应的吗?
  • springboot3 redis 常用操作工具类
  • Java工程师实现视频文件上传minio文件系统存储及网页实现分批加载视频播放
  • Redis(二)value 的五种常见数据类型简述
  • Docker 环境中搭建 Redis 哨兵模式集群的步骤与问题解决
  • 【网页自动化】篡改猴入门教程
  • 【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 4:MHE表示能力
  • Github - unexpected disconnect while reading sideband packet
  • Ubuntu 环境安装 之 RabbitMQ 快速入手
  • UE5中实现右键开镜效果
  • Apache HTTPD 换行解析漏洞(CVE-2017-15715)
  • Excel重新踩坑5:二级下拉列表制作;★数据透视表;
  • 力扣--35.搜索插入位置
  • C# 设计模式(行为型模式):模板方法模式
  • Leetcode打卡:设计一个ATM机器
  • 【TCP】SYN、ACK、FIN、RST、PSH、URG的全称
  • 【OceanBase】使用 Superset 连接 OceanBase 数据库并进行数据可视化分析
  • 【通识安全】应急救护常识23则