经过一番阅读(最值得注意的是:blog.fingertap.org/?1a253760),我成功地创建了一个 Perl Thrift 客户端,并使用它来查询我的服务器。
脚步:
下载、构建和安装 Thrift:http: //incubator.apache.org/thrift/download/。不要忘记在 lib/perl 中安装代码。
从 Hive 的 SVN 下载基础架构的 .thrift 文件,位于 Hive 安装的 dist 下 ( http://svn.apache.org/viewvc/hive/ )。我使用过的文件:fb303.thrift、queryplan.thrift、hive_metastore.thrift 和 thrift_hive.thrift。我已经手动定位了它们,但可能有更好的方法来做到这一点。
使用 thrift 生成 Perl 代码:
thrift -r --gen perl hive_service.thrift
注意:我必须为所需的包含构建目录树,并使用-I
该树根的指令。我从 thrift 扔给我的错误中得到了所需的结构,但同样,可能有更优雅的方法可以做到这一点。
现在,以下 Perl 代码围绕 Hive 客户端 Wiki 中的 python 示例的行编写,适用于我:
use Thrift;
use Thrift::Socket;
use Thrift::FramedTransport;
use Thrift::BinaryProtocol;
use lib <LOCATION OF GENERATED PERL CODE>;
use ThriftHive;
# init variables ($host, $port, $query)
#
my $socket = Thrift::Socket->new($host, $port);
my $transport = Thrift::BufferedTransport->new($socket);
my $protocol = Thrift::BinaryProtocol->new($transport);
my $client = ThriftHiveClient->new($protocol);
eval {$transport->open()}; #do something with Exceptions
eval {$client->execute($query)};
for (my $i = 0; $i < $count; $i++)
{
my $row;
eval {$row = $client->fetchOne()};
#use $row
}
$transport->close();