Клиент Perl Thrift для Hive? - PullRequest
       14

Клиент Perl Thrift для Hive?

7 голосов
/ 13 марта 2011

Я бы хотел подключиться к хранилищу данных Hive на основе Hadoop, используя Perl. Hive разрешает соединение с использованием интерфейса Thrift (http://wiki.apache.org/hadoop/Hive/HiveClient),, и существует реализация Thrift для Perl (например, http://metacpan.org/pod/Thrift::XS).). Однако единственный найденный мною Thrift-клиент - это клиент Cassandra.

Есть идеи, если такой клиент существует, или как его создать? Может быть, даже возможно подключиться без явного определения?

(PS - есть также интерфейс ODBC / JDBC для Hive, но установка этих модулей является головной болью и будет последним средством)

спасибо!

Ответы [ 3 ]

9 голосов
/ 15 марта 2011

После некоторого чтения (особенно: blog.fingertap.org /? 1a253760 ) мне удалось создать клиент Perl Thrift и использовать его для запроса моего сервера.

Шаги:

  1. Скачать, собрать и установить Thrift: http://incubator.apache.org/thrift/download/. Не забудьте сделать установку кода в lib / perl.

  2. Загрузите файлы инфраструктуры .thrift из SVN-файла Hive, расположенного под дистрибутивом вашей установки Hive (http://svn.apache.org/viewvc/hive/). Файлы, которые я использовал: fb303.thrift, queryplan.thrift, hive_metastore.thrift и thrift_hive.thrift. У меня естьрасположите их вручную, но, возможно, есть более эффективные способы сделать это.

  3. Сгенерируйте код 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();  
2 голосов
/ 13 сентября 2012

В случае, если это полезно, я недавно загрузил это в CPAN:

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

Это еще не полностью задокументировано и имеет нет тесты, но я рад принять любые патчи, которые кто-нибудь хочет отправить!:)

1 голос
/ 15 марта 2011

Может быть полезно отметить, что сам Thrift поставляется с библиотекой Perl в папке lib.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...