После некоторого чтения (особенно: blog.fingertap.org /? 1a253760 ) мне удалось создать клиент Perl Thrift и использовать его для запроса моего сервера.
Шаги:
Скачать, собрать и установить Thrift: http://incubator.apache.org/thrift/download/. Не забудьте сделать установку кода в lib / perl.
Загрузите файлы инфраструктуры .thrift из SVN-файла Hive, расположенного под дистрибутивом вашей установки Hive (http://svn.apache.org/viewvc/hive/). Файлы, которые я использовал: fb303.thrift, queryplan.thrift, hive_metastore.thrift и thrift_hive.thrift. У меня естьрасположите их вручную, но, возможно, есть более эффективные способы сделать это.
Сгенерируйте код Perl с помощью thrift: thrift -r --gen perl hive_service.thrift
Примечание: мне пришлось построить дерево каталогов дляобязательные включения и использование директивы -I
для корня этого дерева. Я получил требуемую структуру из-за ошибок, которые мне бросили, но, опять же, могут быть более элегантные способы сделать это.
Теперь следующий код PerlУ меня есть пример кода Python в вики-клиенте Hive:
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();