如何解决'老客户端readMessageBegin中缺少版本?'连接到Cloudera Hive 1.1.0>

时间:2017-09-04 04:54:27

标签: hive thrift-protocol

我有一个定制的Hive服务器,可以扩展HiveServer2。我可以使用CDH5中的以下参数启动它:

  --hiveconf "hive.server2.authentication=NOSASL" \
  --hiveconf "hive.metastore.local=true" \
  --hiveconf "hive.metastore.uris=" \
  --hiveconf "hive.metastore.sasl.enabled=false" \
  --hiveconf "fs.hdfs.impl.disable.cache=true" \
  --hiveconf "fs.file.impl.disable.cache=true" \
  --hiveconf "hive.server2.authentication.kerberos.principal=$KRB_PRINCIPAL" \
  --hiveconf "hive.server2.authentication.kerberos.keytab=$KRB_KEYTAB"

但是,每当我尝试使用beeline连接到它时,我都会收到以下错误:

  

17/09/04 03:04:44错误TThreadPoolServer:发生了Thrift错误   在处理消息期间。   org.apache.thrift.protocol.TProtocolException:缺少版本   readMessageBegin,老客户端?在   org.apache.thrift.protocol.TBinaryProtocol.readMessageBegin(TBinaryProtocol.java:228)     在org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:27)     在   org.apache.hive.service.auth.TSetIpAddressProcessor.process(TSetIpAddressProcessor.java:56)     在   org.apache.thrift.server.TThreadPoolServer $ WorkerProcess.run(TThreadPoolServer.java:286)     在   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)     在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:617)     在java.lang.Thread.run(Thread.java:745)

此错误与Hive - Thrift - Missing version in readMessageBegin, old client?中报告的错误相同。但条件不同:我的身份验证已设置为NOSASL,而我的服务器thrift版本已经是V7。

还有其他可能导致触发的原因吗? (例如,JAR地狱或来自hive-site.xml的配置不正确)

1 个答案:

答案 0 :(得分:2)

我在2天前面临同样的问题,我相信这里的问题是你在不同的传输模式下启动服务器和客户端。尝试将这些属性放在hive-site.xml

  <property>
      <name>hive.server2.transport.mode</name>
      <value>http</value>
  </property>

  <property>
      <name>hive.server2.thrift.http.port</name>
      <value>10001</value>
  </property>

  <property>
      <name>hive.server2.thrift.http.path</name>
      <value>cliservice</value>
  </property>

然后开始你的Metastore:

nohup bin/hive --service metastore &

启动你的hiveserver2

hive --service hiveserver2 --hiveconf hive.server2.thrift.port=10001 --hiveconf hive.root.logger=INFO,console

然后从直线连接:

!connect jdbc:hive2://localhost:10001/hive;transportMode=http;httpPath=cliservice

您将连接到:Apache Hive。