gpt4 book ai didi

perl - Thrift::TException=HASH(0x25d18e0) 错误

转载 作者:行者123 更新时间:2023-12-02 22:03:17 24 4
gpt4 key购买 nike

我正在尝试通过 Perl 模块 Thrift::API::HiveClient 连接到 Hive,下面是连接到 Hadoop 配置单元并检索数据的代码

#!/usr/bin/perl

use DBI;
use DBI::DBD;
use Data::Dumper;
use List::MoreUtils qw(uniq);
use DateTime;
#use warnings 'all';
use POSIX qw(strftime);
use LWP::Simple;
use Thrift;
use Thrift::API::HiveClient;
use Data::Dumper;

my $latest_return;

# Database connection
my $client = Thrift::API::HiveClient->new(
host => 'localhost',
port => '10000',
);
$client->connect or die "Could not connect";

my $rh = $client->execute('select * from devtest.users');
my $return = [];
while ($latest_return = $client->fetch($rh)) { # will die with an error if it fails
print $latest_return;
}

当我执行上面的脚本时,它会抛出以下消息

节俭::TException=HASH(0x25d18e0)

我还尝试了 Dumper 打印结果,但没有打印任何内容。

任何帮助深表感谢。

最佳答案

好的,所以这里的问题是 - 你正在做一些失败的事情。
您导入的模块 - Thrift::API::Hiveclient 警告:

THIS CODE IS ALPHA-QUALITY, EXPERIMENTAL, AND LIKELY FLAMMABLE



话虽如此 - 这里发生的事情对于某些人来说是失败的,它是 die使用错误对象。

该错误对象具有状态代码和消息。 (我不认为这是惯用的 perl,它更像是 Java :))。

所以在 connect有一个错误,没有得到正确处理,所以你的代码正在死去。

一个 Thrift::TException 是一种相当简单的对象:
package Thrift::TException;

sub new {
my $classname = shift;
my $self = {message => shift, code => shift || 0};

return bless($self,$classname);
}
1;

从字面上看,只是一条消息和一个代码。

要获得该消息,您需要取消引用您的对象,而这似乎没有发生。

我最好的猜测是 _open Thrift::Socket 中的方法正在返回一个错误,而 HiveClient 实际上并没有捕获/处理它。

它应该做 eval并捕获错误,然后解压缩 TException。

这里某处:
sub connect {
my ($self) = @_;
$self->_transport->open;
}

也许。我不是 100% 确定,因为 Moo可能会用 die 做一些可爱的事情,但我找不到或看不到那在哪里。

如此简短的回答 - 你可能无法连接,以确保你需要获取该错误消息 - 要做到这一点,你需要破解 Hiveclient评估操作。这就是您使用“Alpha 质量”模块注册的内容。

关于perl - Thrift::TException=HASH(0x25d18e0) 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46302183/

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