4

PHP で Hive/Thrift を使用してデータベースにクエリを実行しようとしています。ただし、常にエラーが発生します。

TSocket: timed out reading 4 bytes from XYZ

からのコードを使用しています

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

このPHP Thrift Clientとともに

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 に接続できます。

私はどんな助けにも感謝します。ありがとう。

4

1 に答える 1

2

まったく同じリソースで開始したときに、同様の問題が発生しました。コードがタイムアウトしたかどうか、またはポートをブロックしているかどうかをコードが認識していないことがわかりました。私は私を助けたこの記事を見つけました:

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'] )

その後、この修正後に動作するようになりました。幸運を!

于 2013-10-05T16:21:33.090 に答える