Perl スクリプトからApache Hiveに接続しようとしていますが、次のエラーが発生します。
Thrift::TException=HASH(0x122b9e0)
Hadoop バージョン 2.7.0、Hive バージョン 1.1.0、および Thrift::API::HiveClient バージョン 0.003 で実行しています。私が使用しているスクリプトは次のとおりです。
#!/usr/bin/perl
use English;
use Thrift::API::HiveClient;
connecttoHive();
sub connecttoHive {
my $client = Thrift::API::HiveClient->new( host => 'localhost', port => 10000 );
$client->connect() or die "Failed to connect";
$client -> execute('select count(1) from Koushik.emp2');
my $result = $client -> fetchAll();
}
これはバージョンの問題が原因である可能性がありますか、それとも他の何かですか?
Thrift-API-HiveClient-0.003
ディストリビューションに付属している次のスクリプトも実行してみました。
#!/usr/bin/env perl
use lib 'lib';
use Data::Dumper;
use Try::Tiny;
use Thrift::API::HiveClient;
#use Moose;
my ($host, $port) = (localhost => 10000);
try sub {
my $client = Thrift::API::HiveClient->new( host => $host, port => $port );
$client->connect;
print "Connected\n";
$client->execute(
q{ create table if not exists t_foo (foo STRING, bar STRING) }
);
$client->execute('show tables');
print Dumper $client->fetchAll;
print Dumper $client->getClusterStatus;
print Dumper $client->get_fields( 'default', 't_foo');
},
catch sub {
print "ZOMG\n";
print Dumper($_);
exit 1;
};
次の出力が得られます。
hduser@ubuntu:~/perl_script$ perl test-thrift.pl
Connected
ZOMG
$VAR1 = bless( {
'message' => 'Missing version identifier',
'code' => 0
}, 'Thrift::TException' );
hive-site.xml を変更して HiveServer2 で NOSASL 認証を有効にすると、別のエラーが発生するようになりました。
hduser@ubuntu:~/perl_script$ perl test-thrift.pl
Connected
ZOMG
$VAR1 = bless( {
'message' => 'Invalid method name: \'execute\'',
'code' => 1
}, 'TApplicationException' );
を使用して動作しましたThrift::API::HiveClient2
hduser@ubuntu:~/perl_script$ cat test-thrift-client2.pl
#!/usr/bin/env perl
use lib 'lib';
use Data::Dumper;
use Try::Tiny;
use Thrift::API::HiveClient2;
#use Moose;
my ($host, $port) = (localhost => 10000);
try sub {
my $client = Thrift::API::HiveClient2->new( host => $host, port => $port );
$client->connect;
print "Connected\n";
$client->execute(
q{ create table if not exists t_foo (foo STRING, bar STRING) }
);
$client->execute('show tables');
print Dumper $client->fetch;
# print Dumper $client->getClusterStatus;
# print Dumper $client->get_fields( 'default', 't_foo');
},
catch sub {
print "ZOMG\n";
print Dumper($_);
exit 1;
};
hduser@ubuntu:~/perl_script$ perl test-thrift-client2.pl
Connected
$VAR1 = [
[
'drv_cdr_mp'
],
[
'emp1'
],
[
'emp3'
],
[
'emp_1'
],
[
'emp_bucket'
],
[
'emp_incr_test'
],
[
'emp_rslt'
],
[
'log_detail'
],
[
't_foo'
],
[
'test1_emp1'
]
];
$VAR2 = '';