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 件のコメント:
コメントを投稿