Cassandra 技能Get

Cassandra是有FaceBook开发并开源的一个NoSQL分布式存储。目前是Apache基金会下面的一级项目,它的官方网站是http://cassandra.apache.org/。

相对于Memcache和Redis这些NoSQL(not SQL)或者说Key-Value存储,Cassandra与MongoDB、HBase在形态在趋于一致,为NoSQL(Not Only SQL)。这是因为Cassandra相对于简单的Key-Value存储,能够支持比较复杂的嵌套结构,有着Cluster、KeySpaces、Column Family、SuperColumn、Column等概念。

标准的Column结构图

含有 Super Column 的结构图

以上两图来自http://www.ibm.com/developerworks/cn/opensource/os-cn-cassandraxu1/index.html

整体结构图

上图来自http://www.ibm.com/developerworks/cn/opensource/os-cn-cassandra/

Cluster集群是组网结构名词,由于本文仅讲述新手入门,使用的是单点测试环境,暂不提及这个概念;

KeySpaces相当于关系数据库MySQL中的DataBase的概念,就像DataBase中有多个Table,KeySpaces中含有多个Column Family。你可以把KeySpaces理解为操作表的容器,Cassandra官方建议一个App使用一个KeySpaces。

Column Family相当于MySQL中的Table的概念,同MySQL中的Table一样,ColumnFamily中也含有多个Column。不一样的是,MySQL中的Table的每个Column中有多行(嗯,说每个Table可以有多行更加正确),而ColumnFamily中的Column没有行的概念,ColumnFamily的Row其实也是Column的意思。

Column就是行,Column的Key则是索引键。

Super Column则是拥有Column的超级Column。

闲话少说,实践为王。我测试使用的是Linux X64的操作系统。

装载Java JDK,这个网上有教程,其中需要注意的是设置正确JAVA_HOME

从官方网站下载下来最新稳定版本Cassandra V0.7.4。压缩包为apache-cassandra-0.7.4-bin.tar.gz,大小为9.796KB。

在Linux操作系统上,使用超级账户将此文件放在/opt或者/app下,由你喜欢。

解压,敲击命令:tar -zxvf apache-cassandra-0.7.4-bin.tar.gz

进入解压后的目录:cd ./apache-cassandra-0.7.4

目录结构为:

======================================

bin                   可执行文件的文件夹
CHANGES.txt
conf                 配置文件的文件夹
interface          
javadoc           javadoc的文件夹,可查看Cassandra的Java document文件
lib                    Cassandra的jar包的文件夹
LICENSE.txt
NEWS.txt
NOTICE.txt
README.txt

======================================

其中,

Cassandra服务器执行文件为./bin/cassandra(Windows环境的执行文件为cassandra.bat)

测试客户端执行文件为./bin/cassandra-cli(Windows环境的执行文件为cassandra-cli.bat)

最重要的三个配置文件为:

./conf/cassandra.yaml 配置cassandra的参数

./conf/log4j-server.properties 配置Log日志参数

./bin/cassandra.in.sh 配置操作系统参数和Java的参数

由于这里的目的仅仅是感受一下cassandra的使用,且是单点测试,需要注意的参数也只有以下几个:

./conf/cassandra.yaml
data_file_directories: dir path #数据文件存储的位置
commitlog_directory: dir path #commit log日志存储的位置
saved_caches_directory: dir path

rpc_port: 9160 这是客户端连接Cassandra服务器的端口号,当在同一个台物理服务器上启动两个Cassandra端口号必须不一样

storage_port: 7000 这是Cassandra服务器与服务器之间连接的端口号,在这里本无须注意,但是,当同时启动两个Cassandra时,不需要不一样

./conf/log4j-server.properties

log4j.appender.R.File=file path #每日轮转日志文件的路径,用于查找问题

./bin/cassandra.in.sh

如果.bash_profile或者.bashrc中没有设置JAVA_HOME,可以在这个文件中设置JAVA_HOME,也可以在这个文件中设置JAVA_OPT

另外,非常重要的是,由于Cassandra使用的缺省JMX端口号是8080,如果服务器上装载了Apache之类的Web服务器,冲突的可能性非常大(大家都知道8080这个端口号是多么常见)。因此,设置JMX端口号是非常重要的,这里提供一种设置方式:

命令行设置JAVA OPT参数:

./bin/cassandra -Dcom.sun.management.jmxremote.port=JMX端口号

如果你需要远程通过JMX访问cassandra的信息,则需要多设置一个参数:

./bin/cassandra -Dcom.sun.management.jmxremote.port=JMX端口号 -Djava.rmi.server.hostname=服务器外网IP地址

如果想看帮助,cassandra服务器请执行./bin/cassandra -h

启动cassandra服务器端后,如果在本地测试,可以使用cassandra-cli。

由于我们设置了JMX端口号,所以,执行测试客户端需要如下执行:

./bin/cassandra-cli --jmxport <JMX-PORT>

如果想看帮助,cassandra-cli可以使用./bin/cassandra-cli -?

进入测试客户端交互式界面后,执行?或者help;即可看到所有的命令

===================================================

[[email protected]] ?
List of all CLI commands:
?                                                          Display this message.
help;                                                         Display this help.
help <command>;                         Display detailed, command-specific help.
... ...
====================================================

示例:

====================================================

[[email protected]] connect localhost/9160;
Connected to: "Test Cluster" on localhost/9160

[[email protected]] create keyspace MyKeySpace;
d10524e1-4c98-11e1-9eb5-e711f669bbfe

[[email protected]] use MyKeySpace;
Authenticated to keyspace: MyKeySpace

[[email protected]] create column family MyCF with comparator = UTF8Type;
00419812-2c94-ffe0-9fb5-e799f699bcfc

[[email protected]] set MyCF[‘MyKey‘][‘MyColumn‘] = ‘MyValue‘;
Value inserted.

[[email protected]] update column family MyCF with                                                                                        
...     column_metadata = 
...     [
...     {column_name: MyColumn, validation_class: UTF8Type}
...     ];
fd98427f-3fa6-11e0-8f42-e734f669bcfc

[[email protected]] get MyCF[‘MyKey‘];
=> (column=MyColumn, value=MyValue, timestamp=1299904789386000)
Returned 1 results.

[[email protected]] quit;

====================================================

由于说明很详细,这里仅指出几个比较容易犯的错误。

1.任何命令(?除外)都是以;结束,可以将一个多层嵌套的命令分多行写,这个和MySQL命令行是一致的,但新手确实很容易犯这个错误。

2.创建Column Family(简称cf)时,需要添加"with comparator = 任何你想要的类型"
如:
create column family [cf name] with comparator = UTF8Type;

如果不这样写,缺省为BytesType,则在get命令获得出来的column name(即column=*的结果)为16进制数值;

3.创建Column后,需要执行update column family更新metadata

如:

[[email protected]] update column family [cf name] with                                                                                        
...     column_metadata = 
...     [
...     {column_name: [col name], validation_class: 你想要的任何类型},
...     ];

如果不这样写,缺省为BytesType,则在get命令获得出来的value(即value=*的结果)为16进制数值;

目前支持的类型有:AsciiTypeBytesTypeLexicalUUIDTypeLongTypeTimeUUIDType, 和 UTF8Type

如果想远程查看Cassandra的状态,则可以通过Jconsole远程查看,如果你本机为Windows,则在运行中执行:jconsole

当JConsole界面出现后,选择远程进程,在下方URL栏填写:service:jmx:rmi:///jndi/rmi://远程IP地址:远程端口号/jmxrmi

如:service:jmx:rmi:///jndi/rmi://127.0.0.1:8080/jmxrmi

点击”连接“即可。正常显示结果如下图所示:

参考文档:

官方wiki http://wiki.apache.org/general/

Cassandra 分布式数据库详解,第 1 部分:配置、启动与集群 http://www.ibm.com/developerworks/cn/opensource/os-cn-cassandraxu1/index.html

Cassandra 分布式数据库详解,第 2 部分:数据结构与数据读写 http://www.ibm.com/developerworks/cn/opensource/os-cn-cassandraxu2/index.html

分布式 Key-Value 存储系统:Cassandra 入门 http://www.ibm.com/developerworks/cn/opensource/os-cn-cassandra/

时间: 2024-08-03 04:30:41

Cassandra 技能Get的相关文章

DCOS实践分享(4):如何基于DC/OS整合SMACK(Spark, Mesos, Akka, Cassandra, Kafka)

这篇文章入选CSDN极客头条 http://geek.csdn.net/news/detail/71572 当前,要保证业务的市场竞争力,仅靠设计一个可用并且好看的产品,已经完全不能满足要求.全球消费者都希望产品能够足够的智能化,通过大数据分析来改善他们的用户体验.简言之,物联网和大数据终将成为改变生活的技术驱动力. 近几年涌现了大量的技术架构与设计模式,开发者和科学家可以利用它们为大数据和物联网开发实时的数据分析工作流应用.其中批处理架构,流式处理架构,lambda架构,Kappa架构,都是其

大数据技能图谱

下面是 StuQ 发布的大数据技能图谱,比较实用,供参考 大数据处理框架 Spark - RDD - Spark SQL - Spark Streaming - MLLib Hadoop - HDFS (分布式文件系统) - Mapreduce(计算框架) - Yarn(资源管理平台) - Pig(piglatin 语句到 mapreduce 的映射) - Hive(数据仓库,提供 SQL) - Mahout(机器学习算法的 mapreduce 实现库) KafkaStormELK - Elas

知道创宇研发技能表v2.2

Expand - Collapse 知道创宇研发技能表v2.2 2014/3/9 发布 by @知道创宇(www.knownsec.com) @余弦 & 行之 知道创宇是国内Geek十足且普遍被认为特别有前途的互联网安全公司, 动态请关注微信公众号:Lazy-Thought. 说明 本技能表为知道创宇研发工程师必备技能 聪明的人会根据每个tip自驱动扩展 不聪明的,坐等别人手把手的人请绕行,不仅不适合知道创宇,也不适合任何有Geek精神的公司   附件标志是我们推荐的附加资源,感谢资源提供者 知

知道创宇研发技能表v3.0

2015/8/21 发布 by @知道创宇(www.knownsec.com) @余弦 & 404团队 后续动态请关注微信公众号:Lazy-Thought 说明 关于知道创宇 知行合一 | 守正出奇 知道创宇是一家黑客文化浓厚的安全公司,愿景是让互联网更好更安全 本技能表为知道创宇研发工程师的技能树集合,是的,很庞大 聪明的人,会根据每个tip自驱动扩展 不聪明的人,坐等别人手把手,不仅不适合知道创宇,也不适合任何有极客精神的公司 附件标志是我们推荐的附加资源,感谢资源提供者 知道创宇研发技能表

同盾研发技能表

软性技能 不甘平庸.每个人都有自己的梦想. 向业界和身边优秀的人看齐 从小事做起,并把它做好 代码的逻辑正确无误 代码的执行效率很高 代码的结构清晰易懂 代码的可扩展性良好 重复的工作自动化 积极主动.态度决定一切. 发现工作中的问题及时反馈 自己主动承担把问题解决掉 协调资源推动他人一起解决 勤奋好学.快速掌握一门技术是立足之本. 学会翻墙 曲径:最好的翻墙工具 VPN:云梯VPN VPS:digitalocean.Linode Chrome插件:红杏出墙 善用Google和Stackover

知道创宇技能表

知道创宇研发技能表v3.1 Expand - Collapse 知道创宇研发技能表v3.1 2016/5/18 发布 by @知道创宇(www.knownsec.com) @余弦 & 404团队 后续动态请关注微信公众号:Lazy-Thought 说明 关于知道创宇 知行合一 | 守正出奇 知道创宇是一家黑客文化浓厚的安全公司,愿景是让互联网更好更安全 本技能表为知道创宇研发工程师的技能树集合,是的,很庞大 聪明的人,会根据每个tip自驱动扩展 不聪明的人,坐等别人手把手,不仅不适合知道创宇,也

一名合格的数据分析需要具备什么样的技能?

如今是一个数据说话的时代,同时也是一个数据竞争的时代,一切都是靠数据说话,而也正是因为这样方方面面的原因,让数据分析师这个职业水涨船高,市场需求很大.那么,我们需要先了解一下什么是数据分析师. 数据分析师 是数据师的一种,指的是不同行业中,专门从事行业数据搜集.整理.分析,并依据数据做出行业研究.评估和预测的专业人员. 尤其是互联网时代,数据过剩,数据分析师必须学会借助技术手段进行高效的数据处理.更为重要的是,互联网时代的数据分析师要不断在数据研究的方法论方面进行创新和突破.那么一名合格的数据分

全栈工程师技能图谱

知己知彼,方寸不乱. 1 前端技能图谱 基础 HTML / CSS JavaScript DOM 中级篇 数据格式(如JSON.XML) RESTful API交互(如jQuery Ajax,Fetch API,ReactiveX) 正则表达式 HTML语义化 命令行 Node.js DIV / CSS SCSS / SASS 矢量图形 / 矢量图形动画(如SVG) 单页面应用 高级篇 ES6 / TypeScript CSS3 面向对象编程 函数式编程 MVC / MVVM / MV * 安全

2017-7-27-关键20小时,快速习得任何技能

2017-7-27-关键20小时,快速习得任何技能 thinking 总之,就是在有限时间内保持专注,和不断练习 [email protected] 2017-7-27