Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Hive-Thrift-readMessageBegin中缺少版本,旧客户端?_Javascript_Node.js_Hadoop_Hive_Thrift - Fatal编程技术网

Javascript Hive-Thrift-readMessageBegin中缺少版本,旧客户端?

Javascript Hive-Thrift-readMessageBegin中缺少版本,旧客户端?,javascript,node.js,hadoop,hive,thrift,Javascript,Node.js,Hadoop,Hive,Thrift,您好,我正在尝试构建一个nodejs客户端,用于使用thrift查询我的hive数据库,但我面临一个奇怪的问题。。。我已经用thrift生成了我的nodejs客户端API(thrift-r--gen js:node TCLIService.thrift,TCLIService是定义配置单元服务的thrift文件),现在我尝试连接到配置单元,但我的OpenSession正在挂起。。。也许我没有做正确的决定,但我在网上没有发现任何最新的东西(每个节俭/节点/蜂巢项目都有4到5年的历史)。你能看一下,

您好,我正在尝试构建一个nodejs客户端,用于使用thrift查询我的hive数据库,但我面临一个奇怪的问题。。。我已经用thrift生成了我的nodejs客户端API(
thrift-r--gen js:node TCLIService.thrift
,TCLIService是定义配置单元服务的thrift文件),现在我尝试连接到配置单元,但我的OpenSession正在挂起。。。也许我没有做正确的决定,但我在网上没有发现任何最新的东西(每个节俭/节点/蜂巢项目都有4到5年的历史)。你能看一下,告诉我我做错了吗?谢谢

节俭:

// OpenSession()
//
// Open a session (connection) on the server against
// which operations may be executed.
struct TOpenSessionReq {
    // The version of the HiveServer2 protocol that the client is using.
    1: required TProtocolVersion client_protocol = TProtocolVersion.HIVE_CLI_SERVICE_PROTOCOL_V8

    // Username and password for authentication.
    // Depending on the authentication scheme being used,
    // this information may instead be provided by a lower
    // protocol layer, in which case these fields may be
    // left unset.
    2: optional string username
    3: optional string password

    // Configuration overlay which is applied when the session is
    // first created.
    4: optional map<string, string> configuration
}

service TCLIService {
    TOpenSessionResp OpenSession(1:TOpenSessionReq req);
}
我的输出如下:

CreateConnection DONE ...
Error handler registered ...
Connect handler registered ...
Connected ...
{ output:
   TBufferedTransport {
     defaultReadBufferSize: 1024,
     writeBufferSize: 512,
     inBuf: <Buffer e8 19 2b 03 00 00 00 00 b0 1a 2b 03 00 00 00 00 e8 18 2b 03 00 00 00 00 f0 18 2b 03 00 00 00 00 b0 19 2b 03 00 00 00 00 78 1a 2b 03 00 00 00 00 70 1d ... >,
     readCursor: 0,
     writeCursor: 0,
     outBuffers: [],
     outCount: 0,
     onFlush: [Function],
     client: [Circular] },
  pClass: [Function: TBinaryProtocol],
  _seqid: 0,
  _reqs: {} }
openSessReq = {"client_protocol":7,"username":"root","password":"root","configuration":null}
Before OpenSession : sessionHandle =
After OpenSession : sessionHandle = undefined
^C
服务器:

2016-02-17 13:36:37,152 ERROR org.apache.thrift.server.TThreadPoolServer: [HiveServer2-Handler-Pool: Thread-24]: Thrift error occurred during processing of message.
    org.apache.thrift.protocol.TProtocolException: Missing version in readMessageBegin, old client?
        at org.apache.thrift.protocol.TBinaryProtocol.readMessageBegin(TBinaryProtocol.java:228)
        at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:27)
        at org.apache.hive.service.auth.TSetIpAddressProcessor.process(TSetIpAddressProcessor.java:56)
        at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:285)
        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)

我读到这个问题一定是由于使用了错误的协议层。。。我用的是TBinaryProtocol,有问题吗

我已通过执行以下操作解决了问题:

CreateConnection DONE ...
Error handler registered ...
Connect handler registered ...
Connected ...
{ output:
   TBufferedTransport {
     defaultReadBufferSize: 1024,
     writeBufferSize: 512,
     inBuf: <Buffer e8 19 2b 03 00 00 00 00 b0 1a 2b 03 00 00 00 00 e8 18 2b 03 00 00 00 00 f0 18 2b 03 00 00 00 00 b0 19 2b 03 00 00 00 00 78 1a 2b 03 00 00 00 00 70 1d ... >,
     readCursor: 0,
     writeCursor: 0,
     outBuffers: [],
     outCount: 0,
     onFlush: [Function],
     client: [Circular] },
  pClass: [Function: TBinaryProtocol],
  _seqid: 0,
  _reqs: {} }
openSessReq = {"client_protocol":7,"username":"root","password":"root","configuration":null}
Before OpenSession : sessionHandle =
After OpenSession : sessionHandle = undefined
^C
使用beewax检查我的HiveServer2的协议版本,查询我的HiveServer2(带有色调)并检查HiveServer2日志(我发现它是HIVE 0.15.0的HIVE_CLI_SERVICE_protocol_V7)


通过修改hive-site.xml在我的HiveServer2上启用NOASL身份验证我已通过执行以下操作修复了我的问题:

CreateConnection DONE ...
Error handler registered ...
Connect handler registered ...
Connected ...
{ output:
   TBufferedTransport {
     defaultReadBufferSize: 1024,
     writeBufferSize: 512,
     inBuf: <Buffer e8 19 2b 03 00 00 00 00 b0 1a 2b 03 00 00 00 00 e8 18 2b 03 00 00 00 00 f0 18 2b 03 00 00 00 00 b0 19 2b 03 00 00 00 00 78 1a 2b 03 00 00 00 00 70 1d ... >,
     readCursor: 0,
     writeCursor: 0,
     outBuffers: [],
     outCount: 0,
     onFlush: [Function],
     client: [Circular] },
  pClass: [Function: TBinaryProtocol],
  _seqid: 0,
  _reqs: {} }
openSessReq = {"client_protocol":7,"username":"root","password":"root","configuration":null}
Before OpenSession : sessionHandle =
After OpenSession : sessionHandle = undefined
^C
使用beewax检查我的HiveServer2的协议版本,查询我的HiveServer2(带有色调)并检查HiveServer2日志(我发现它是HIVE 0.15.0的HIVE_CLI_SERVICE_protocol_V7)


通过修改hive-site.xml在my HiveServer2上启用NOASL身份验证尝试检查环境的三个部分,默认情况下这三个部分都在同一配置文件(
hive-site.xml
)中:

  • 运输方式 选中
    hive.server2.transport.mode
    ,您必须在服务和客户端中使用相同的模式

  • ssl启用 选中
    hive.server2.use.SSL
    ,您可以尝试关闭以确保与此配置无关

  • 认证 检查
    hive.server2.authentication
    ,因为有几种身份验证模式(无、NOASL、KERBEROS、LDAP、自定义),请确保使用正确的身份验证模式


  • 另外,您可以尝试通过控制台连接到hs2,查看服务器是否有问题。

    尝试检查环境的三个部分,默认情况下,这三个部分都位于同一配置文件(
    hive site.xml
    )中:

  • 运输方式 选中
    hive.server2.transport.mode
    ,您必须在服务和客户端中使用相同的模式

  • ssl启用 选中
    hive.server2.use.SSL
    ,您可以尝试关闭以确保与此配置无关

  • 认证 检查
    hive.server2.authentication
    ,因为有几种身份验证模式(无、NOASL、KERBEROS、LDAP、自定义),请确保使用正确的身份验证模式


  • 另外,您可以尝试通过控制台连接到hs2,看看服务器是否有问题。

    如果您有问题,请问两个问题。如果你只有一个问题,去掉剩下的。如果你有问题,问两个问题。如果只有一个,请删除其余的。奇怪,我在日志中没有找到任何配置单元CLI\u服务\u协议\u V7,它也不可配置,我使用的是配置单元1.1.0奇怪,我在日志中没有找到任何配置单元CLI\u服务\u协议\u V7,它也不可配置,我使用的是配置单元1.1.0