0x04 - Cassandra & Spark:[1] 从 Cassandra 开始的大数据处理之路

从 Cassandra 开始的大数据处理之路

每每遇到数据量过大的场景后,如何对海量数据进行处理就成了一个头疼的问题。使用关系型数据库时往往会遇到数据量大,表格离散,分区分表繁琐,难以简单处理等问题。在对数据读写量有海量需求的时候,使用 Cassandra 这样的 NoSQL 分布式数据库或许是一个合理的解决方案。

Cassandra 是什么

所以 Cassandra 是什么呢?

Cassandra 是一套开源分布式 NoSQL 数据库系统,
它最初由 Facebook 开发,用于储存收件箱等简单格式数据。
集 GoogleBigTable 的数据模型与 Amazon Dynamo 的完全分布式的架构于一身,
Facebook 于 2008 将 Cassandra 开源。
此后,由于 Cassandra 良好的可扩展性,
被 Digg、Twitter 等知名 Web 2.0 网站所采纳,
成为了一种流行的分布式结构化数据存储方案。
------ From 百度百科

NoSQL (Not Only SQL) 即为非关系型的数据库。

为了应对网络应用场景下的高并发和大规模数据应用,Cassandra 应运而生,是为了解决大数据应用难题而诞生的数据库解决方案之一。

但是抛开华丽的外表, Cassandra 也只是一种存储数据的方法而已,如何去使用,如何去利用这些数据才是我们应该关心的事。

Cassandra 的不同之处

  • Cassandra 是分布式系统,在存储空间不够时,只需要增加节点就可以扩充存储空间。 而在使用关系型数据库,例如 mysql 时,它的单表数据量是有瓶颈的,当数据量到达一定级别,就需要考虑分库分表或者分区等。而这一点在 Cassandra 这里,仅需要增加节点就可以解决了,非常方便。

  • Cassandra 可以动态增删表的字段,这在大型项目的部署上,是很大的效率提升。

  • Cassandra 作为分布式处理的数据库,IO 性能也是非常关键的考量要点之一,而比较高效的写入性能意味着 Cassandra 可以应对大量写入、统计和分析的应用场景。但相对应的,读取性能则需要进行一定程度的优化。

  • Cassandra 作为 NoSQL 数据库,其建表操作还有设计逻辑与传统关系型数据库有比较大的差异。由于没有 Join 操作,在建表时需要考虑各种各样的因素。不过在熟悉 NoSQL 的处理逻辑之后,这种处理方式在大数据环境下更加便于处理。

Open The Box 打开盒子

于是这里,简单了解过 Cassandra 以后,让我们部署一下 Cassandra 服务。

由于 Cassandra 是集群数据库,所以大部分情况都需要在云端进行操作。 Aliyun 的 Cassandra 服务就可以满足绝大部分的需求。

那么如果,我们需要在本地跑一个简单的测试用数据库,该怎么做呢?

首先是我的环境:

Object Version
OS. Ubuntu 20.04
JVM. Open-JDK-1.8.0_292
Cassandra apache-cassandra-3.11.10-bin.tar.gz

在安装 Cassandra 前需要确认 Java 环境。

1
$ java -version

假如没有 JVM, 直接运行 Cassandra 会报以下的错误:

1
Cassandra 3.0 and later require Java 8u40 or later.

安装 JDK 的方法(JRE 也行,不过因为本人会做 JAVA 开发,因此会需要用上 JDK):

1
2
$ sudo apt-get update
$ sudo apt-get install openjdk-8-jdk # 别忘了更改环境变量

在配置好环境以后,我们就可以开始安装 Cassandra 了:

1
2
3
$ wget https://mirrors.bfsu.edu.cn/apache/cassandra/3.11.10/apache-cassandra-3.11.10-bin.tar.gz
$ # wget https://mirrors.tuna.tsinghua.edu.cn/apache/cassandra/3.11.10/apache-cassandra-3.11.10-bin.tar.gz # 你可能需要清华源
$ tar -zxvf apache-cassandra-3.11.10-bin.tar.gz

解压后的目录为 apache-cassandra-3.11.10-bin, 现在让我们来试一试:

1
2
$ cd apache-cassandra-3.11.10-bin/bin
$ cassandra # 一切从这里开始

在一长串的处理,一箩筐的日志以后,假如没有报 error,那么 Cassandra 的本地服务就已经启动了。
现在,让我们通过 cqlsh 来连接数据库。cqlsh 也在 bin 文件夹内

1
2
3
4
5
$ ./cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.11.10 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cqlsh >

简单尝试一下:

1
2
3
cqlsh > DESCRIBE KEYSPACES;

system_traces system_schema system_auth system system_distributed

那么到这里,Cassandra 的本地环境算是搭建完成了,需要远程连接云端 Cassandra 数据库的话,请这样写:

1
$ ./cqlsh -u 'username' -p 'password' your.cassandra.server.com 8888

切记,Cassandra 默认只允许本地连接,如果需要远程连接,请到服务器端更改 cassandra/confcassandra.yaml 的配置。
如果遇到 Last error: Connection refused,可以参看 这个帖子

SQL 到 CQL

我会推荐直接查看 w3cSchool。如果有耐心读英文的话,官方文档 也是个不错的参考处。

施工中,或许会懒,将来兴许会有 CQL 的基本用法
以上,是鸽子宣言