복붙노트

[HADOOP] PHP의 Hive / Thrift를 통한 데이터베이스 쿼리가 작동하지 않습니다.

HADOOP

PHP의 Hive / Thrift를 통한 데이터베이스 쿼리가 작동하지 않습니다.

PHP에서 Hive / Thrift를 통해 데이터베이스를 쿼리하려고합니다. 그러나 나는 끊임없이 오류가 발생한다 :

TSocket: timed out reading 4 bytes from XYZ

나는에서 코드를 사용하고 있습니다.

https://cwiki.apache.org/Hive/hiveclient.html#HiveClient-PHP

이 PHP Thrift 클라이언트와 함께

https://github.com/garamon/php-thrift-hive-client

내 코드 :

<?php

$socket    = new TSocket( 'XYZ', 12345 );

$socket->setSendTimeout(30 * 1000);
$socket->setRecvTimeout(30 * 1000);

$transport = new TBufferedTransport( $socket, 1024, 1024 );
$protocol  = new TBinaryProtocol( $transport );

$client    = new ThriftHiveClientEx( $protocol );

$transport->open();

$client->execute("my query");

?>

주 - 콘솔 (telnet 명령)을 통해 XYZ에 연결할 수 있습니다.

나는 어떤 도움을 주셔서 감사합니다. 감사.

해결법

  1. ==============================

    1.나는 똑같은 자원으로 시작할 때 비슷한 문제가 있었다. 코드가 시간 초과되었거나 포트를 차단하는지 여부를 인식하지 못하는 것으로 나타났습니다. 나는이 기사를 찾았고 나를 도왔다.

    나는 똑같은 자원으로 시작할 때 비슷한 문제가 있었다. 코드가 시간 초과되었거나 포트를 차단하는지 여부를 인식하지 못하는 것으로 나타났습니다. 나는이 기사를 찾았고 나를 도왔다.

    https://issues.apache.org/jira/browse/THRIFT-347

    TSocket.php 코드 (garamon_base_dir / lib / transport)에서 대략 223 행에서 236 행을 편집해야합니다.

    그것이 말하는 곳 :

    if( $buf === FALSE || $buf === '' ) { ...
    and
    if( $md['timed_out'] ) { ...
    and then again
    if( $md[timed_out'] ) { ...
    

    (각각)로 변경하십시오.

    if( $buf === FALSE ) { ...
    and
    if( true === $md['timed_out'] && false === $md['blocked'] )
    and finally 
    if( true === $md['timed_out'] && false === $md['blocked'] )
    

    그런 다음이 수정 작업을 시작했습니다. 행운을 빕니다!

  2. from https://stackoverflow.com/questions/17524076/querying-database-through-hive-thrift-in-php-does-not-work by cc-by-sa and MIT license