Cassandra杂记4-综合

资料

官方WIKI

Datastax document

Cassandra WIki

Cassandra是一个高扩展性, 一致性, 分布式, Key-value 式的数据库. Cassandra 从Dynamo和Google的BigTable学习了一些分布式系统的技术. 和Dynamo一样, Cassandra具有一致性. 如BigTable, Cassandra 又提供了基于列族的数据模型, 比一般的Key-value系统更加丰富.

Facebook 在2008年的时候把Cassandra开源了, 由Avinash Lakshman( Dynamo的一个作者)和Prashant Malik( Facebook 工程师)设计. 在很多方面, Cassandra跟 Dynamo和 BigTable 是很类似, 紧密的. Facebook 已经在使用 Cassandra了, 但Cassandra 仍然还在持续的开发当中

General Infomation

开发人员与操作人员手册

高级配置

  • 数据库配置
  • 创建一个多节点集群
  • 操作
  • 内存阀值和其它的性能调节
  • 硬件
  • 大数据集的设计

客户端开发API文档

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

一般来说学习某样东西, 我们都是找个范例照着范例先做一遍. 之后再可以通过资料, 自己使用积累去学习掌握它. 对于Cassandra, 我也不例外. 先按照官方文档部署一个简单的单节点服务出来玩一玩.

Step 0: 安装JAVA环境, JDK 1.6或以上

Step 1: 下载 Cassandra

Step 2: 基本配置

配置文件存放在<安装目录>/conf下面

Step 2.1: 配置cassandra需要使用的文件夹, 打开conf/cassandra.yaml文件

data_file_directories 修改成Windows下你想存放数据的路径, 如就存放到<安装目录>/data文件夹下. 注意前面的-是不能省略的

    data_file_directories:

    - C:\Program Files (x86)\apache-cassandra-1.2.3\data

commitlog_directory 修改成Windows下你想存放Log的路径

saved_caches_directory 修改成Windwos下你想存放cache的路径

Step 2.2: 打开conf/log4j-server.properties

log4j.appender.R.File=<安装目录>/system.log

确保这些文件夹是存在的, 且有写入的权限.

Step 2.3: 配置内存( 可选)

cassandra默认分配内存是基于你物理内存大小的, 为物理内存的1/4到1/2. 如果你想自己配置内存使用大小, 可以打开 conf/cassandra-env.sh, 修改如下配置

#MAX_HEAP_SIZE="4G"
#HEAP_NEWSIZE="800M"

一般经验来说, 你应该设置HEAP_NEWSIZE为MAX_HEAP_SIZE的1/4大小. 如果你遇到OutOfMemory的异常或者大量的GCs, 你可以尝试调大这两个值来解决这个问题.

Step 3: 启动 cassandra

到BIN目录下双击启动批处理文件cassandra.bat

只要把窗口关掉就可以关闭cassandra服务了

Step 4: 使用 cassandra-cli

cassandra-cli是一个与cassandra服务交互的命令行的接口, 可以执行创建KEYSPACE, COLUMN FAMILY, 擦入数据, 查询数据等操作.

运行在BIN目录下的cassandra-cli.bat就可以打开客户端了。cassanra-cli.bat是支持参数的,在命令行下,中转到BIN目录,运行

cassandra-cli.bat help;

可以查看如何传入参数,比如cassandra.yaml的默认配置的rpc的IP与端口分别是localhost, 9160。如果你把localhost改成本机的IP(非127.0.0.1),那你双击cassandra-cli.bat就无法连接到服务器了。这时你可以使用connect IP/PORT来连接到正确的IP与端口上。你也可以写一个批

处理:

cassandra-cli.bat -h 16.158.81.54 -u lewis -pw lewis

启动后可以看到如下信息:

注意cli的命令是以;为结束的.

Connected to: "Test Cluster" on 127.0.0.1/9160
Welcome to Cassandra CLI version 1.0.7

Type 'help;' or '?' for help.
Type 'quit;' or 'exit;' to quit.

[default@unknown] 

可以使用HELP;命令查看所有支持的命令, 以及命令的使用方法. 如:

HELP GET;

接下来我们就来操作一下cassandra数据库

首先, 创建一个Keyspace:

create keyspace DEMO; 回车执行

第二步, 指名要操作的keyspace

use DEMO; 回车执行

第三步, 创建一个叫Users的列族

[default@DEMO]create column family Users                
...     with key_validation_class = 'UTF8Type'    
...     and comparator = 'UTF8Type'               
...     and default_validation_class = 'UTF8Type';

好了, 接下来你就可以往里面存数据了

[default@DEMO] set Users[1234][name] = scott;
Value inserted.
Elapsed time: 10 msec(s).
[default@DEMO] set Users[1234][password] = tiger;
Value inserted.
Elapsed time: 10 msec(s).

取数据如下:

[default@DEMO] get Users[1234];
=> (column=name, value=scott, timestamp=1350769161684000)
=> (column=password, value=tiger, timestamp=1350769245191000)

Returned 2 results.
Elapsed time: 67 msec(s).

配置多节点集群

刚才的步骤只是建立了一个单节点的cassandra. 其实也是一个cassandra集群, 但只包含一个节点而已. 通过添加更多的节点, 就可以让它成为一个多节点的集群了.

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

权限管理

  • 内部权限管理:使用帐号与密码登录
  • 对象权限管理:基于GRANT/REVOKE范例
  • 客户端到节点的访问权限管理:使用SSL

内部权限管理

  • 配置内部权限管理

1. 修改cassandra.yaml中authentication相关的两个配置节点,分别修改为

authenticator: org.apache.cassandra.auth.PasswordAuthenticator 

authorizer:org.apache.cassandra.auth.CassandraAuthorizer

2. 配置dse_auth keyspace的replication: 你需要配置dse_auth keyspace的replication factor来预防一个潜在的登录问题。不要使用默认的replication factor: 1,如果你配置使用了如下权限设置:

authenticator: com.datastax.bdp.cassandra.auth.KerberosAuthenticator

authenticator: com.datastax.bdp.cassandra.auth.PasswordAuthenticator

authorizer: com.datastax.bdp.cassandra.auth.CassandraAuthorizer

在一个多节点的集群中,使用默认值1会阻止用户登录当存储用户数据的节点DOWN了的话。所以与dse_auth相关的Query,cassandra都是使用QUORUM的一致性级别的。

修改步骤如下:

1. 打开cassandra.yaml

2. 修改auth_replication_options 节点,如:

Example for SimpleStrategy:

		auth_replication_options:
   replication_factor: 3

Example for NetworkTopologyStrategy:

		auth_replication_options:
   DC1: 3
   DC2: 3
3. 如果修改已经存在的集群要注意以下几点:确保每个节点中的配置文件都有修改,重启所有节点,在每个节点上运行nodetool repair

NOTE:
Cassandra: dse_auth.users

PasswordAuthenticator: hashed passwords 存于 dse_auth.credentials

CassandraAuthorizer: 权限存于dse_auth.permissions

  • 				使用Authentication
    

当你完成以上的权限相关配置后就不能使用空的用户名与密码使用CQLSH或者CASSSANDRA-CLI了。可以先使用超级用户来登录 :<客户端启动命令> -u cassandra -p cassandra.

这里要注意的是,你需要用HELP命令查看一下确实的命令使用方式,官方文档虽然说是-u -p, 但实际上我使用下来是-u -pw, -p是-port。因为cassandra版本在不段的更新中,每次更新你都应该去看一下安装目录里的NEWS,看一下有哪些变动。

-u cassandra -pw cassandra 是默认的超级管理员。

  • 更改超级用户的密码

1. 创建一个新的超级用户,用户名不能再是cassandra

2. 登录这个超级用户

3. 更新cassandra用户的密码,并不要再使用这个帐户了

4. 取消掉cassandra用户超级管理员的角色

  • 权限相关命令: 配置好之后,就可以使用相关命令来使用权限管理
  1. ALTER USER
  2. CREATE USER
  3. DROP USER
  4. LIST USERS
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

cassandra配置集群还是比较简单的。步骤如下:

  • 打开cassandra.yaml文件,
  1. 修改cluster_name:'Test Cluster'为你想要的集群名字
  2. 去掉屏蔽num_tokens:256,这个值是计算负载用的,比如你集群有2个节点,都配的是256,那么两台机子就是平分压力各为50%
  3. 修改seeds:"localhost"为本机IP,这个seeds是个什么东西呢?比方说,一个数据中心有很多机器,你需要一个或多个来做分配,统筹,与其它数据中心交互,这个就是seed。IP与IP之间用逗号隔开。
  4. 把listen_address等默认配置为localhost的全改为本机IP
  5. 修改endpoint_snith为PropertyFileSnith
  • 打开conf\cassandra-topology.properties

配置IP与数据中心的关系,如我的两台机器为

 

16.158.81.54=dc1:rac1
16.158.83.70=dc2:rac1
 
#再把其它不需要的IP映射删除掉
 
这里为什么用小写呢!因为我在使用CQLSH与DRIVE的时候,发现在不支持大小写,全会被转成小写。如果你配成DC1:RAC1的形式,那么在查询数据、插入数据时是会找不到节点。
这里再说一下cassandra的一个数据模型与执行方式:
比如你创建一个keyspace test, 在没有创建表的时候,test这个文件夹并不会创建在data目录下面。当你创建第一个表testtable完成后,那么cassandra服务就会在Data目录下面创建一个叫test的文件夹,在test文件夹下创建一个testtable文件夹。这个过程是不依赖于什么snitch呀,什么replication呀。所以基本上无论怎么配,创建、删除keyspace或table都能成功的,但插入数据、查询数据就不一样了。比如,你用DC1:1的NetworkTopologyStrategy创建好一个keyspace与table之后,想要插入数据,那么cassandra是怎么操作的呢?首先取到keyspace创建时所设置的DC, 这里设置为DC1,然后用DC1去配置文件中找映射,而这个步骤是区分大小写的,于是就会找不到DC1的IP映射,从而产生:“一个或多个节点不可用”的错误信息。
 
  • 确保所有cassandra节点配置都做了如上的更新操作,并删除所有节点中data目录, commitlog目录中的文件

这里我为什么会说要把commitlog里的文件也删除呢?主要是这些文件中存了当前节点的token。有的人贪快可能会想,既然配置一样,把cassandra整个文件夹COPY到另一台机器上,启动就建好集群了。这时你启动多个COPY的服务之后,会发现有节点加入不了的,并可以在运行窗口看到关于token相同的错误,原因就是commitlog中存了token而且好像不能更新,cassandra官方给出的结决办法就是把commitlog中的文件删除,之后当cassandra服务启动的时候就会重新生成token了。

  • 逐一启动cassandra服务,节点就会自动加入集群了
  • 使用BIN目录下的nodetool并加参数 status查看建立集群是否成功
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

cassandra cluster加节点

cassandra比较智能,需要做的工作不多。

A:10..1 单节点cluster

B:10..2 需要加入的新机器

步骤:

  1. 首先将A的程序目录都拷贝到B上
  2. 在B上修改conf/cassandra.yaml,有如下要点:
    1. cluster_name 这个是自动发现集群的,必须和A一致
    2. initial_token 这个各节点不同,cassandra share bin里有个caculater可以算的
    3. seeds 种子服务器,设为A
    4. listen_address, rpc_address 设为B ip
  3. 建立数据目录,根据yaml里的来,主要是data和commitlog的目录
  4. 启动B,观察一段时间,用nodetool status验证集群状态。也可以用nodetool status <keyspace>来查看指定的表空间复制状态
  5. 集群架好后,两边操作数据,相互验证

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用spark-submit提交Spark应用程序的两个示例: 引用: ```shell spark-submit \ --master yarn \ --name "OnLineLogAnalysisV3" \ --conf "spark.scheduler.mode=FAIR" \ --conf "spark.sql.codegen=true" \ --num-executors 3 \ --executor-cores 1 \ --executor-memory 2G \ --driver-class-path /data/aaron/software/mysql-connector-java-5.1.27-bin.jar \ --class com.onlinelog.www.OnLineLogAnalysisV3 \ /data/aaron/lib/loganalysis/0801/loganalysis-1.0-SNAPSHOT-jar-with-dependencies.jar ``` 引用: ```shell spark-submit \ --master yarn \ --name "OnLineLogAnalysisV3" \ --conf "spark.scheduler.mode=FAIR" \ --conf "spark.sql.codegen=true" \ --num-executors 3 \ --executor-cores 1 \ --executor-memory 2G \ --jars /data/aaron/software/mysql-connector-java-5.1.27-bin.jar \ --class com.onlinelog.www.OnLineLogAnalysisV3 \ /data/aaron/lib/loganalysis/0801/loganalysis-1.0-SNAPSHOT-jar-with-dependencies.jar ``` 这两个示例都是使用spark-submit命令来提交Spark应用程序。其中,`--master yarn`指定了Spark应用程序的运行模式为YARN模式,`--name "OnLineLogAnalysisV3"`指定了应用程序的名称为"OnLineLogAnalysisV3",`--conf "spark.scheduler.mode=FAIR"`指定了调度器模式为FAIR模式,`--conf "spark.sql.codegen=true"`指定了Spark SQL的代码生成为开启状态。 其他参数包括`--num-executors`指定了执行器的数量,`--executor-cores`指定了每个执行器的核心数,`--executor-memory`指定了每个执行器的内存大小。`--driver-class-path`指定了驱动程序的类路径,`--jars`指定了需要加载的外部JAR包。 最后,`--class com.onlinelog.www.OnLineLogAnalysisV3`指定了要运行的主类,`/data/aaron/lib/loganalysis/0801/loganalysis-1.0-SNAPSHOT-jar-with-dependencies.jar`指定了要提交的应用程序的JAR包路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值