2017-03-03 1311 views
1

我爲配置單元使用名爲jshs2的node.js客戶端驅動程序,但在連接到hiveserver2時遇到了連接問題。我試圖查看無效狀態128,但沒有運氣。這裏是我的代碼:HiveServer2 TTransportException:無效的狀態-128

const options = { 
 
\t auth: "NOSASL", 
 
\t host: "my host", 
 
\t port: 10000, 
 
\t timeout: 10000, 
 
\t username: "my username", 
 
     password: "my password" 
 
\t hiveType: HS2Util.HIVE_TYPE.CDH, 
 
\t hiveVer: "0.13.1", 
 
\t thriftVer: "0.9.0", 
 
\t cdhVer: "5.3.3" 
 
}; 
 

 

 
it('test', function() { 
 
\t var configuration = new Configuration(options); 
 
\t var idl = new IDLContainer(); 
 
\t var cursor; 
 
\t return idl.initialize(configuration).then(function() { 
 
\t \t var connection = new HiveConnection(configuration, idl); 
 
\t \t return connection.connect(); 
 
\t }).then(function(_cursor) { 
 
\t \t cursor = _cursor; 
 
\t \t return cursor.execute(options.query); 
 
\t }).then(function() { 
 
\t \t promise.delay(2000); 
 
\t \t logger.log('info', cursor.getOperationStatus()); 
 
\t }).catch(function(error) { 
 
\t \t throw error; 
 
\t }); 
 
});

服務器日誌:

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 
+1

從'handleSaslStartMessage'引發異常;換句話說,你的JDBC客戶端試圖去否認*它可以向服務器認證,但沒有任何協議。 S.O上有幾個類似的問題。 (以及其他地方)關於該消息,並且這些都歸結爲**檢查服務器期望的身份驗證方法**並確保您的客戶端使用它。參看http://findingthecomputer.blogspot.fr/2016/09/odbc-with-hive-on-cloudera-causing.html和http://stackoverflow.com/questions/30905334/php-hiveserver-2-issues ... –

+0

...和http://grokbase.com/t/hive/user/157xvy8ra8/hiveserver-thrift-ttransportexception等。 –

回答

2

參孫是正確的。我的客戶端中設置的身份驗證與服務器期望的身份驗證不同。檢查您的HiveServer2配置文件hive-site.xml。這裏是一個片段:

<property> 
    <name>hive.server2.enable.doAs</name> 
    <value>false</value> 
</property> 
<property> 
    <name>hive.server2.use.SSL</name> 
    <value>false</value> 
</property> 
<property> 
    <name>hive.server2.authentication</name> 
    <value>NOSASL</value> 
</property> 

它沒有hive.server2.authentication屬性設置,所以我在那裏加入。有關文檔參考,請查看Cloudera's ODBC driver for Apache Hive install guide page 22配置認證部分