Я пытаюсь запросить базу данных через Hive / Thrift в PHP. Тем не менее, я постоянно получаю сообщение об ошибке:
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"); ?>
Примечание. Я могу подключиться к XYZ через консоль (команда telnet).
Я бы посоветовал любую помощь. Благодарю.
У меня была аналогичная проблема, начиная с тех же самых ресурсов. Оказывается, код не распознает, был ли он отключен или заблокирован порт. Я нашел эту статью, которая мне помогла:
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'] )
Затем он начал работать после этого исправления. Удачи!