Perl Thrift客户到Hive?

时间:2011-03-13 11:49:54

标签: perl thrift hive

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

如果有这样的客户存在,或者如何创建它? 也许甚至可以在没有明确定义的情况下进行连接?

(PS - 还有一个到Hive的ODBC / JDBC接口,但安装这些模块是一个令人头痛的问题,并且是最后的手段)

谢谢!

3 个答案:

答案 0 :(得分:9)

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

步骤:

  1. 下载,构建和安装Thrift:http://incubator.apache.org/thrift/download/。 不要忘记在lib / perl中安装代码。

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

  3. 使用thrift生成Perl代码: thrift -r --gen perl hive_service.thrift
    注意:我必须为所需的包构建目录树,并对此树的根使用-I指令。我从错误节俭中得到了所需的结构,但同样,可能会有更优雅的方式来做到这一点。

  4. 现在,以下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();  
    

答案 1 :(得分:2)

如果这有用,我最近将其上传到CPAN:

https://metacpan.org/module/Thrift::API::HiveClient

它尚未完全记录,并且没有测试,但我很乐意接受任何人想要发送的补丁! :)

答案 2 :(得分:1)

注意Thrift本身附带了lib文件夹中的Perl库可能会有所帮助。

http://svn.apache.org/viewvc/thrift/trunk/lib/perl/lib/