zoukankan      html  css  js  c++  java
  • Cassandra在Windows上安装及使用方法

    http://docs.datastax.com/en/landing_page/doc/landing_page/archivedDocuments.html
    http://pimin.net/archives/388
    http://pimin.net/topics/tech/nosql/page/4
    一、基本介绍
    DataStax,是一家位于加州的初创公司,提供了一个商业版本的Apache Cassandra NoSQL数据库,近日该公司获得了4500万美元的D轮融资,该轮融资由Scale Ventures引导,这是一位新投资者,同时还有DFJ Growth和Next World Capital,现有的投资者Lightspeed Venture Partners、Crosslink Capital以及Meritech Capital Partners也进行了参投。从2010年发布产品以来,DataStax已经获得了总计8370万美元的风险投资。

    Cassandra目录结构

    由于NoSQL中没有像传统数据库那样定义数据的组织方式为关系型的,所以只要内部的数据组织采用了非关系型的方式,就可以称之为NoSQL数据库。
    目前,可以将众多的NoSQL数据库按照内部的数据组织形式进行如下分类:

    1. Key/Value的NoSQL数据库
    2. 面向文档的NoSQL数据库
    3. 面向列的NoSQL数据库
    4. 面向图的NoSQL数据库

    不同的数据组织适合于不同的应用场景,后面将进行介绍。

    SQL语言和关系型数据库(MySQL、PostgreSQL、Oracle等) 是通用的数据解决方案,占有绝大多数的市场。不过在最近兴起的NoSQL运动中,涌现出一批具备高可用性、支持线性扩展、支持Map/Reduce操作等特性的数据产品,它们具有如下特性:

    1. 频繁的写入操作、相对较少的读取统计信息的操作(如网站访问计数器),应该使用基于内存的Key/Value(键/值)存储系统(如Redis) 或者是具备本地更新特性的文档存储系统(如MongoDB)。
    2. 海量数据(如数据仓库中需要分析的数据) 适合存储在一个结构松散、分布式的文件存储系统中,如Hadoop。
    3. 存储二进制文件(如mp3或者pdf文档) 并且能够直接为用户的浏览器提供下载功能,可以使用AmazonS3。
    4. 临时性的数据(如网站的session、缓存HTML页面信息等) 适合存储在Memcache中。
    5. 如果希望数据具备高可用性,并且能够将数据丢失的风险降到最低,同时整个系统具备线性扩展的能力,可以考虑使用Cassandra和HBase。

    4. Cassandra单节点安装

    首先确保安装了JDK。

    然后,修改配置文件,cassandra-0.7.6-2的conf下有以下几个配置文件:

    (1) access.properties:设置每个数据库或者表的访问权限

    (2) cassandra.yaml:主配置文件,包括日志路径,数据存放路径,各种参数配置等

    (3) cassandra-topology.properties:配置网络的拓扑结构

    (4) log4j-server.properties:log4j的配置选项

    (5) passwd.properties:配置用户密码,与access.properties配合使用

    对于简单的使用,只需配置cassandra.yaml文件:

    (1) 集群名称cluster_name:同一个集群中的集群名称应该一样。

    (2) 数据存放路径data_file_directories:可以根据情况配置一个有写权限的路径

    (3) commit log路径commitlog_directory:同上

    (4) saved cache路径saved_caches_directory:同上

    (5) 日志文件路径log4j.appender.R.File:同上(这个选项在log4j-server.properties文件中)

    此外,还需要修改服务监听的地址和thrift访问地址,即ListenAddress和ThriftAddress,配置文件默认监听的都是localhost:

    1
    2
    3
    4
    5
    6
    7
    <!-- Cassandra节点之间通信的监听地址,这里设置所在节点的ip-->
     
    <ListenAddress>100.200.3.1</ListenAddress>
     
    <!-- 这个是Thrift监听的地址,建议设置为0.0.0.0 -->
     
    <ThriftAddress>0.0.0.0</ThriftAddress>

    经过上面的配置就可以启动节点了:

    进入bin目录,直接执行:./cassandra

    5. Cassandra多个节点安装

    首先,在各节点上,按照第4节方法配制各自对应文件。

    然后,配制seeds。Cassandra没有传统集群的中心节点,各个节点地位都是平等的,通过Gossip协议维持集群中的节点信息。为了使集群中的各节点在启动时能发现其他节点,需要指定种子节点(seeds),各节点都先和种子节点通信,通过种子节点获取其他节点列表,然后和其他节点通信。种子节点可以指定多个,通过在 conf/ cassandra.yaml中的seeds属性配置。

    seeds:

    - 100.200.3.81

    - 100.200.3.78

    6. Cassandra附带工具使用方法介绍

    bin目录下自带了很多工具,可以帮助用户很方便地进行一些操作。常用的工具有nodetool,cassandra-cli,sstable2json等

    (1) nodetool

    nodetool是一个cassandra集群管理工具,这里只简单介绍一些简单的命令,详细的命令可以参见工具的帮助信息。

    ring命令

    ring命令用于查看集群的节点信息,ring来源于consistent hash,在consistent hash中,各个节点组成一个环,通常称为ring。

    Info命令

    info可以参看某个节点负载,内存使用情况:

    cfstats命令

    cfstats命令可以查看各个CF的详细统计信息,包括读写次数、响应时间、memtable信息等。

    (2) cassandra-cli

    cassandra-cli是一个命令行工具,可以用于对数据库进行数据查询和检索。具体可参见这篇文章:

    (3) sstable2json

    将sstable中的数据转化为json格式,使用方法为:

    Usage: sstable2json [-f outfile] <sstable> [-k key [-k key [...]]]

    ===============================================
    一、安装
     
    1、安装cassandra
     
        1.1 下载安装程序
    在http://cassandra.apache.org/下载Cassandra的安装程序;
     
        1.2 安装配置
    1)解压下载后的程序apache-cassandra-2.2.6-bin.tar.gz到某个目录,如d:cassandra;
     
    2)修改conf目录下配置文件
        A)使用记事本打开cassandra.yaml文件,修改如下参数: 
        data_file_directories:
         - /var/lib/cassandra/data
        为 - d:cassandradata 
        注意:-后面需要有空格
     
        commitlog_directory: /var/lib/cassandra/commitlog
        为:commitlog_directory: d:cassandracommitlog
        saved_caches_directory: /var/lib/cassandra/saved_caches
        为:saved_caches_directory: d:cassandrasaved_caches
     
      B)使用记事本打开log4j-server.properties文件,修改如下参数:
        log4j.appender.R.File=/var/log/cassandra/system.log
        为:log4j.appender.R.File=D:Cassandralogs
     
    2、安装JRE
      
        2.1 下载安装程序
    在http://www.oracle.com/technetwork/java/javase/downloads/index.html上下载jre的安装程序;
    jre和jdk区别:jre只是java环境,jdk包含了开发工具和jre;
     
        2.2 直接双击执行jre-6u25-windows-i586.exe进行安装,默认安装在C:Program FilesJavajre6目录即可;
     
    3、配置环境变量
     
        3.1 打开windows的环境变量配置窗口
     
    鼠标右键点击我的电脑,选择属性,在弹出界面点击【高级】页签,再点击【环境变量】按钮;
     
        3.2 配置JAVA_HOME环境变量
    在“系统变量”添加JAVA_HOME,点击【系统变量】下方的【新建】按钮,输入
              变量名:JAVA_HOME
        变量值:C:Program FilesJavajre6
     
        3.3 配置Cassandra_HOME环境变量
    在“系统变量”添加Cassandra_HOME,点击【系统变量】下方的【新建】按钮,输入
              变量名:Cassandra_HOME
        变量值:D:EBOOKNoSQLapache-cassandra-2.2.6
     
    4、启动Cassandra
     
      开始运行中敲入cmd回车打开命令窗口,敲入cd D:EBOOKNoSQLapache-cassandra-2.2.6in回车,敲入d:回车,转到D:EBOOKNoSQLapache-cassandra-2.2.6in目录后,直接敲入cassandra就可以启动cassandra服务了,如下:
     
    D:EBOOKNoSQLapache-cassandra-2.2.6in>cassandra
    D:EBOOKNoSQLapache-cassandra-2.2.6in>cassandra
    WARNING! Powershell script execution unavailable.
       Please use 'powershell Set-ExecutionPolicy Unrestricted'
       on this user-account to run cassandra with fully featured
       functionality on this platform.
    Starting with legacy startup options
    Starting Cassandra Server
    INFO  14:02:03 Node configuration:[authenticator=AllowAllAuthenticator; authorizer=AllowAllAuthorizer; auto_bootstrap=true; auto_snapshot=true; batch_size_fail_threshold_in_kb=50; batch_size_warn_threshold_in_kb=5; batchlog_replay_throttle_in_kb=1024; broadcast_address=null; broadcast_rpc_address=null; cas_contention_timeout_in_ms=1000; client_encryption_options=<REDACTED>; cluster_name=Test Cluster; column_index_size_in_kb=64; commit
    ...
    ...
    artition":"NONE"},defaultTimeToLive=0,minIndexInterval=128,maxIndexInterval=2048,speculativeRetry=99.0PERCENTILE,droppedColumns={},triggers=[],isDense=false]
    INFO  14:02:14 Initializing system_auth.role_members
    INFO  14:02:15 Netty using Java NIO event loop
    INFO  14:02:15 Using Netty Version: [netty-buffer=netty-buffer-4.0.23.Final.208198c, netty-codec=netty-codec-4.0.23.Final.208198c, netty-codec-http=netty-codec-http-4.0.23.Final.208198c, netty-codec-socks=netty-codec-socks-4.0.23.Final.208198c, netty-common=netty-common-4.0.23.Final.208198c, netty-handler=netty-handler-4.0.23.Final.208198c, netty-transport=netty-transport-4.0.23.Final.208198c, netty-transport-rxtx=netty-transport-rxtx-4.0.23.Final.208198c, netty-transport-sctp=netty-transport-sctp-4.0.23.Final.208198c, netty-transport-udt=netty-transport-udt-4.0.23.Final.208198c]
    INFO  14:02:15 Starting listening for CQL clients on localhost/127.0.0.1:9042...
    INFO  14:02:15 Not starting RPC server as requested. Use JMX (StorageService->startRPCServer()) or nodetool (enablethrift) to start it
    INFO  14:02:25 Created default superuser role 'cassandra'
    验证有没有启动,用要确认Cassandra有没有再跑,可以用nodetool.bat这个工具进行确认。
    bin>nodetool -h 127.0.0.1 ring
    结果:
    D:EBOOKNoSQLapache-cassandra-2.2.6in>nodetool -h 127.0.0.1 ring
    Starting NodeTool
    
    Datacenter: datacenter1
    ==========
    Address    Rack        Status State   Load            Owns                Token
                                                                              9177302928968051776
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             -9165356309934760118
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             -9134459597765889899
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             -9066115578285445066
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             -9026304759784057275
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             -8878071990522880873
    ...
    ...
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             8623942122364639506
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             8714309346994183881
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             8719119404383607089
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             8725585482200212568
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             8765208445410304904
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             8809038993346282672
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             8962288472837700908
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             8999197537072308487
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             9045901750664612483
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             9154510419811999586
    127.0.0.1  rack1       Up     Normal  97.06 KB        100.00%             9177302928968051776
    
      Warning: "nodetool ring" is used to output all the tokens of a node.
      To view status related info of a node use "nodetool status" instead.
    
    
    
    D:EBOOKNoSQLapache-cassandra-2.2.6in>
    二、使用
     
    1、连接Cassandra服务
       从cassandra2.x之后,就没有了Cassandra CLI 的工具,而是CQL替代。开始运行中敲入cmd回车进入命令窗口,敲入cd D:EBOOKNoSQLapache-cassandra-2.2.6in后,在敲入d:回车转到bin目录中敲入cqlsh.bat命令回车,直接敲入如下命令可以连接到本机已经启动的cassandra数据
    D:EBOOKNoSQLapache-cassandra-2.2.6in>cqlsh.bat
    
    WARNING: console codepage must be set to cp65001 to support utf-8 encoding on Windows platforms.
    If you experience encoding problems, change your console codepage with 'chcp 65001' before starting cqlsh.
    
    Connected to Test Cluster at 127.0.0.1:9042.
    [cqlsh 5.0.1 | Cassandra 2.2.6 | CQL spec 3.3.1 | Native protocol v4]
    Use HELP for help.
    WARNING: pyreadline dependency missing.  Install to enable tab completion.
    cqlsh>
    2、创建keyspace
    create keyspace keyspace1;
    use keyspace1;
     
    3、创建column family
    create column family Standard1 with column_type = 'Standard' and comparator = 'BytesType';
    describe keyspace keyspace1;
    list standard1;
    drop column family standard1;
     
    --必须指定column_type和comparator
    create column family cf1 with column_type = 'Standard' and comparator = 'BytesType';
    create column family cf2 with column_type = 'Standard' and comparator = 'UTF8Type' and rows_cached = 10000;
    create column family Super1 with column_type=Super and comparator=BytesType;
     
    --设置列值
    set cf1['key_1']['column_1']='value_1';
    set cf1['key_1']['column_2']='value_2';
    set cf1['key_2']['column_1']='value_3';
    set cf1['key_2']['column_2']='value_4';
     
    --设置列值
    set cf2['key_1']['column_1']='value_1';
    set cf2['key_1']['column_2']='value_2';
    set cf2['key_2']['column_1']='value_3';
    set cf2['key_2']['column_2']='value_4';
     
    set super1['key_1']['column_1']='value_1';
     
    get cf2['key_2']['column_2'];  --提示错误Column family Super1 may only contain SuperColumns
     
    --取列值
    get cf1['key_1'];
    --计数
    count  cf1['key_1'];
    count  cf1['key_2'];
     
    --取列值
    get cf1['key_1']['column_1'];
    --删除列值
    del cf1['key_1']['column_1'];
     
    list cf2[key_1:];
     
    ---二级索引的使用
    1、定义:在Cassandra中,对列值(column values)的索引叫做"二级索引",它与列簇(column families)中对key的
     
    索引不同。二级索引允许我们对列值进行查询,并且在读取和写入的时候不会引起操作阻塞。
     
    2、使用方法:
    create keyspace demo;
    use demo;
    --注意大小写,索引birth_date
    create column family users with comparator=UTF8Type and column_metadata=
     
    [{column_name:full_name,validation_class:UTF8Type},
     
    {column_name:birth_date,validation_class:LongType,index_type:KEYS}];
     
    --插入数据:
    set的语法大概长的像下面这样:
    
    01.set Keyspace1.Standard1['geffzhang']['blog'] = 'http://www.dotnetting.cn'  
    02.                                                 
    03.                             \_ key             \_ value   
    04.                                       \_ column   
    05.          \_ keyspace  \_ column family  
    就按照上面的语法来加几个数据进去,然后用get把数据拉出来看看
    set users[a][full_name]='a';
    set users[a][birth_date]=1977;
     
    set users[b][full_name]='b';
    set users[b][birth_date]=1978;
     
    set users[c][full_name]='c';
    set users[c][birth_date]=1979;
     
    set users[d][full_name]='d';
    set users[d][birth_date]=1977;
     
    --查询birth_date=1977的数据:
    get users where birth_date=1977;
     
    --查询结果如下:
    [default@demo] get users where birth_date=1977;
    -------------------
    RowKey: a
    => (column=birth_date, value=1977, timestamp=1306733443578000)
    => (column=full_name, value=a, timestamp=1306733438406000)
    -------------------
    RowKey: d
    => (column=birth_date, value=1977, timestamp=1306733577125000)
    => (column=full_name, value=d, timestamp=1306733572687000)
     
    2 Rows Returned.
     
    --多个二级索引使用
    set users[a][card_no]='111';
     
    --更新列簇users设置card_no和birth_date都索引
    update column family users with comparator=UTF8Type and column_metadata=
     
    [{column_name:full_name,validation_class:UTF8Type},
     
    {column_name:birth_date,validation_class:LongType,index_type:KEYS},
     
    {column_name:card_no,validation_class:UTF8Type,index_type:KEYS}];
     
    --查询证件号码为111的列
    get users where card_no='111';
     
    get users where card_no='111' and birth_date=1977;
     
    --虽然full_name没有索引,但是也能够查出结果
    get users where card_no='111' and birth_date=1977 and full_name='a';
    get users where card_no='111' and full_name='a';
    get users where birth_date=1977 and full_name='a';
     
    --如果仅仅通过full_name查询则出错
    get users where full_name='a';
    --结果如下:
    [defualt@demo] get users where full_name='a';
    No indexed columns present in index clause with operator EQ
     
    --退出
    quit;

    Cassandra在设计的时候,就是支持Thrift的,这意味着我们可以使用多种语言开发。对于Cassandra的开发本身而言,这是使用Thrift的好处:支持多语言。坏处也是显而易见的:Thrift API功能过于简单,不具备在生产环境使用的条件。

    Cassandra 建议用户在它们的程序内用高阶API与Cassandrar进行通信,以C#来说,像是FluentCassandra 或 Aquiles。但是你也可以用官方出的最低阶API - Thrift 来与Cassandra沟通。

    Thrift这个是Cassandra自带的最简单的一类API,这个文件在apache-cassandra-0.5.1.中包含了。可以直接使用。我们也可以自己安装一个Thrift,然后通过cassandra.thrift文件自动生成。如果你要使用Cassandra,那么我们必须要了解Thrift API,毕竟所有的其他更加高级的API都是基于这个来包装的。

      1. 准备运行环境
        1.1 cassandra可以安装在windows和linux下,本例子安装在centos6.7的环境下。
        1.2 关闭防火墙。或者开放9042(默认的CQL本地服务端口)、9160(默认的Cassandra服务端口)、7000(Cassand集群内节点间通讯端口)、7199端口(Cassandra JMX 监控端口)
          关闭防火墙:
        1 service iptables stop
        2 chkconfig iptables off
              开放端口:  
        1 vi /etc/sysconfig/iptables
        2 -A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT(仿照这个写)
        3 /etc/init.d/iptables restart
        1.3 安装JDK,配置环境变量
              下载JDK:
        yum -y install wget     //安装wget插件
        wget –P /usr http://download.oracle.com/otn/java/jdk/8u60-b15/jdk-8u60-linux-i586.rpm?AuthParam=1467614887_3fe640855a43a439fb5f5fec1f5045e2
        rpm -ivh jdk-8u60-linux-i586.rpm
              配置环境变量:
        复制代码
        1 vi /etc/profile
        2     JAVA_HOME=/usr/java/jdk1.8.0_60
        3     JRE_HOME=/usr/java/jdk1.8.0_60/jre
        4     PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
        5     CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
        6     export JAVA_HOME JRE_HOME PATH CLASSPAH
        7 source /etc/profile
        复制代码
      2. 安装
        2.1 下载并解压cassandra安装包,本例子用的版本是2.1.14(这个镜像不行的话去官网找别的镜像)
        1 wget http://mirrors.cnnic.cn/apache/cassandra/2.1.14/apache-cassandra-2.1.14-src.tar.gz
        2 tar -zxvf apache-cassandra-2.1.14-bin.tar.gz  -C /opt/cassandra

        2.2 新建cassandra数据存放的文件夹(用安装包的方式就需要这一步)。

        1 //可以根据磁盘情况设置这3个文件夹,但是要和cassandra.yaml里的想对应
        2 mkdir /var/lib/cassandra/data
        3 mkdir /var/lib/cassandra/commitlog
        4 mkdir /var/lib/cassandra/saved_caches

         2.3 打开解压后的/opt/apache-cassandra-2.1.14/cassandra/conf的目录,修改其中的cassandra.yaml中的一些参数

        复制代码
        1 cluster_name: 'xxx'  //集群名称。同一个集群要使用同一名称
        2 data_file_directories:
        3     - /var/lib/cassandra/data  //数据文件存放路径。打开这个注释,注意不要合并成一行,合并成一行好像会出问题,这里要与前面新建的文件夹对应。
        4 commitlog_directory: /var/lib/cassandra/commitlog //操作日志文件存放路径。打开注释,与前面新建的文件夹对应。
        5 saved_caches_directory: /var/lib/cassandra/saved_caches  //缓存文件存放路径。打开注释,与前面新建的文件夹对应。
        6 - seeds: "192.168.x.x"  //集群种子节点ip,新加入集群的节点从种子节点中同步数据。可配置多个,中间用逗号隔开。
        7 listen_address: 127.0.0.1  //需要监听的IP或主机名。改成本机IP
        8 rpc_address: 127.0.0.1  //用于监听客户端连接的地址。建议设置成IP或0.0.0.0。若设置0.0.0.0,则要放开broadcast_rpc_address: 1.2.3.4的注释。
        复制代码

        2.4 进入到bin目录下

        1 ./cassandra

        如果提示没有权限什么的

        1 ./cassandra -R //用root用户启动

        如果没有报什么奇奇怪怪的ERROR然后看到 Node /x.x.x.x state jump to NORMAL,这样cassandra就算安装完成了,也可以在在bin目录下使用./nodetool status 查看集群信息确认一下。

        UN 表示的是该服务器的状态,UN是运行中,DN是宕机。
        Note: xxxxxxx  这个问题是因为同一个键空间里存在不同复制策略的表,不影响使用,但是最好建表和修改表的时候注意一下。

  • 相关阅读:
    那些离不开的 Chrome 扩展插件
    Spring Boot 实战 —— 入门
    Maven 学习笔记
    Linux lvm 分区知识笔记
    Linux 双向 SSH 免密登录
    CentOS Yum 源搭建
    Ubuntu 系统学习
    iOS 测试三方 KIF 的那些事
    Swift 网络请求数据与解析
    iOS Plist 文件的 增 删 改
  • 原文地址:https://www.cnblogs.com/duanxz/p/5500511.html
Copyright © 2011-2022 走看看