2014-10-10 45 views
0

我開發一個節儉的客戶,TApplicationException:必填字段「client_protocol」未設置

我有我的機器上建立一個節儉蜂巢服務器(Apache的蜂房0.14.0)和我也有機會獲得Cloudera的DIST蜂巢4.6.0

當我節儉客戶端連接到客戶端CDH給予以下錯誤:

TApplicationException: Required field 'client_protocol' is unset! 
Struct:TOpenSessionReq(client_protocol:null, username: 

我傳遞正確的協議服務器,但它似乎有些事情是在騎它... 。

而且如果我點到本地主機(在那裏我有我的蜂巢服務器上運行)的每一件事似乎做工精細....

請讓我知道什麼是錯在這裏....

代碼:

 var socket = new TSocket("XXX.XXX.XXX.XXX", 10000); 

     TStreamTransport sTransport = (TStreamTransport)socket; 

     var transport = new TBufferedTransport(socket); 

     underlyingTransport = transport; 

     var proto = new TBinaryProtocol(transport); 
     var client = new TCLIService.Client(proto); 
     transport.Open(); 

     TOpenSessionReq req = new TOpenSessionReq(TProtocolVersion.HIVE_CLI_SERVICE_PROTOCOL_V6); 
     req.Username = "hive"; 
     req.Password = "hive"; 

     TOpenSessionResp oSResponse = client.OpenSession(req); 
     TSessionHandle sessionHandle = oSResponse.SessionHandle; 

     TExecuteStatementReq execReq = new TExecuteStatementReq(sessionHandle, "select * from emp"); 
     TExecuteStatementResp exeRes= client.ExecuteStatement(execReq); 
     TOperationHandle operationHandle = exeRes.OperationHandle; 

     TFetchResultsReq fechReq = new TFetchResultsReq(operationHandle,TFetchOrientation.FETCH_FIRST, 1); 
     TFetchResultsResp fechRes = client.FetchResults(fechReq); 

     TRowSet results = fechRes.Results; 
     List<TRow> resultRows = results.Rows; 
     foreach (var row in resultRows) 
     { 
      var val = row.ColVals[0]; 
      System.Console.WriteLine(val.StringVal); 
     } 

     TCloseOperationReq closeOprReq = new TCloseOperationReq(operationHandle); 
     client.CloseOperation(closeOprReq); 

     TCloseSessionReq creq = new TCloseSessionReq(sessionHandle); 
     client.CloseSession(creq); 
+1

這樣的聲音可能是I/O堆棧錯誤。 Cloudera Hive是否使用TFramedTransport而不是TBufferedTransport? – codeSF 2014-10-11 19:19:04

+0

「*我正在將正確的協議傳遞給服務器,但似乎有些東西正在壓倒它...... *」 - 沒有人會壓倒任何東西。但是有些服務器隱含地要求'TFramedTransport'。這是一個非常常見的陷阱。根據[本文檔](https://cwiki.apache.org/confluence/display/Hive/Setting+Up+HiveServer2),Hive在服務器端使用線程,因此請檢查'TFramedTransport'是否工作。 – JensG 2014-10-12 17:10:47

回答