使用perl连接到apache cassandra 2.0.1

时间:2013-10-24 11:35:07

标签: perl cassandra

过去两周我一直在研究Cassandra,我被困在几个地方,我希望你可以帮我解决它。

我已经安装了apache-cassandra-2.0.1,perlcassa-master,Perl5.10,Thrift :: XS和Time :: HiRes。我仍然无法连接到Cassandra。当我运行perl Makefile时。 PL我得到以下警告

  

“警告:找不到先决条件Class :: Accessor 0。编写Makefile   对于perlcassa“当我运行我的脚本时忽略警告我得到了   跟随错误。 “基类包”Class :: Accessor“为空。   (也许你需要'使用'定义该包的模块   首先,或者在@INC中使该模块可用(@INC包含:   / usr / local / lib64 / perl5 / usr / local / share / perl5   / usr / lib64 / perl5 / vendor_perl enter code here / usr / share / perl5 / vendor_perl / usr / lib64 / perl5 / usr / share / perl5   )。在/usr/local/share/perl5/Cassandra/Types.pm第38行开始   失败 - 编译中止   /usr/local/share/perl5/Cassandra/Types.pm第38行。编译失败   在/usr/local/share/perl5/Cassandra/Cas​​sandra.pm第11行。   BEGIN失败了 - 编译中止了   /usr/local/share/perl5/Cassandra/Cas​​sandra.pm第11行。编译   在/usr/local/share/perl5/perlcassa/Client.pm行中失败了   18. BEGIN失败 - 编译在/usr/local/share/perl5/perlcassa/Client.pm第18行中止。编译失败   请求/usr/local/share/perl5/perlcassa.pm第159行。开始   失败 - 编译在/usr/local/share/perl5/perlcassa.pm中止   第15行。编译在./cassconn.pl第2行的require中失败。开始   失败 - 汇编在./cassconn.pl第2行中止。“

我的脚本cassconn.pl

 #!/usr/bin/perl
 use perlcassa;

    my $result = $obj->exec(
    "SELECT n,ei,toj,sal,d FROM sample.test WHERE n='divya'",
    {key_value => 'n'}
     );
    my $row = $result->fetchone();
    print "Row key, col01: ".$row->{key}.", ".$row->{col01}."\n";

1 个答案:

答案 0 :(得分:0)

我不知道它是否会对你有帮助,我会解释我是如何做到的。

Download并在您的计算机上安装Thrift编译器。

使用cpan

为Perl客户端应用程序安装Thrift库
  

cpan Thrift

转到你安装Cassandra的目录,里面有interface目录

  

cd / path / to / cassandra / interface /

然后使用之前安装的Thrift编译为Perl生成Cassandra库

  

/ path / to / thrift / binary / Thrift --gen Perl cassandra.thrift

它将在当前目录中创建目录gen-perl,您需要在Perl脚本中使用use语句包含它。这是一个example脚本,虽然它不适用于最新版本的Cassandra和Thrift,但它非常相似,如果你遇到问题,我会向你提供与Cassandra-2.0.8和{{1一起使用的例子}}

Thrift-0.9.1

它向Cassandra键空间#!/usr/bin/perl -w use strict; use warnings; # Change for your environment use lib '/path/to/cassandra/interface/gen-perl'; use Cassandra::Cassandra; use Cassandra::Constants; use Cassandra::Types; use Thrift; use Thrift::BinaryProtocol; use Thrift::Socket; use Thrift::FramedTransport; use Data::Dumper; # localhost and 9160 are default in storage conf for rpc listener my $socket = new Thrift::Socket('localhost', 9160); my $transport = new Thrift::FramedTransport($socket); my $protocol = new Thrift::BinaryProtocol($transport); my $client = new Cassandra::CassandraClient($protocol); eval { $transport->open(); my $consistency_level = Cassandra::ConsistencyLevel::ONE; my $keyspace = 'DEMO'; my $column_parent = new Cassandra::ColumnParent(); $column_parent->{column_family} = "User"; $column_parent->{super_column} = undef; $column_parent->{column} = 'age'; $client->set_keyspace($keyspace); my $column = new Cassandra::Column(); my $row_key = 'Spider-Man'; $column->{name} = 'first'; $column->{value} = 'Peter'; $column->{timestamp} = time; $client->insert($row_key, $column_parent, $column, $consistency_level); $column->{name} = 'last'; $column->{value} = 'Parker'; $column->{timestamp} = time; $client->insert($row_key, $column_parent, $column, $consistency_level); $column->{name} = 'age'; $column->{value} = '18'; $column->{timestamp} = time; $client->insert($row_key, $column_parent, $column, $consistency_level); $transport->close(); }; if($@){ warn(Dumper($@)); } 1; 添加一个条目,其中包含键DEMO,以及列值spider-manpeterparker

以下是执行此脚本后18上的查询结果:

cassandra-cli