让开发
成为一种享受!

Cassandra数据库之初体验

什么是Cassandra?

当您需要可伸缩性和高可用性而不影响性能时,Apache Cassandra数据库是正确的选择。线性可扩展性 和在商用硬件或云基础架构上经过验证的容错能力使它成为关键任务数据的理想平台。Cassandra对跨多个数据中心的复制提供了一流的支持,为您的用户提供了更低的延迟,并且能让您在区域性断电情况下也稳如老狗,生生不息。

Cassandra有以下特性:

容错:数据会自动复制到多个节点以实现容错。支持跨多个数据中心的复制。可以更换故障节点而不会造成停机。

高性能:Cassandra 在基准测试和实际应用程序中始终胜过流行的NoSQL替代方案,这主要是因为在基础架构方面有很多选择。

去中心化:没有单点故障。没有网络瓶颈。集群中的每个节点都是相同的

可扩展:一些最大的生产部署包括Apple的75,000个节点存储超过10 PB的数据,Netflix(2,500个节点,420 TB,每天超过1万亿个请求),中国搜索引擎Easou(270个节点,300 TB,超过8亿个)每天的请求数)和eBay(超过100个节点,250 TB)。

可靠性:Cassandra 适用于即使整个数据中心发生故障也不会丢失数据的应用程序。

可伸缩性:读写吞吐量都随着新机器的增加而线性增加,而不会造成停机或应用中断。

安装Cassandra

前提条件

  • 安装最新版本的Java 8,Oracle Java Standard Edition 8或OpenJDK 8。要验证您是否安装了正确的Java版本,请输入。java -version
  • 注意:Cassandra 4.0(CASSANDRA-9608)中添加了对Java 11的实验支持。在Java 11上运行Cassandra是试验性的。这样做自担风险。有关更多信息,请参见 NEWS.txt。
  • 要使用cqlsh,请使用Python 2.7或Python 3.6+ 的最新版本。要验证您是否安装了正确的Python版本,请输入。python –version

选择安装方法

对于大多数用户而言,安装二进制tarball是最简单的选择。压缩包将所有内容解压缩到一个位置,二进制文件和配置文件位于它们自己的子目录中。tarball安装最明显的属性是它不需要root权限,可以安装在任何Linux发行版上。

打包安装需要root权限。如果要使用YUM安装Cassandra,请在CentOS和基于RHEL的发行版上安装RPM构建。如果要使用APT安装Cassandra,请在Ubuntu和其他基于Debian的发行版上安装Debian构建。请注意,YUM和APT方法都需要root权限,并且将以cassandraOS用户身份安装二进制文件和配置文件 。

安装二进制压缩包

1)验证安装的Java版本,例如:

$ java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~16.04.1-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

2)从Apache Cassandra下载 站点上的镜像之一下载二进制tarball 。例如,要下载3.11.6:

$ curl -OL https://mirror.bit.edu.cn/apache/cassandra/3.11.6/apache-cassandra-3.11.6-bin.tar.gz

3)打开压缩包

$ tar xzvf apache-cassandra-3.11.6-bin.tar.gz

4)启动Cassandra

有关如何配置安装的信息,请参阅配置Cassandra

$ cd apache-cassandra-4.0.0/
$ bin/cassandra

5)检查Cassandra的状态

$ bin/nodetool status

# 输出中的状态列应报告UN,代表“ Up / Normal”。
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address   Load       Tokens       Owns (effective) Host ID                               Rack
UN  127.0.0.1  70.03 KiB  256          100.0%           ac0d7d8c-4086-4fc1-b19b-a8a50708b5aa rack1

# 或者,通过以下方式连接到数据库:
$ bin/cqlsh

安装RPM软件包

1)验证安装的Java版本,例如:

$ java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~16.04.1-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

2)将Cassandra的Apache存储库添加到文件中/etc/yum.repos.d/cassandra.repo(作为root 用户)。最新的主版本是4.0,对应的发行版名称是40x(后缀“ x”)。对于老版本使用311x的C * 3.11系列,30x3.0,22x2.2和21x2.1。例如,要添加版本4.0(40x)的存储库:

[cassandra]
name=Apache Cassandra
baseurl=https://downloads.apache.org/cassandra/redhat/40x/
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://downloads.apache.org/cassandra/KEYS

3)从源更新包索引:

$ sudo yum update

4)使用YUM安装Cassandra:

$ sudo yum install cassandra

注意:cassandra安装过程中将创建一个新的Linux用户。Cassandra服务也将以该用户身份运行。

5)启动Cassandra服务:

$ sudo service cassandra start

6)使用以下方法监视启动进度:

$ tail -f /var/log/cassandra/system.log

7)检查Cassandra的状态:

$ nodetool status

输出中的状态列应报告UN,代表“正常/正常”。

或者,通过以下方式连接到数据库:

$ cqlsh

配置Cassandra

要在单个节点上运行Cassandra,存在的默认配置文件./conf/cassandra.yaml就足够了,您无需更改任何配置。但是,当部署节点群集或使用不在同一主机上的客户端时,必须更改某些参数。

Cassandra配置文件可以在conftarball目录中找到。对于软件包,配置文件将位于中/etc/cassandra

主要运行属性

Cassandra中的大多数配置都是通过可以在中设置的yaml属性完成的cassandra.yaml。至少应考虑设置以下属性:

  • cluster_name:集群的名称。
  • seeds:用逗号分隔的群集种子IP地址列表。
  • storage_port注意:您不一定需要更改此设置,但请确保没有防火墙阻止此端口。
  • listen_address:节点的IP地址,这是允许其他节点与此节点通信的地址,因此更改它很重要。或者,您可以设置listen_interface告诉Cassandra使用哪个接口,以及连续使用哪个地址。仅设置一个,而不要同时设置两个。
  • native_transport_port:对于storage_port,请确保此端口未被防火墙阻止,因为客户端将在此端口上与Cassandra通信。

更改目录的位置

以下yaml属性控制目录的位置:

  • data_file_directories:数据文件所在的一个或多个目录。
  • commitlog_directory:提交日志文件所在的目录。
  • saved_caches_directory:保存的缓存所在的目录。
  • hints_directory:提示所在的目录。

出于性能原因,如果您有多个磁盘,请考虑将提交日志和数据文件放在不同的磁盘上。

环境变量

JVM级别的设置(例如堆大小)可以在中设置cassandra-env.sh。您可以将任何其他JVM命令行参数添加到JVM_OPTS环境变量。当Cassandra启动时,这些参数将传递给JVM。

日志

正在使用的日志记录器是logback。您可以通过编辑更改日志记录属性logback.xml。默认情况下,它将在INFO级别登录到一个名为的文件system.log,在调试级别登录到一个名为的文件debug.log。在前台运行时,它还将以INFO级别登录到控制台。

插入和查询

Cassandra的API是CQL,即Cassandra查询语言。要使用CQL,您将需要连接到集群,这可以完成:

  • 使用cqlsh
  • 或通过Cassandra的客户端驱动程序。

CQLSH

cqlsh是用于通过CQL与Cassandra交互的命令行shell脚本。它随每个Cassandra软件包一起提供,可以在cassandra可执行文件旁边的bin /目录中找到。它连接到命令行上指定的单个节点。例如:

$ bin/cqlsh localhost
Connected to Test Cluster at localhost:9042.
 [cqlsh 5.0.1 | Cassandra 3.8 | CQL spec 3.4.2 | Native protocol v4]
 Use HELP for help.
 cqlsh> SELECT cluster_name, listen_address FROM system.local;
 cluster_name | listen_address
 --------------+----------------
  Test Cluster |      127.0.0.1
 (1 rows)
 cqlsh>

CQL详细介绍

qlsh是用于通过CQL(Cassandra查询语言)与Cassandra交互的命令行shell脚本。它随每个Cassandra软件包一起提供,可以在cassandra可执行文件旁边的bin /目录中找到。cqlsh利用Python本机协议驱动程序,并连接到命令行上指定的单个节点。

命令行选项

用法:

cqlsh [options] [host [port]]

选项:

  • -C --color强制颜色输出
  • --no-color禁用颜色输出
  • --browser指定用于显示cqlsh帮助的浏览器。这可以是受支持的浏览器名称之一(例如firefox),也可以是后跟浏览器路径%s(例如 )。/usr/bin/google-chrome-stable %s
  • --ssl连接到Cassandra时使用SSL
  • -u --user用于通过Cassandra进行身份验证的用户名
  • -p --password用于与Cassandra进行身份验证的密码,应与 --user
  • -k --keyspace要进行身份验证的密钥空间,应与 --user
  • -f --file从给定文件执行命令,然后退出
  • --debug打印其他调试信息
  • --encoding指定输出的非默认编码(默认为UTF-8)
  • --cqlshrc指定一个非默认位置cqlshrc的文件
  • -e --execute执行给定的语句,然后退出
  • --connect-timeout以秒为单位指定连接超时(默认为2s)
  • --python /path/to/python指定Python解释器的完整路径,以覆盖安装了多个解释器的系统上的默认值
  • --request-timeout以秒为单位指定请求超时(默认为10s)
  • -t --tty强制tty模式(命令提示符)

特殊命令

除了支持常规的CQL语句外,cqlsh还支持许多不属于CQL的特殊命令。这些在下面详细说明。

CONSISTENCY

用法:CONSISTENCY

设置要遵循的操作的一致性级别。有效的参数包括:

  • ANY
  • ONE
  • TWO
  • THREE
  • QUORUM
  • ALL
  • LOCAL_QUORUM
  • LOCAL_ONE
  • SERIAL
  • LOCAL_SERIAL
SERIAL CONSISTENCY

用法:SERIAL CONSISTENCY

设置要执行的操作的串行一致性级别。有效的参数包括:

  • SERIAL
  • LOCAL_SERIAL

串行一致性水平仅由条件更新(INSERTUPDATEDELETEIF 条件)。对于那些,串行一致性级别定义了串行阶段(或“ paxos”阶段)的一致性级别,而正常一致性级别定义了“学习”阶段的一致性,即,将保证哪种类型的读取都可以看到正确的更新远。例如,如果条件写入的一致性级别为QUORUM(并且成功),则QUORUM保证可以看到该写入。但是,如果该写入的常规一致性级别为ANY,则只能SERIAL保证一致性级别为的读取才能看到它(即使具有一致性的读取ALL也不能保证足够)。

SHOW VERSION

打印正在使用的cqlsh,Cassandra,CQL和本机协议版本。例:

cqlsh> SHOW VERSION
[cqlsh 5.0.1 | Cassandra 3.8 | CQL spec 3.4.2 | Native protocol v4]
SHOW HOST

除集群名称外,还打印cqlsh连接到的Cassandra节点的IP地址和端口。例:

cqlsh> SHOW HOST
Connected to Prod_Cluster at 192.0.0.1:9042.
SHOW SESSION

Pretty打印特定的跟踪会话。

用法:SHOW SESSION

用法示例:

cqlsh> SHOW SESSION 95ac6470-327e-11e6-beca-dfb660d92ad8

Tracing session: 95ac6470-327e-11e6-beca-dfb660d92ad8

 activity                                                  | timestamp                  | source    | source_elapsed | client
-----------------------------------------------------------+----------------------------+-----------+----------------+-----------
                                        Execute CQL3 query | 2016-06-14 17:23:13.979000 | 127.0.0.1 |              0 | 127.0.0.1
 Parsing SELECT * FROM system.local; [SharedPool-Worker-1] | 2016-06-14 17:23:13.982000 | 127.0.0.1 |           3843 | 127.0.0.1
...
SOURCE

读取文件的内容,并以CQL语句或特殊的cqlsh命令执行每一行。

用法:SOURCE

用法示例:

cqlsh> SOURCE '/home/thobbs/commands.cql'
CAPTURE

开始捕获命令输出并将其附加到指定文件。捕获到的输出不会在控制台上显示。

用法:

CAPTURE '<file>';
CAPTURE OFF;
CAPTURE;

也就是说,必须在字符串文字内给出要附加到的文件的路径。相对于当前工作目录解释路径。支持使用tilde速记符号('~/mydir')来引用$HOME

仅捕获查询结果输出。仅cqlsh命令的错误和输出仍将显示在cqlsh会话中。

要停止捕获输出并再次在cqlsh会话中显示它,请使用。CAPTURE OFF

要检查当前的捕获配置,请不使用CAPTURE任何参数。

HELP

提供有关cqlsh命令的信息。要查看可用主题,请输入HELP不带任何参数的内容。要查看有关某个主题的帮助,请使用。另请参见用于控制使用哪种浏览器显示帮助的参数。HELP ``--browser

TRACING

启用或禁用查询跟踪。启用跟踪后,查询完成后,将打印查询期间事件的跟踪。

用法:

TRACING ON
TRACING OFF
PAGING

启用分页,禁用分页或设置读取查询的页面大小。启用分页后,一次将仅提取一页数据,并且将显示提示以提取下一页。通常,最好在交互式会话中启用分页,以免一次获取和打印大量数据。

用法:

PAGING ON
PAGING OFF
PAGING <page size in rows>
EXPAND

启用或禁用行的垂直打印。EXPAND当获取许多列或单个列的内容很大时,启用很有用。

用法:

EXPAND ON
EXPAND OFF
LOGIN

以当前会话的指定Cassandra用户身份进行身份验证。

用法:

LOGIN <username> [<password>]
EXIT

结束当前会话并终止cqlsh进程。

用法:

EXIT
QUIT
CLEAR

清除控制台。

用法:

CLEAR
CLS
DESCRIBE

打印模式元素或集群的描述(通常是一系列DDL语句)。这对于转储全部或部分模式很有用。

用法:

DESCRIBE CLUSTER
DESCRIBE SCHEMA
DESCRIBE KEYSPACES
DESCRIBE KEYSPACE <keyspace name>
DESCRIBE TABLES
DESCRIBE TABLE <table name>
DESCRIBE INDEX <index name>
DESCRIBE MATERIALIZED VIEW <view name>
DESCRIBE TYPES
DESCRIBE TYPE <type name>
DESCRIBE FUNCTIONS
DESCRIBE FUNCTION <function name>
DESCRIBE AGGREGATES
DESCRIBE AGGREGATE <aggregate function name>

在任何命令中,DESC都可以代替使用DESCRIBE

该命令显示集群名称和分区程序:DESCRIBE CLUSTER

cqlsh> DESCRIBE CLUSTER

Cluster: Test Cluster
Partitioner: Murmur3Partitioner

该命令显示重新创建整个架构所需的DDL语句。这对于转储架构以克隆集群或从备份还原特别有用。DESCRIBE SCHEMA

COPY TO

将数据从表复制到CSV文件。

用法:

COPY <table name> [(<column>, ...)] TO <file name> WITH <copy option> [AND <copy option> ...]

如果未指定任何列,则表中的所有列将被复制到CSV文件。可以通过在表名后面添加一个用逗号括起来的列名列表来指定要复制的列子集。

本应是代表目标文件的路径字符串文字(单引号)。这也可以是特殊值(不带单引号),以将CSV打印到stdout。``STDOUT

有关同时适用于和的选项,请参见共享的COPY选项COPY TO``COPY FROM

COPY TO选项
  • MAXREQUESTS最大令牌数范围可以同时获取。默认为6。
  • PAGESIZE单个页面中要获取的行数。预设为1000。
  • PAGETIMEOUT默认情况下,页面超时为页面大小每1000个条目10秒,如果页面大小较小则为10秒。
  • BEGINTOKENENDTOKEN要导出的令牌范围。默认为导出完整的铃声。
  • MAXOUTPUTSIZE输出文件的最大大小,以行数为单位;超出此最大值,输出文件将被拆分为多个段。-1表示无限制,并且是默认值。
  • ENCODING用于字符的编码。默认为utf8
COPY FROM

将数据从CSV文件复制到表。

用法:

COPY <table name> [(<column>, ...)] FROM <file name> WITH <copy option> [AND <copy option> ...]

如果未指定任何列,则CSV文件中的所有列都将复制到表中。可以通过在表名后面添加一个用逗号括起来的列名列表来指定要复制的列子集。

的应为字符串文字(带单引号),代表源文件的路径。这也可以是特殊值(不带单引号),以便从stdin读取CSV数据。``STDIN

有关同时适用于和的选项,请参见共享的COPY选项COPY TO``COPY FROM

COPY TO选项
  • INGESTRATE每秒要处理的最大行数。默认为100000
  • MAXROWS要导入的最大行数。-1表示无限制,并且是默认值。
  • SKIPROWS要跳过的许多初始行。默认为0。
  • SKIPCOLS以逗号分隔的要忽略的列名称列表。默认情况下,不跳过任何列。
  • MAXPARSEERRORS要忽略的最大解析错误总数。-1表示无限制,并且是默认值。
  • MAXINSERTERRORS要忽略的最大插入错误总数。-1表示无限。默认值为1000。
  • ERRFILE =来存储无法导入所有行的文件,在默认情况下,这是import__.err地方是你的密钥空间,并为你的表名。
  • MAXBATCHSIZE单个批次中插入的最大行数。默认为20
  • MINBATCHSIZE单个批处理中插入的最小行数。默认为2。
  • CHUNKSIZE一次从主进程传递给子工作进程的行数。预设为1000。
共享的COPY选项

和共有的选项。COPY TO``COPY FROM

  • NULLVAL空值的字符串占位符。默认为null
  • HEADER对于,控制CSV输出文件中的第一行是否包含列名称。对于COPY FROM,指定CSV输入文件中的第一行是否包含列名。默认为。COPY TO``false
  • DECIMALSEP用作小数点分隔符的字符。默认为.
  • THOUSANDSSEP用于分隔数千个字符。默认为空字符串。
  • BOOLSTYlE布尔值的字符串文字格式。默认为True,False
  • NUMPROCESSESCOPY任务创建的子工作进程数。默认值最大为4,最大为16 。但是,最多将创建(num_cores-1)个进程。COPY FROM``COPY TO
  • MAXATTEMPTS在放弃之前获取数据范围(使用时)或插入数据块(使用时)的最大尝试失败次数。默认为5。COPY TO``COPY FROM
  • REPORTFREQUENCY状态更新的频率(以秒为单位)。默认值为0.25。
  • RATEFILE一个可选文件,用于输出速率统计信息。默认情况下,统计信息不会输出到文件中。

客户端驱动程序

以下列出了Java、Python、Go语言的Cassandra客户端驱动程序。在选择驱动程序之前,应验证特定驱动程序支持的Cassandra版本和功能。

Java

Python

Go

客户端的详细使用细则,读者可点击链接相应的学习,后面有机会的话考虑出一部分教程。

扫码关注公众号:Java开发乐园

在聊天窗口回复:vip

输入验证码,即可永久解锁本站全部文章

扫码关注【Java开发乐园】

Java开发乐园

扫码关注【东方】

微信:东方

验证码:
赞(0) 打赏
转载请注明出处:Java开发乐园 » Cassandra数据库之初体验

来评论一下嘛~ 2

评论前必须登录!

 

  1. #1

    还要关注公众号吗?

    Asuna1年前 (2020-05-03)

我愿终生等候,换你刹那凝眸

留点🐾印

打赏即是一种肯定,谢谢您的肯定

支付宝扫一扫打赏

微信扫一扫打赏