R利剑NoSQL系列文章 之Cassandra
当前位置:以往代写 > 其他教程 >R利剑NoSQL系列文章 之Cassandra
2019-06-14

R利剑NoSQL系列文章 之Cassandra

R利剑NoSQL系列文章 之Cassandra

rcassandra

第三篇 R利剑Cassandra,分为7个章节。

  1. Cassandra先容
  2. Cassandra安装
  3. RCassandra安装
  4. RCassandra函数库
  5. RCassandra根基利用操纵
  6. RCassandra利用案例
  7. Cassandra的消灭

每一章节,城市分为”文字说明部门”和”代码部门”,保持文字说明与代码的连贯性。

1. Cassandra先容

Apache
Cassandra是一套开源漫衍式NoSQL数据库系统。它最初由Facebook开拓,用于储存收件箱等简朴名目数据,集Google
BigTable的数据模子与Amazon Dynamo的完全漫衍式的架构于一身。Facebook于2008将 Cassandra
开源,从此,由于Cassandra精采的可扩放性,被Digg、Twitter等知名Web
2.0网站所采用,成为了一种风行的漫衍式布局化数据存储方案。

Cassandra 的名称来历于希腊神话,是特洛伊的一位悲剧性的女先知的名字,因此项目标Logo是一只放光的眼睛。

Cassandra的数据会写入多个节点,来担保数据的靠得住性,在一致性、可用性和网络分区耐受本领(CAP)的折衷问题上,Cassandra比
较机动,用户在读取时可以指定要求所有副本一致(高一致性)、读到一个副本即可(高可用性)或是通过选举来确认大都副本一致即可(折衷)。这
样,Cassandra可以合用于有节点、网络失效,以及大都据中心的场景。

Cassandra先容摘自:维基百科(http://zh.wikipedia.org/wiki/Cassandra)

2. Cassandra安装

文字说明部门:
首先情况筹备,这里我选择了Linux Ubuntu操纵系统12.04的64位处事器版本,各人可以按照本身的利用习惯选择顺手的Linux。

JDK利用SUN官方版本JDK 1.6.0_29,请不要用Linux自带的openjdk。

手动下载并安装Cassandra。

Cassandra设置,需要提前初始化几个目次。

  • data_file_directories:为数据文件目次
  • commitlog_directory:为日志文件目次
  • saved_caches_directory:为缓存文件目次
  • 下面将先容单节点的安装,集群安装请参考:Cassandra单集群尝试2个节点

    代码部门:
    单节点安装:系统情况 Linux Ubuntu 12.04 LTS 64bit server

    
    ~ uname -a
    Linux u1 3.5.0-23-generic #35~precise1-Ubuntu SMP Fri Jan 25 17:13:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
    
    ~ cat /etc/issue
    Ubuntu 12.04.2 LTS \n \l
    JDK情况:SUN官方JDK 1.6.0_29

    
    ~ Java -version
    
    java version "1.6.0_29"
    Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02, mixed mode)
    

    下载Cassandra并解压

    
    ~ wget http://mirrors.tuna.tsinghua.edu.cn/apache/cassandra/1.2.5/apache-cassandra-1.2.5-bin.tar.gz
    
    ~ tar xvf apache-cassandra-1.2.5-bin.tar.gz
    ~ mv apache-cassandra-1.2.5-bin cassandra125
    ~ mv cassandra125 /home/conan/toolkit/
    
    ~ pwd
    /home/conan/toolkit
    
    ~ ls -l
    drwxrwxr-x  9 conan conan 4096 Jun  1 06:10 cassandra125/
    drwxr-xr-x 10 conan conan  4096 Apr 23 14:36 jdk16

    初始化cassandra
    
    ~ cd /home/conan/toolkit/cassandra125
    
    #设置Cassandra数据文件目次
    ~ vi conf/cassandra.yaml
    
    data_file_directories:
        - /var/lib/cassandra/data
    commitlog_directory: /var/lib/cassandra/commitlog
    saved_caches_directory: /var/lib/cassandra/saved_caches

    目次的先容:
    data_file_directories:为数据文件目次
    commitlog_directory:为日志文件目次
    saved_caches_directory:为缓存文件目次

    确认操纵系统中,这几个目次已被建设。
    同时确认/var/log/cassandra/目次,对付cassandra是可写的。


    
    ~ sudo mkdir -p /var/lib/cassandra/data
    ~ sudo mkdir -p /var/lib/cassandra/saved_caches
    ~ sudo mkdir -p /var/lib/cassandra/commitlog
    ~ sudo mkdir -p /var/log/cassandra/
    
    ~ sudo chown -R conan:conan /var/lib/cassandra
    ~ sudo chown -R conan:conan /var/log/cassandra/
    
    ~ ll /var/lib/cassandra
    drwxr-xr-x  2 conan conan 4096 Jun  1 06:21 commitlog/
    drwxr-xr-x  2 conan conan 4096 Jun  1 06:21 data/
    drwxr-xr-x  2 conan conan 4096 Jun  1 06:21 saved_caches/

    配置情况变量

    
    ~ sudo vi /etc/environment
    CASSANDRA_HOME=/home/conan/toolkit/cassandra125
    
    #让变量生效
    ~ . /etc/environment
    
    #查察情况变量
    ~ export |grep /home/conan/toolkit/cassandra125
    declare -x CASSANDRA_HOME="/home/conan/toolkit/cassandra125"
    declare -x OLDPWD="/home/conan/toolkit/cassandra125"
    declare -x PWD="/home/conan/toolkit/cassandra125/bin"
    

    启动cassandra

    
    ~ bin/cassandra -f
    #注:-f参数是绑定到console,不加-f则是靠山启动。
    
    ~ jps
    19971 CassandraDaemon
    20440 Jps
    

    #p#分页标题#e#

    打开客户端

    
    ~ bin/cassandra-cli
    
    Connected to: "Test Cluster" on 127.0.0.1/9160
    Welcome to Cassandra CLI version 1.2.5
    
    Type 'help;' or '?' for help.
    Type 'quit;' or 'exit;' to quit.
    
    [[email protected]]
    

    单节的cassandra,我们已经乐成能安装好了。

    Cassandra的集群安装请参考:Cassandra单集群尝试2个节点

    3. RCassandra安装

    文字说明部门:
    R语言的版本请利用2.15.3,下面先容如何安装R。

    首先,增加一个软件源deb http://mirror.bjtu.edu.cn/cran/bin/linux/ubuntu precise/。
    更新及指定安装2.15.3-1precise0precise1版本。

    启动R措施,安装RCassandra包。

    代码部门
    测试情况R语言的版本是:2.15.3

    安装R语言

    
    ~  sudo vi /etc/apt/sources.list
    deb http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse
    deb-src http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse
    deb http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted
    deb-src http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted
    deb http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted
    deb http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted
    deb-src http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted
    deb http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted
    deb-src http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted
    deb-src http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted
    deb http://mirror.bjtu.edu.cn/cran/bin/linux/ubuntu precise/
    

    更新apt-get源

    
    ~ sudo apt-get update
    
    #声明安装2.15.3的版本
    ~ sudo apt-get install r-base-core=2.15.3-1precise0precise1
    
    #启动R
    ~ R
    R version 2.15.3 (2013-03-01) -- "Security Blanket"
    Copyright (C) 2013 The R Foundation for Statistical Computing
    ISBN 3-900051-07-0
    Platform: x86_64-pc-linux-gnu (64-bit)
    
    R is free software and comes with ABSOLUTELY NO WARRANTY.
    You are welcome to Redistribute it under certain conditions.
    Type 'license()' or 'licence()' for distribution details.
    
      Natural language support but running in an English locale
    
    R is a collaborative project with many contributors.
    Type 'contributors()' for more information and
    'citation()' on how to cite R or R packages in publications.
    
    Type 'demo()' for some demos, 'help()' for on-line help, or
    'help.start()' for an HTML browser interface to help.
    Type 'q()' to quit R.
    

    安装RCassandra

    
    > install.packages('RCassandra')
    > library(RCassandra)
    

    4. RCassandra函数库

    文字说明部门
    列出有的RCassandra支持的函数,只有17个。记得rredis有100个函数,rmongodb有153个函数。对比之下RCassandra太轻量了。

    可是这17个函数,并没有包围Cassandra的所有操纵,就连一些的根基的操纵都没有函数支持,要在呼吁行处理惩罚。不知道是什么原因?!但愿RCassandra能继承成长,完善没有实现的成果函数。

    不支持的常用操纵:
    建设keyspaces,删除keyspaces
    建设列族,删除列族
    删除一行
    删除一行的某列数据

    下面列出了这17个函数,并与Cassandra的呼吁做了比拟说明。

    代码部门
    共有17个函数

    
    RC.close               RC.insert
    RC.cluster.name        RC.login
    RC.connect             RC.mget.range
    RC.consistency         RC.mutate
    RC.describe.keyspace   RC.read.table
    RC.describe.keyspaces  RC.use
    RC.get                 RC.version
    RC.get.range           RC.write.table
    RC.get.range.slices
    

    Cassandra和RCassandra的根基操纵比拟:

    
    #毗连到集群
    Cassandra: connect 192.168.1.200/9160;
    RCassandra: conn<-RC.connect(host="192.168.1.200",port=9160)
    
    #查察当前集群名字
    Cassandra: show cluster name;
    RCassandra: RC.cluster.name(conn)
    
    #列出当前集群所有keyspaces
    Cassandra: show keyspaces;
    RCassandra: RC.describe.keyspaces(conn)
    
    #查察DEMO的keyspace
    Cassandra: show schema DEMO;
    RCassandra: RC.describe.keyspace(conn,'DEMO')
    
    #选择DEMO的keyspace
    Cassandra: use DEMO;
    RCassandra: RC.use(conn,'DEMO')
    
    #配置一致性级别
    Cassandra: consistencylevel as ONE;
    RCassandra: RC.consistency(conn,level="one")
    
    #插入数据
    Cassandra:set Users[1][name] = scott;
    RCassandra:RC.insert(conn,'Users','1', 'name', 'scott')
    
    #插入数据框
    Cassandra:NA
    RCassandra:RC.write.table(conn, "Users", df)
    
    #读取列族所有数据
    Cassandra: list Users;
    RCassandra: RC.read.table(conn,"Users")
    
    #读取数据
    Cassandra: get Users[1]['name'];
    RCassandra:RC.get(conn,'Users','1', c('name'))
    
    #退出毗连
    Cassandra: exit; quit;
    RCassandra: RC.close(conn)
    

     

    5. RCassandra根基利用操纵

    文字说明部门
    先容RCassandra的根基函数操纵,以iris的数据集为例,先容了如何操作RCassandra操纵Cassandra数据库。

    #p#分页标题#e#

    代码部门

    
    #安装RCassandra
    install.packages('RCassandra')
    
    #加载RCassandra类库
    library(RCassandra)
    
    #成立处事器毗连
    conn<-RC.connect(host="192.168.1.200")
    
    #当前集群的名字(2个节点集群的名字)
    RC.cluster.name(conn)
    [1] "case1"
    
    #当前协议的版本
    RC.version(conn)
    [1] "19.36.0"
    
    #列出所有keyspaces设置信息
    RC.describe.keyspaces(conn)
    
    #列出叫的DEMO的keyspaces设置信息
    RC.describe.keyspace(conn, "DEMO")
    
    #RCassandra是不能建设的列族的,提前通过Cassandra呼吁建设一个列族
    #[[email protected]] create column family iris;
    
    #插入iris数据
    head(iris)
      Sepal.Length Sepal.Width Petal.Length Petal.Width Species
    1          5.1         3.5          1.4         0.2  setosa
    2          4.9         3.0          1.4         0.2  setosa
    3          4.7         3.2          1.3         0.2  setosa
    4          4.6         3.1          1.5         0.2  setosa
    5          5.0         3.6          1.4         0.2  setosa
    6          5.4         3.9          1.7         0.4  setosa
    
    #iris是一个data.frame
    RC.write.table(conn, "iris", iris)
    
    attr(,"class")
    [1] "CassandraConnection"
    
    #查察第1行,Sepal.Length列和Species的值
    RC.get(conn, "iris", "1", c("Sepal.Length", "Species"))
               key  value           ts
    1 Sepal.Length    5.1 1.372881e+15
    2      Species setosa 1.372881e+15
    #注:ts是时间戳
    
    #查察第1行
    RC.get.range(conn, "iris", "1")
               key  value           ts
    1 Petal.Length    1.4 1.372881e+15
    2  Petal.Width    0.2 1.372881e+15
    3 Sepal.Length    5.1 1.372881e+15
    4  Sepal.Width    3.5 1.372881e+15
    5      Species setosa 1.372881e+15
    
    #查察
    r <- RC.get.range.slices(conn, "iris")
    class(r)
    [1] "list"
    
    r[[1]]
               key  value           ts
    1 Petal.Length    1.7 1.372881e+15
    2  Petal.Width    0.4 1.372881e+15
    3 Sepal.Length    5.4 1.372881e+15
    4  Sepal.Width    3.9 1.372881e+15
    5      Species setosa 1.372881e+15
    
    rk <- RC.get.range.slices(conn, "iris", limit=0)
    y <- RC.read.table(conn, "iris")
    y <- y[order(as.integer(row.names(y))),]
    
    head(y)
      Petal.Length Petal.Width Sepal.Length Sepal.Width Species
    1          1.4         0.2          5.1         3.5  setosa
    2          1.4         0.2          4.9         3.0  setosa
    3          1.3         0.2          4.7         3.2  setosa
    4          1.5         0.2          4.6         3.1  setosa
    5          1.4         0.2          5.0         3.6  setosa
    6         
    
    

    不支持的常用操纵

  • 建设keyspaces,删除keyspaces
  • 建设列族,删除列族
  • 删除一行
  • 删除一行的某列数据
  • 6. RCassandra利用案例

    文字说明部门
    通过一个业务需求的例子,加深我们对RCassandra的认识。下面是一个很是简朴的业务场景。

    业务需求:
    1. 建设一个Users列族,包括name,password两列
    2. 在已经数据的环境下,有动态增加一个新列age

    代码部门
    在Cassandra呼吁行,建设列族Users

    
    [[email protected]] create column family Users
    ...     with key_validation_class = 'UTF8Type'
    ...     and comparator = 'UTF8Type'
    ...     and default_validation_class = 'UTF8Type';
    
    89a2fb75-f7d0-399e-b017-30a974b19f4a
    

    RCassandra插入数据,包括name,password两列

    
    > df<-data.frame(name=c('a1','a2'),password=c('a1','a2')) > print(df)
      name password
    1   a1       a1
    2   a2       a2
    
    #插入数据
    > RC.write.table(conn, "Users", df)
    attr(,"class")
    [1] "CassandraConnection"
    
    #查察数据
    > RC.read.table(conn,"Users")
         name password
    2    a2       a2
    1    a1       a1
    
    #新插入: 一行KEY=1234,并增加age列
    > RC.insert(conn,'Users','1234', 'name', 'scott')
    > RC.insert(conn,'Users','1234', 'password', 'tiger')
    > RC.insert(conn,'Users','1234', 'age', '20')
    
    #查察数据
    > RC.read.table(conn,"Users")
         age  name password
    1234  20 scott    tiger
    2     NA    a2       a2
    1     NA    a1       a1
    
    #修改: KEY=1的行中,name=a11, age=12
    > RC.insert(conn,'Users','1', 'name', 'a11')
    > RC.insert(conn,'Users','1', 'age', '12')
    
    #查察数据
    > RC.read.table(conn,"Users")
         age  name password
    1234  20 scott    tiger
    2     NA    a2       a2
    1     12   a11       a1
    
    

    7. Cassandra的消灭

    越来越多的基于cassandra构建的应用,开始向HBase迁移。

    Cassandra的消灭,在技能上大概存在的一些原因:

    1. 读的机能太慢

    无中心的设计,造成读数据时通过逆熵做计较,机能损耗很大,甚至会严重影响处事器运作。

    2. 数据同步太慢(最终一致性延迟大概很是大)

    #p#分页标题#e#

    由于无中心设计,要靠各节点通报信息。彼此发通知奉起诉态,假如副本集有多份,个中又呈现节点有宕机的环境,那么做到数据的一致性,延迟大概很是大,效率也很低的。

    3. 用插入和更新取代查询,缺乏机动性,所有查询都要求提前界说好。

    与大大都数据库为读优化差异,Cassandra的写机能理论上是高于读机能的,因此很是适合流式的数据存储,尤其是写负载高于读负载的。与
    HBase比起来,它的随时机识趣能要高许多,但不是很擅长区间扫描,因此可以作为HBase的即时查询缓存,由HBase举办批量的大数据处理惩罚,由
    Cassandra提供随机查询的接口

    4. 不支持直接接入Hadoop,不能实现MapReduce。

    此刻大数据的代名词就是hadoop,做为海量数据的框架不支持hadoop及MapReduce,就将被代替。除非Cassandra可以或许给出其
    他的定位,可能海量数据办理方案。DataStax公司,正在用Cassandra重够HDFS的文件系统,不知道是否可以乐成。

    让我等候Cassandra将来的成长吧!

      关键字:

    在线提交作业