2011-05-27

Cassandra0.7:クライアントからの転送サイズを増やす

Cassandra0.7.6に、自作プログラム(Perl)を使ってbacht_mutateを使用してデータを投入していたら、データ量が大きくなったところで、TSocketで以下のような例外が発生しました。
$VAR1 = bless( {
                 'code' => 0,
                 'message' => 'TSocket: Could not write 20039295 bytes localhost:localhost'
               }, 'Thrift::TException' );

この数字は、クライアンから送信しようとするデータサイズなので、どこかに転送データのサイズの最大値の設定があるはずだと思い、データ量を調整しながら、エラーの発生するサイズの閾値を調査したら、Cassandraの起動時のメッセージにあるTFastFramedTransportのフレームサイズを越えてしまったことが判明しました。

【Cassandra起動時のメッセージ TFastFramedTransportの最大フレームサイズ】
INFO 23:46:51,625 Using TFastFramedTransport with a max frame size of 15728640 bytes.

ということで、「cassandra.yaml」の「thrift_framed_transport_size_in_mb」のサイズを15から20に変更してCassandraを再起動したら、今度は、Cassandraで、ERRORが発生して起動に失敗しました。

【Cassandra起動時のERROR】
ERROR 23:58:00,812 Fatal configuration error
org.apache.cassandra.config.ConfigurationException: thrift_max_message_length_in_mb must be greater than thrift_framed_transport_size_in_mb when using TFramedTransport

ERRORの内容を読むと
『TFramedTransportを使う場合、thrift_max_message_length_in_mbは、thrift_framed_transport_size_in_mbより大きくなければならない。』
ということで、thrift_max_message_length_in_mbを21に変更し、Cassandraを再起動したら、Cassandraの起動に成功しました。

【Cassandra起動時のメッセージ TFastFramedTransportの最大フレームサイズ】
INFO 00:00:23,453 Using TFastFramedTransport with a max frame size of 20971520 bytes.

クライアントからのデータの投入にも成功しました。

■教訓
TSocketで転送サイズを増やしたい場合は、「cassandra.yaml」の
thrift_framed_transport_size_in_mb と thrift_max_message_length_in_mb
を調整しましょう。
(thrift_max_message_length_in_mb > thrift_framed_transport_size_in_mb)

【今回の変更(cassandra.yaml)】
thrift_framed_transport_size_in_mb: 20
thrift_max_message_length_in_mb: 21

0 件のコメント: