Cassandraのデータ分布状況テスト
7706 ワード
1、計画シードノードipとToken値の対応
または
2、cassandraの各ノードを配置する
a、cassandra/bin/cassandra.in.sh自機のjdkインストールパスの構成
b、cassandra/conf/cassandra.yaml
3、各ノードのcassandraを起動する
4、各ノードのToken値を設定する
各ノードに入り、起動時にデフォルトで生成されたToken値を計画したToken値に変更するか、プロファイルcassandraに直接変更します.yamlでToken値を指定して計画すると、次の動的計画は使用されません.次のようになります.
5、データストレージ構造の初期化
クライアントはクラスタ内のノードに接続され、データ構造を初期化します.初期化スクリプトを次のように実行します.
参照jsonデータ構造モデル
具体的なスクリプト:
5、hectorクライアントapiを使用してcassandraデータベースを操作し、データ分布を観察する
データを挿入するときに、各ノードのデータ分布が等化しているかどうかを観察します.まず、各ノードにログインし、次のコマンドを使用して、データの分散状況をリフレッシュする必要があります.
データコードの書き込み
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();