2017-03-03 4 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에는 몇 가지 비슷한 질문이 있습니다. (그리고 다른 곳에서) 그 메시지에 관한 것이고 그것은 ** 서버 **에 의해 예상되는 인증 방법을 점검하고 클라이언트가 그것을 사용하는지 확인하기 위해 끝나게됩니다. Cf. 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을 참조하십시오. 22 페이지 인증 구성 섹션