Impala JDBC 连接:错误设置/关闭会话:打开会话错误

Posted

技术标签:

【中文标题】Impala JDBC 连接:错误设置/关闭会话:打开会话错误【英文标题】:Impala JDBC connection: Error setting/closing session: Open Session Error 【发布时间】:2016-08-04 18:46:04 【问题描述】:

如果我有以下类型的 impala 连接,我还能使用 SquirreL SQL:

    self.impala_con = connect(host='sql.edamame.com', port=25003, use_ssl=True, auth_mechanism="PLAIN",
                              user='edamame1', password='edamamePass')

这是我在 Squirrel 中设置别名的方法:

测试连接时出现以下错误:

java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.sql.SQLException: [Simba][ImpalaJDBCDriver](500151) Error setting/closing session: Open Session Error.
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:206)
    at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.awaitConnection(OpenConnectionCommand.java:132)
    at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.access$100(OpenConnectionCommand.java:45)
    at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand$2.run(OpenConnectionCommand.java:115)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    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)

更新:

我也试过下面的网址:

jdbc:impala://sql.edamame.com:25003/default;AuthMech=3;SSL=1

并得到以下新错误:

java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.sql.SQLException: [Simba][ImpalaJDBCDriver](500310) Invalid operation: null;
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:206)
    at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.awaitConnection(OpenConnectionCommand.java:132)
    at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand.access$100(OpenConnectionCommand.java:45)
    at net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand$2.run(OpenConnectionCommand.java:115)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    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)

我还可能缺少什么?谢谢!

【问题讨论】:

【参考方案1】:

简答:RTFM。

长答案:Cloudera JDBC 驱动程序附带 80 多页 PDF“安装和配置指南”。不要害羞,打开它。您可以直接前往附录 A - 驱动程序配置 并查看以下条目:

AuthMech要使用的身份验证机制。 将该值设置为以下数字之一:0 表示无身份验证1 表示 Kerberos2 表示用户名3 表示用户名和密码

SSL 当此属性设置为 1 时,驱动程序通过启用 SSL 的套接字与 Impala 服务器通信。当此属性设置为 0 时,驱动程序不会连接到启用 SSL 的套接字。

所以您的网址应该类似于jdbc:impala://blahblah:25003/default;AuthMech=3;SSL=1

还有一点:要解决 SSL 握手问题,您可以使用此 Java 系统属性启用调试跟踪...-Djavax.net.debug=ssl

【讨论】:

感谢 Samson,我尝试了您建议的 URL,然后出现新错误(请参阅问题中的更新)。你知道我错过了什么吗?谢谢! @Edamame,我敢打赌 SSL 证书验证问题——您的服务器要么使用自签名证书,要么使用由公司 C.A. 签名的证书。尚未在 JRE 的默认 TrustStore 中列出。确定启用调试跟踪标志,然后如果是这种情况,请了解Java属性javax.net.ssl.trustStore.trustStorePassword;还可以了解 keytool 实用程序以创建 JKS 格式的自定义 TrustStore。玩得开心...! @Edamame,再想一想,SSL 证书验证问题对于所发生的事情会更加冗长(javax.net.ssl.SSLHandshakeException)。谷歌关于那个错误代码和 ImpalaJDBCDriver 并玩得开心......!

以上是关于Impala JDBC 连接:错误设置/关闭会话:打开会话错误的主要内容,如果未能解决你的问题,请参考以下文章

使用jdbc查询impala时的超时问题

jdbc连接impala

夜莺5.5--实现impala自动关闭waiting to be closed会话

尝试运行 alter session 命令以通过 JDBC 设置会话变量

带有 Impala JDBC 驱动程序的业务对象

在 kerberos 授权下使用 JDBC 连接到 impala 时出错