使用Hive JDBC驱动程序通过Squirrel连接到Knox

时间:2018-07-03 15:47:02

标签: hadoop jdbc hive squirrel-sql knox-gateway

我在运行Ubuntu的计算机上创建了VMWare计算机。我使用演示LDAP在那儿设置了Apache Knox,目前我正在尝试通过SQuirreL设置到Knox的连接字符串。我无法使用Hortonworks沙箱,因为我需要使其与Cloudera下的Hive兼容。在开始配置Knox之前,我希望能够首先使用Hive JDBC驱动程序连接到它。这是我到目前为止的字符串:

jdbc:hive2://<host>:8443/;ssl=1;sslTrustStore=/gateway.jks;trustStorePassword=<master secret>?hive.server2.transport.mode=http;httpPath=gateway/default/hive

我的具体问题是:

  1. sslTrustStore应该使用什么路径?当前位于/home/<user>/Downloads/knox-1.0.0/data/security/keystores/gateway.jks中。我用完整的路径尝试了相同的字符串,但还是没有运气。

  2. httpPath应该使用什么?我的VM没有专门安装Hive,因为Knox将使用Hive连接到Hadoop节点。

  3. 连接字符串中还有其他内容吗?

在SQuirreL中,收到错误消息并单击“堆栈跟踪”后,这是我所得到的基本内容:

java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.sql.SQLException: [Cloudera][HiveJDBCDriver](500164) Error initialized or created transport for authentication: \home\anudeep\Downloads\knox-1.0.0\data\security\keystores\gateway.jks (The system cannot find the path specified).
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    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(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

1 个答案:

答案 0 :(得分:0)

您可以不使用Knox直接连接到Hive吗?查看堆栈跟踪,似乎找不到密钥库(gateway.jks),这可能是权限问题。尝试在主机上安装Knox。我从VM连接到外部服务(在Host OS上运行)时遇到很多问题,但这可能就是我自己。 调试的方法很少,在此之前,我先回答您的问题:

  1. 是的,您需要使用security/keystores/gateway.jks路径,以便Beeline(或任何JDBC客户端)可以信任Knox提供的证书。
  2. 好像您正在使用Apache Knox,因此您的路径看起来像gateway/sandbox/hive(您需要在sandbox.xml拓扑下更新HIVE服务URL)。 gateway/default/hive主要由Ambari配置的Knox实例使用,我认为这种情况并不正确。
  3. 尝试进行一些更改,例如ssl=true,并使用冒号(:)代替transport.mode来代替查询字符串(?),即;transportMode=http

这是适用于Beeline的连接方式

beeline -u "jdbc:hive2://<knox-host>:8443/;ssl=true;sslTrustStore=/var/lib/knox/security/keystores/gateway.jks;trustStorePassword=<trustPassword>;transportMode=http;httpPath=gateway/sandbox/hive" -n admin -p admin-password

现在进行一些调试。

  1. 我认为,如果您仅在主机操作系统(而不是VM)上下载Knox并与Hive交谈,这将变得更加容易,Knox需要“视线”来为其代理服务提供服务,而使用VM则很棘手。另外,我发现对故障排除和检查日志非常方便。您不需要Hive在同一台机器上运行,只要Knox视线就足够了。
  2. 确保hive-server.xml具有属性hive.server2.servermode=http,这使我无时无刻:)
  3. tutorial/example说明了如何使用JDBC使用Knox连接到Hive2,它使用了Groovy脚本,但是您只能查看设置和连接字符串。
  4. 这是另一个使用KnoxShell连接到Hive2的example

希望这会有所帮助。