过去两周我一直在研究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/Cassandra.pm第11行。 BEGIN失败了 - 编译中止了 /usr/local/share/perl5/Cassandra/Cassandra.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";
答案 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-man
,peter
,parker
。
以下是执行此脚本后18
上的查询结果:
cassandra-cli