gpt4 book ai didi

Hive 的 Perl Thrift 客户端?

转载 作者:行者123 更新时间:2023-12-02 20:29:06 26 4
gpt4 key购买 nike

我想使用 Perl 连接到基于 Hadoop 的 Hive 数据存储。Hive 允许使用 Thrift 接口(interface)( http://wiki.apache.org/hadoop/Hive/HiveClient )进行连接,并且有 Perl 的 Thrift 实现(例如 http://metacpan.org/pod/Thrift::XS )。但是,我发现的唯一 Thrift 客户端是 Cassandra 客户端。

如果存在这样的客户端,或者如何创建它,有什么想法吗?也许甚至可以在不显式定义的情况下进行连接?

(PS - Hive 还有一个 ODBC/JDBC 接口(interface),但安装这些模块很麻烦,是最后的手段)

谢谢!

最佳答案

经过一些阅读(最值得注意的是: blog.fingertap.org/?1a253760 ),我成功创建了 Perl Thrift 客户端,并使用它来查询我的服务器。

步骤:

  1. 下载、构建并安装 Thrift:http://incubator.apache.org/thrift/download/ 。不要忘记将代码安装到 lib/perl 中。

  2. 从 Hive 的 SVN 下载基础架构的 .thrift 文件,位于 Hive 安装目录 ( http://svn.apache.org/viewvc/hive/ ) 下。我使用的文件:fb303.thrift、queryplan.thrift、hive_metastore.thrift 和 thrift_hive.thrift。我已手动找到它们,但可能有更好的方法。

  3. 使用 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();

关于Hive 的 Perl Thrift 客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5289164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com