【问题标题】:Perl Thrift client to Hive?Perl Thrift 客户端到 Hive?
【发布时间】:2020-08-24 03:31:50
【问题描述】:

我想使用 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 接口,但安装这些模块很头疼,而且是不得已的办法)

谢谢!

【问题讨论】:

    标签: perl thrift hive


    【解决方案1】:

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

    步骤:

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

    2. 从 Hive 的 SVN 下载基础架构的 .thrift 文件,位于 Hive 安装的 dist (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 向我抛出的错误中得到了所需的结构,但同样,可能有更优雅的方法来做到这一点。

    现在,围绕 Hive 客户端 Wiki 中的 python 示例行编写的以下 Perl 代码适用于我:

    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();  
    

    【讨论】:

      【解决方案2】:

      如果这有帮助,我最近已将其上传到 CPAN:

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

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

      【讨论】:

      • 很棒的工作!这也适用于 Hive Server 2 吗?谢谢。
      • 另外,它是否适用于 Kerberized 集群?再次感谢。
      【解决方案3】:

      请注意 Thrift 本身在 lib 文件夹中附带了一个 Perl 库。

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

      【讨论】:

        猜你喜欢
        • 2016-05-28
        • 1970-01-01
        • 2015-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多