Windows上のPerl(ActivePerl)でCassandraに接続するための環境を構築する。
■環境
OS | Windows XP |
---|---|
Cassandra | 0.7.6-2 |
CASSANDRA_HOME | D:\cassandra\apache-cassandra-0.7.6-2 |
Perl | Active Perl 5.12.3 |
ActivePerlのインストール先 | D:\PERL |
■「Thrift」と「Thrift compiler for Windows」のダウンロード
Apache Thriftから「Thrift」と「Thrift compiler for Windows」をダウンロードします。
今回は以下のバージョンのファイルをダウンロードしました。
Thrift | thrift-0.6.0.tar.gz |
---|---|
Thrift compiler for Windows | thrift-0.6.0.exe |
■ThriftのPerl用ライブラリの配置
ダウンロードしたThriftのファイルを解凍します。
以下のディレクトリとファイルを「D:\Perl\site\lib」に配置します。
lib\perl\lib\Thrift
lib\perl\Thrift.pm
【ディレクトリ構成】
D:\PERL\SITE └─lib │ Thrift.pm │ ├─Thrift │ BinaryProtocol.pm │ BufferedTransport.pm │ FramedTransport.pm │ HttpClient.pm │ MemoryBuffer.pm │ Protocol.pm │ Server.pm │ Socket.pm │ Transport.pm │
■Cassandra用のPerlパッケージ作成
今回は、作業ディレクトリとして、D:\cassandra\Thriftを準備しました。
ダウンロードしたファイルを「D:\cassandra\Thrift」にコピーします。
「D:\cassandra\Thrift」で以下のコマンドを実行します。
>thrift-0.6.0 --gen perl D:\cassandra\apache-cassandra-0.7.6-2\interface\cassandra.thrift
「D:\cassandra\Thrift」に、「gen-perl」ディレクトリが作成され、その配下にパッケージファイルが作成されます。
D:\cassandra\Thrift\gen-perl └─Cassandra Cassandra.pm Constants.pm Types.pm
gen-perlディレクトリに作成されたディレクトリを「D:\Perl\site\lib」に配置します。
先に作成したThriftのパッケージと併せて以下のようなディレクトリ構成になります。
【ディレクトリ構成】
D:\PERL\SITE └─lib │ Thrift.pm ├─Cassandra │ Cassandra.pm │ Constants.pm │ Types.pm ├─Thrift │ BinaryProtocol.pm │ BufferedTransport.pm │ FramedTransport.pm │ HttpClient.pm │ MemoryBuffer.pm │ Protocol.pm │ Server.pm │ Socket.pm │ Transport.pm
■Perlでアクセス
PerlでCassandraにデータを挿入するプログラム(SimpleInsert.pl)で、動作を確認します。
スキーマは、Cassandra0.7のスキーマサンプルのスキーマを使用します。
SimpleInsert.plは、
キースペース:Keyspace1,カラムファミリー:Standard1
に、
キー:sample1,カラム:hoge,カラム:sample_value
を挿入するプログラムです。
キースペース | Keyspace1 |
---|---|
カラムファミリー | Standard1 |
キー | カラム | 値 |
---|---|---|
sample1 | hoge | sample_value |
【実行結果】
D:\cassandra\Thrift>perl SimpleInsert.pl 1件インサート完了.
「Cassandra CLI」で、データが挿入されたことを確認します。
[default@unknown] use Keyspace1; Authenticated to keyspace: Keyspace1 [default@Keyspace1] list Standard1; Using default limit of 100 ------------------- RowKey: sample1 => (column=686f6765, value=73616d706c655f76616c7565, timestamp=1306068102)
columnとvaluseがバイト文字列で表示されますが、コードで挿入した文字列であることを確認するために、以下のコードで確認してみます。
【バイト文字列を確認するプログラム(CassndraByteData.pl)】
@data = ( 'hoge', 'sample_value' ); foreach $d (@data) { print "$d:" . unpack( "H*", $d ) . "\n"; }【実行結果】
D:\cassandra\Thrift>perl CassndraByteData.pl hoge:686f6765 sample_value:73616d706c655f76616c7565
【SimpleInsert.plのコード】
サンプルコードは、「Cassandraのはじめ方─手を動かしてNoSQLを体感しよう」のサンプルコード(Java)を参考に作成しました。
#!/usr/bin/perl -w use strict; use warnings; # Change for your environment use Cassandra::Cassandra; use Cassandra::Constants; use Cassandra::Types; use Thrift; use Thrift::BinaryProtocol; use Thrift::Socket; use Thrift::FramedTransport; use Data::Dumper; my $socket = new Thrift::Socket( 'localhost', 9160 ); my $transport = new Thrift::FramedTransport( $socket, 1024, 1024 ); my $protocol = new Thrift::BinaryProtocol($transport); my $client = new Cassandra::CassandraClient($protocol); my $keyspace = 'Keyspace1'; my $column_family = 'Standard1'; eval { $transport->open(); my $auth_request = new Cassandra::AuthenticationRequest(); $auth_request->{credentials} = { username => 'user', password => 'pass' }; $client->login($auth_request); $client->set_keyspace($keyspace); my $key = 'sample1'; my $timestamp = time; my $consistency_level = Cassandra::ConsistencyLevel::ONE; my $column_parent = new Cassandra::ColumnParent( { column_family => $column_family } ); my $column = new Cassandra::Column( { name => 'hoge', value => 'sample_value', timestamp => $timestamp } ); # 1件カラムをインサート $client->insert( $key, $column_parent, $column, $consistency_level ); $transport->close(); }; if ($@) { warn( Dumper($@) ); } print "1件インサート完了.\n"; 1;
0 件のコメント:
コメントを投稿