【问题标题】:JDBC client to Hive - No data or no sasl data in the stream ExceptionHive 的 JDBC 客户端 - 流中没有数据或没有 sasl 数据异常
【发布时间】:2016-06-01 07:36:11
【问题描述】:

我们有一个 Kerberised 集群,我正在尝试在 Oozie 中运行 Java 操作,并在其中建立与 Hive 的 JDBC 连接。此 JDBC 连接在没有 Kerberos 的沙盒上运行良好。

连接字符串如下所示,我在其中提供用户名和密码:

Connection con = DriverManager.getConnection("jdbc:hive2://W12345:10000/control;principal=hive/W12345.companynet.net@COMPANYNET.NET","user123","passw123");

Oozie 动作(奇怪地)成功完成,Java 动作日志没有出现任何错误:

1742 [main] INFO org.apache.hive.jdbc.Utils  - Supplied authorities: W12345:10000
1742 [main] INFO org.apache.hive.jdbc.Utils  - Resolved authority: W12345:10000
1766 [main] INFO org.apache.hive.jdbc.HiveConnection  - Will try to open client transport with JDBC Uri: jdbc:hive2://W12345:10000/control;principal=hive/W12345.companynet.net@COMPANYNET.NET
<<< Invocation of Main class completed <<<
Oozie Launcher ends
1785 [main] INFO org.apache.hadoop.mapred.Task  - Task:attempt_1464245290012_0129_m_000000_0 is done. And is in the process of committing
1847 [main] INFO org.apache.hadoop.mapred.Task  - Task attempt_1464245290012_0129_m_000000_0 is allowed to commit now
1854 [main] INFO org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter  - Saved output of task 'attempt_1464245290012_0129_m_000000_0' to hdfs://danskehadoop/user/user123/oozie-oozi/0000013-160527101253015-oozie-oozi-W/JavaAction--java/output/_temporary/1/task_1464245290012_0129_m_000000
1909 [main] INFO org.apache.hadoop.mapred.Task  - Task 'attempt_1464245290012_0129_m_000000_0' done.

但实际上,Java 主程序没有正确完成执行(并且没有执行所需的查询),因为 JDBC 连接失败并出现我只能在 Hive 日志中看到的异常:

    ERROR [HiveServer2-Handler-Pool: Thread-78363]: server.TThreadPoolServer (TThreadPoolServer.java:run(296)) - Error occurred during processing of message.
java.lang.RuntimeException: org.apache.thrift.transport.TSaslTransportException: No data or no sasl data in the stream
  at org.apache.thrift.transport.TSaslServerTransport$Factory.getTransport(TSaslServerTransport.java:219)
  at org.apache.hadoop.hive.thrift.HadoopThriftAuthBridge$Server$TUGIAssumingTransportFactory$1.run(HadoopThriftAuthBridge.java:739)
  at org.apache.hadoop.hive.thrift.HadoopThriftAuthBridge$Server$TUGIAssumingTransportFactory$1.run(HadoopThriftAuthBridge.java:736)
  at java.security.AccessController.doPrivileged(Native Method)
  at javax.security.auth.Subject.doAs(Subject.java:360)
  at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1637)
  at org.apache.hadoop.hive.thrift.HadoopThriftAuthBridge$Server$TUGIAssumingTransportFactory.getTransport(HadoopThriftAuthBridge.java:736)
  at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:268)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
  at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.thrift.transport.TSaslTransportException: No data or no sasl data in the stream
  at org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:328)
  at org.apache.thrift.transport.TSaslServerTransport.open(TSaslServerTransport.java:41)
  at org.apache.thrift.transport.TSaslServerTransport$Factory.getTransport(TSaslServerTransport.java:216)
  ... 10 more

我实际上已连接到集群,并且已经对我的用户名进行了进一步的 kinit。

有人知道这个异常的原因是什么吗?

提前感谢您的帮助!

安东尼奥

【问题讨论】:

  • 您的操作中似乎缺少 hadoop 配置,您能否尝试在您的 oozie 操作节点中提供 hive-site.xml 和 core-site.xml。这可能会解决您的问题。
  • "已经在我的用户名上完成了进一步的 kinit" -- 你是否在每个 YARN 节点上运行了 kinit,以便 Oozie 作业有机会获得本地票?
  • “我实际上已连接到集群” -- Hive JDBC 驱动程序并不关心 Hadoop 配置和 Hadoop 委托令牌,它是 100% 原始 Thrift 协议(默认为二进制模式,因为您不在 URL 中请求 HTTP 模式);如果 URL 包含“主体”条目,则忽略任何用户/密码条目,驱动程序将使用 已将 JAAS 配置文件设置为 JVM 的默认值切换到 Kerberos 身份验证。看起来您需要对 JAAS 进行一些研究。

标签: authentication jdbc hive kerberos oozie


【解决方案1】:

这发生在 MapR hadoop 分发平台上。 就我而言,它是 Keepalived 每 5 秒检查一次 Hive 端口并产生这样的错误。我只是使用“nc”命令来检查 Hive 端口是否正在使用中并且没有使用任何身份验证方法。后来我切换到使用 SASL 身份验证的“maprcli”命令,错误消失了。

【讨论】:

  • 请不要发布主要包含对外部网站的引用的答案。这些网站可能会消失,您的回复的内容也会随之消失。综合外部资源必须提供的原始海报。
  • 感谢@chb 的提醒。我已删除参考并进行了更详细的解释。
猜你喜欢
  • 1970-01-01
  • 2012-02-23
  • 2021-12-11
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多