2015-06-18 41 views
1

我想從PHP客戶端連接到hiveserver2。但是,我得到一個空白頁面(我應該看到蜂巢中的表格列表)。我修改了代碼 https://github.com/garamon/php-thrift-hive-client。最初,我得到這個錯誤 TSocket: timed out reading 4 bytes from host。按照這裏建議的https://stackoverflow.com/a/19199938/4379550執行補丁之後。錯誤消失了,但我什麼都沒有。我的代碼如下php蜂巢服務器2問題

<?php 
$GLOBALS['THRIFT_ROOT'] = dirname(__FILE__) . '/lib'; 
require_once $GLOBALS['THRIFT_ROOT'] . '/packages/hive_service/ThriftHive.php'; 
require_once $GLOBALS['THRIFT_ROOT'] . '/transport/TSocket.php'; 
require_once $GLOBALS['THRIFT_ROOT'] . '/protocol/TBinaryProtocol.php'; 

require_once dirname(__FILE__) . '/ThriftHiveClientEx.php'; 

$transport = new TSocket('hadoop-gate.iis.u-tokyo.ac.jp', 10000); 
$transport->setSendTimeout(600 * 100); 
$transport->setRecvTimeout(600 * 100); 
$client = new ThriftHiveClientEx(new TBinaryProtocol($transport)); 
$client->open(); 

//show tables 
$client->execute('SHOW TABLES'); 
print_r($client); 
$tables = $client->fetchAll(); 
print_r($tables); 
foreach ($tables as $name){ 
    echo(" found: {$name}\n"); 
} 
?> 

如下圖所示,從Cloudera的經理檢索到的服務器上的錯誤消息:

6:49:48.859 PM ERROR org.apache.thrift.server.TThreadPoolServer 
Error occurred during processing of message. 
java.lang.RuntimeException: org.apache.thrift.transport.TTransportException:  Invalid status -128 
at org.apache.thrift.transport.TSaslServerTransport$Factory.getTransport(TSaslServerTransport.java:219) 
at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:227) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:745) 
Caused by: org.apache.thrift.transport.TTransportException: Invalid status -128 
at org.apache.thrift.transport.TSaslTransport.sendAndThrowMessage(TSaslTransport.java:230) 
at org.apache.thrift.transport.TSaslTransport.receiveSaslMessage(TSaslTransport.java:184) 
at org.apache.thrift.transport.TSaslServerTransport.handleSaslStartMessage(TSaslServerTransport.java:125) 
at org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:262) 
at org.apache.thrift.transport.TSaslServerTransport.open(TSaslServerTransport.java:41) 
at org.apache.thrift.transport.TSaslServerTransport$Factory.getTransport(TSaslServerTransport.java:216) 
... 4 more 

我會明白任何幫助。提前謝謝了。

+0

你能迴應'$ client'和'$ tables'並在這裏更新嗎? –

+0

@RamananR感謝您的回覆。不幸的是,我對PHP和節儉都很陌生。當我嘗試echo $ client時,它說它不能轉換爲字符串,而echo $ tables不顯示任何內容(空白輸出)。 – Dunstan

+0

嘗試'print_r($ client)' –

回答

1

對於那些面臨同樣的問題,我解決它由hive.server2.authentication 屬性設置爲NOSASL如以前回答here。我之前無法完成的原因是因爲我通過訪問服務器上的 文件來更改此屬性,但無法正常工作,我猜是因爲我在使用cloudera發行版。如何在cloudera manager中設置此屬性,如documentation中所述。

+0

您應該接受您自己的答案,以便我們知道問題已解決,並且可以用作重複項的參考。 –

+0

感謝您的建議@EricDarchis,不知道我可以接受我自己的答案。完成。 – Dunstan