标签:
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;即可看到所有的命令
===================================================
[default@unknown] ?
List of all CLI commands:
? Display this message.
help; Display this help.
help <command>; Display detailed, command-specific help.
... ...
====================================================
示例:
====================================================
[default@unknown] connect localhost/9160;
Connected to: "Test Cluster" on localhost/9160
[default@unknown] create keyspace MyKeySpace;
d10524e1-4c98-11e1-9eb5-e711f669bbfe
[default@unknown] use MyKeySpace;
Authenticated to keyspace: MyKeySpace
[default@MyKeySpace] create column family MyCF with comparator = UTF8Type;
00419812-2c94-ffe0-9fb5-e799f699bcfc
[default@MyKeySpace] set MyCF[‘MyKey‘][‘MyColumn‘] = ‘MyValue‘;
Value inserted.
[default@MyKeySpace] update column family MyCF with
... column_metadata =
... [
... {column_name: MyColumn, validation_class: UTF8Type}
... ];
fd98427f-3fa6-11e0-8f42-e734f669bcfc
[default@MyKeySpace] get MyCF[‘MyKey‘];
=> (column=MyColumn, value=MyValue, timestamp=1299904789386000)
Returned 1 results.
[default@MyKeySpace] 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
如:
[default@KeySpace] update column family [cf name] with
... column_metadata =
... [
... {column_name: [col name], validation_class: 你想要的任何类型},
... ];
如果不这样写,缺省为BytesType,则在get命令获得出来的value(即value=*的结果)为16进制数值;
目前支持的类型有:AsciiType, BytesType, LexicalUUIDType, LongType, TimeUUIDType, 和 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/
标签:
原文地址:http://my.oschina.net/moks/blog/526639