`

Cassandra的数据分布情况测试

    博客分类:
  • J2EE
 
阅读更多

1、规划种子节点ip和Token值的对应

 

4个种子节点ip
	192.168.0.231
	192.168.0.232
	192.168.0.233
	192.168.0.234

	进入python,计算Token
	#192.168.0.231对应的Token为
	>>> print 2 ** 127 / 4 * 1 
	42535295865117307932921825928971026432

	#192.168.0.232对应的Token为
	>>> print 2 ** 127 / 4 * 2
	85070591730234615865843651857942052864

	#192.168.0.233对应的Token为
	>>> print 2 ** 127 / 4 * 3
	127605887595351923798765477786913079296

	#192.168.0.234对应的Token为
	>>> print 2 ** 127 / 4 * 4
	170141183460469231731687303715884105728

 

 

或者

import java.math.BigInteger;

public class InitToken {
	public static void main(String[] args) {
		int nodes = 4;//节点的总数量
		for (int i = 1; i <= nodes; i++) {
			BigInteger hs = new BigInteger("2");
			BigInteger res = hs.pow(127);
			BigInteger div = res.divide(new BigInteger(nodes + ""));
			BigInteger fin = div.multiply(new BigInteger(i + ""));
			System.out.println(fin);
		}

	}

}
 

 

 

2、配置cassandra的每个节点

      a、cassandra/bin/cassandra.in.sh配置本机的jdk安装路径

JAVA_HOME=/usr/local/jdk6
 

      b、cassandra/conf/cassandra.yaml

                cluster_name: 'ots'
		commitlog_directory: cassandra/data/commitlog
		saved_caches_directory: cassandra/data/saved_caches
		data_file_directories:
    			- cassandra/data/data
		#配置种子节点ip列表
		- seeds: "192.168.0.231,192.168.0.232,192.168.0.233,192.168.0.234"
		#上面的配置基本保持一致

		#当前节点的ip(这个ip主要是用来节点和节点之间通讯的ip)
		listen_address: 192.168.0.231
		#当前节点的ip(这个ip主要是用来相应客户端操作的ip)
		rpc_address: 192.168.0.231

 

3、启动每个节点的cassandra

nohup cassandra/bin/cassandra -f &

 

4、设置每个节点的Token值

    进入每个节点,把启动时默认生成的Token值改变为我们规划的Token值
    或者直接在配置文件cassandra.yaml中指定Token值来规划,就不用下面的动态规划了。
    如下:

          ./bin/nodetool -h 192.168.0.231 -p 7199 move 42535295865117307932921825928971026432
	 ./bin/nodetool -h 192.168.0.232 -p 7199 move 42535295865117307932921825928971026432
	。。。。。。。。。。。。。。。。。。。

 5、初始化数据存储结构

        客户端连接到集群中的某一个节点,初始化数据结构。运行初始化脚本,如下

 

./bin/cassandra-cli -h 192.168.0.231 -p 9160

 参考json数据结构模型

{
            "key":{
                     "name":"140 bytes",
                     "cardno":"140 bytes",
                     "ticketno":"140 bytes",
                     "traindate":"140 bytes",
                    "startstation":"140 bytes",
                     "endtstation":"140 bytes",
                     "seatinfo":"140 bytes",
                   }
        }
 

        具体脚本:

                create keyspace user_train;
		use user_train;
		create column family users with comparator=UTF8Type 
		and column_metadata=[{column_name:name,validation_class:UTF8Type,index_type:KEYS},
		{column_name:cardno,validation_class:UTF8Type,index_type:KEYS},
		{column_name:ticketno,validation_class:UTF8Type,index_type:KEYS},
		{column_name:traindate,validation_class:UTF8Type},
		{column_name:startstation,validation_class:UTF8Type},
		{column_name:endtstation,validation_class:UTF8Type},
		{column_name:seatinfo,validation_class:UTF8Type}];

		#分发策略,主要是将存放到一个节点的一份数据,分发到另一个节点一份,节点的选取由Cassandra和配置文件决定。
		update keyspace user_train with strategy_options = {datacenter1:2};

 

5、使用hector客户端api操作cassandra数据库,观察数据分布

 

插入数据的时候观察每个节点的数据分布是否均衡。
    首先需要登录每个节点,不停的使用如下命令,刷新数据的分布情况。

./bin/nodetool -h 192.168.0.232 -p 7199 ring 
 


    写入数据代码

Cluster cluster = HFactory
                .getOrCreateCluster("ots",
                        "192.168.0.231:9160," +
                        "192.168.0.232:9160," +
                        "192.168.0.233:9160," +
                        "192.168.0.234:9160");

        Keyspace keyspace = HFactory.createKeyspace("user_train", cluster);

        String ktest = "";
        for (int i = 0; i < 120; i++) {
            ktest += "x";
        }
        try {
            Mutator<String> mutator = HFactory.createMutator(keyspace,
                    stringSerializer);
            long startTime = System.currentTimeMillis();
            for (int i = 0; i < 10000*10; i++) {
                mutator.addInsertion("username" + i, "users",
                        HFactory.createStringColumn("name", ktest+"username" + i))
                        .addInsertion(
                                "username" + i,
                                "users",
                                HFactory.createStringColumn("cardno", ktest+"cardno"
                                        + i))
                        .addInsertion(
                                "username" + i,
                                "users",
                                HFactory.createStringColumn("ticketno",
                                        ktest+"ticketno" + i))
                        .addInsertion(
                                "username" + i,
                                "users",
                                HFactory.createStringColumn("traindate",
                                        ktest+"traindate" + i))
                        .addInsertion(
                                "username" + i,
                                "users",
                                HFactory.createStringColumn("startstation",
                                        ktest+"startstation" + i))
                        .addInsertion(
                                "username" + i,
                                "users",
                                HFactory.createStringColumn("endtstation",
                                        ktest+"endtstation" + i))
                        .addInsertion(
                                "username" + i,
                                "users",
                                HFactory.createStringColumn("seatinfo",
                                        ktest+"seatinfo" + i));
                if (i % 500 == 0) {
                    mutator.execute();
                    System.out.println(i);
                }
            }
            mutator.execute();
            System.out.println("insert time: " + (System.currentTimeMillis() - startTime));
        } catch (HectorException he) {
            he.printStackTrace();
        }
        cluster.getConnectionManager().shutdown();
   
分享到:
评论

相关推荐

    ycsb cassandra 压力测试工具

    它提供了多种工作负载模型,模拟实际应用中的读写操作比例、数据分布等场景。通过 YCSB,测试者可以设置不同的参数,如并发用户数量、操作类型、记录大小等,以适应各种实际环境。 ### Cassandra 简介 Apache ...

    Cassandra技术详解 操作与测试报告

    - Cassandra允许开发者在不预先定义具体结构的情况下进行数据存储和检索。这意味着可以随时动态地添加或删除字段,而无需停机或重新组织数据表结构。这种灵活性非常适合那些数据结构经常变化的应用场景。 2. **...

    MariaDB Cassandra interoperability Cassandra Storage Engine in MariaDB

    - 无需使用CQL,而使用更熟悉的SQL语句来操作Cassandra数据。 - 提供了NoCQL运动的起点,意味着用户可以不必学习新的查询语言,直接利用现有的SQL技能。 #### 4. **数据映射** 在使用Cassandra存储引擎时,数据...

    cassandra教程

    读操作会路由到特定的节点进行,这依赖于数据分布策略和一致性级别。 ### API Cassandra提供了多种API供开发者使用,包括Thrift和CQL(Cassandra Query Language),便于与应用程序交互。 ### 性能测试和比较 为了...

    cassandra详解

    性能基准测试显示,Cassandra在大规模集群中表现出色,能够处理大量数据和高并发请求。配置选项丰富,允许用户根据硬件和工作负载优化系统性能。 总的来说,Cassandra是一个设计用于处理大数据量、高并发场景的...

    Cassandra write performance test (Why cassandra's write is so slow)

    1. **数据分布和副本策略**:Cassandra使用一致性哈希来分发数据,每个节点负责一部分的数据。如果副本数量设置得过高,可能会增加写入的复杂性,因为数据需要同步到多个节点,从而降低了写入性能。 2. **硬件限制*...

    cassandra-trunk

    1. **分布式架构**:Cassandra采用了基于Google的Bigtable设计,通过分区和复制策略实现跨多台机器的数据分布,支持水平扩展。 2. **Gossip协议**:节点间使用Gossip协议来传播状态信息,以检测和处理故障,无需...

    DevCenter--Cassandra

    3. **一致性哈希**:Cassandra使用一致性哈希算法来实现数据的分布,这允许数据均匀分布在各个节点上,减少热点并提高性能。 4. **Gossip协议**:节点间通信采用Gossip协议,用于传播集群状态信息,如节点的加入、...

    cassandra-benchmark:Cassandra 基准测试工具

    4. **一致性哈希**:用于数据分布,确保负载均衡且减少跨节点通信。 5. ** tombstone 清理**:有效地处理数据删除,避免因删除操作导致的性能下降。 **二、Cassandra 基准测试的重要性** 1. **性能评估**:测试...

    一组Cassandra工具,用于备份、恢复、监控、修复和管理ApacheCassandraDatastax集群_Jinj.zip

    Apache Cassandra 是一个分布式NoSQL数据库系统,常用于处理大规模数据分布。它被设计为高度可扩展,能够处理PB级别的数据,并提供高可用性和容错性。Cassandra Datastax是Datastax公司对Apache Cassandra的商业支持...

    cassandra 图形化工具

    - **图表展示**:以图表形式展示查询结果,更直观地理解数据分布和关联。 3. **使用步骤**: - 启动DevCenter应用程序。 - 创建新的连接配置,输入Cassandra集群的相关信息。 - 连接到Cassandra集群,查看节点...

    cassandra Example的一点理解及疑问

    但我们可以推测,作者可能在博客中详细阐述了他对Cassandra API的理解,包括数据模型(如行、列族、超级列)、数据分布和一致性策略等方面。此外,他可能还讨论了Cassandra的拓扑结构,如节点通信、数据复制和故障...

    yardstick-cassandra:Apache Cassandra 的基准测试

    在 "Yardstick-Cassandra" 中,我们可以找到一系列的测试用例,这些用例模拟了实际应用中的常见工作负载,如读写操作、数据分布、故障恢复等。通过这些测试,用户可以了解 Cassandra 在特定配置下的性能边界,以便...

    windows系统下cassandra的安装方法.zip

    Apache Cassandra是一款开源的分布式数据库系统,设计用于处理大量数据分布在全球多个数据中心的环境中。它采用无主节点架构,提供高可用性和可扩展性,适合大规模数据存储和实时查询应用。 **二、下载Cassandra** ...

    datastax-cassandra

    每个节点都可以成为数据中心的一部分,数据根据分区键分布在不同的节点上,保证了数据分布的均匀性和高可用性。 4. **一致性与可用性**:Cassandra遵循CAP定理,允许用户在一致性(Consistency)和可用性...

    Python-CCM一个脚本可以在本机上轻松创建和销毁ApacheCassandra集群

    1. **创建集群**:通过简单的命令,你可以创建一个包含任意数量节点的Cassandra集群,这些节点可以分布在多个数据中心或 racks 中。 2. **启动和停止节点**:你可以独立启动或停止集群中的任何节点,模拟节点故障或...

    apache-cassandra-0.5.1-src.tar.gz

    Cassandra 的设计灵感来源于Google的Bigtable和Amazon的Dynamo,它采用了一种无中心架构,所有节点都是平等的,可以自动复制和分布数据,以确保容错性和高吞吐量。0.5.1 版本是Cassandra发展历史上的一个重要里程碑...

    cassandra-data-filler:适用于Apache Cassandra的智能数据填充器

    Apache Cassandra 是一个分布式NoSQL数据库系统,被设计用于处理大规模数据分布于多个数据中心的情况,具有高可用性、可扩展性和高性能的特点。Cassandra 数据填充器是针对这种数据库系统的工具,用于在测试、演示...

    nosql-apache-cassandra:Apache Cassandra中的数据建模

    Apache Cassandra 是一个分布式NoSQL数据库系统,被设计用于处理大规模数据分布在全球范围内的集群上,具有高可用性、可扩展性和高性能的特点。在Cassandra中,数据建模是设计高效查询和存储策略的关键步骤,它涉及...

Global site tag (gtag.js) - Google Analytics