《Hadoop生态》——第二章 数据库与数据管理——Cassandra

时间:2021-09-30 04:50:19


《Hadoop生态》——第二章 数据库与数据管理——Cassandra

数据库与数据管理

如果你计划用Hadoop,那么你要去管理大量的数据的可能性还是很大的,然后要添加到MapReduce任务中,你可能需要某种数据库。自从Google的BigTable出现以来,Hadoop就已经对数据的管理产生了浓厚的兴趣。虽然已经有一些关系型数据库或者与HDFS数据的SQL接口,比如Hive,Hadoop的许多数据管理都是用non-SQL的技术来存储和访问数据。NoSQL的文档列表超过150个,NoSQL数据库可有以下分类:

  • 列存储
  • 文档存储
  • 键值/元组存储
  • 图数据库
  • 多模板数据库
  • 对象数据库
  • 网格与云数据库
  • 多值数据库
  • 表格数据库
  • 其它

NoSQL数据库一般来讲不支持在关系型系统中的关系型连接操作,复杂的事务,或者外键约束,但是在大量的数据上有更好的伸缩性。你将必须决定哪种数据库最好,哪个更适合你抽取信息。你将很可能用多种数据库。

本书将在每个部分中看到许多领先的例子,但是焦点将是两个主要的目录:键值的存储和文档的存储(如图2-1):


《Hadoop生态》——第二章 数据库与数据管理——Cassandra

一个键值存储可以看做是一个目录,目录下的所有条目都是根据索引(键)排序的。正如一个目录,如果你知道你要查找的键,那么一个键值存储是非常快速有效的,但是如果你不知道的话,那么就没什么用了。

Cassandra


《Hadoop生态》——第二章 数据库与数据管理——Cassandra

许可证: PLG v2
活跃度:
目的: 键值存储
官方地址: https://cassandra.apache.org
Hadoop集成: API兼容

通常我们可能需要简单地组织大量数据为的是能够方便检索。一个通用的做法就是用一个key-value进行数据存储。这种数据库有点类似于一本电话簿里的一空白页。你的数据是通过唯一的“key”组织的,value是与key关联的。例如,如果你想存储一个客户的信息,你可以用他们的用户名作为key,事务历史以及地址可以作为与key关联的value。

Key-value数据存储是大数据系统中一个通用的方法,因为这样很容易伸缩,快速,并且可以直接应用。Cassandra是一个分布式key-value数据库,用了一些简单地和可伸缩的设计思想。虽然经常与HBase作比较,Cassandra有以下几点不同之处:

  • Cassandra是完全包含在系统中的,也就是说不需要Hadoop环境和其他的大数据工具。
  • Cassandra是完全无主的:它是作为对等系统的进行操作的。这使得它可以十分容易配置并可以复原。

教程链接

DataStax——一家对Cassandra提供商业支持的公司——提供了一系列免费的视频。

示例代码

与Cassandra进行交互最简单的方法就是用它的shell接口。你可以从你安装的目录打开shell运行bin/cqlsh。

然后你需要建立一个keyspace。Keyspace类似于传统关系型数据库中的schemas;他们是组织表更方便的一种方法。一个典型的模式就是为每一个应用用一个单独不同的keyspace:

CREATE KEYSPACE field_guide
WITH REPLICATION = {
'class': 'SimpleStrategy', 'replication factor' : 3 };

USE field_guide;

现在你有一个keyspace了,现在你要建立一个表用另一个keyspace来存放你的评论。这个表有三列,主键包含评论人和主题,在数据库范围内这个键值对应该是唯一的:

CREATE TABLE reviews (
reviewer varchar,
title varchar,
rating int,
PRIMARY KEY (reviewer, title));

一旦你的表建立了,那么你就可以插入一些评论:

INSERT INTO reviews (reviewer,title,rating)
VALUES ('Kevin','Dune',10);

INSERT INTO reviews (reviewer,title,rating)
VALUES ('Marshall','Dune',1);

INSERT INTO reviews (reviewer,title,rating)
VALUES ('Kevin','Casablanca',5)

现在你已经有了一些数据,你将建立一个索引允许你执行一个简单的SQL查询来检索Dune评论:

CREATE INDEX ON reviews (title);
SELECT * FROM reviews WHERE title = 'Dune';
 reviewer | title | rating
----------+------------+-------

Kevin | Dune | 10
Marshall | Dune | 1
Kevin | Casablanca | 5