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

Hadoop 使用Hive JDBC驱动程序通过Squirrel连接到Knox,hadoop,jdbc,hive,squirrel-sql,knox-gateway,Hadoop,Jdbc,Hive,Squirrel Sql,Knox Gateway,我在运行Ubuntu的计算机上创建了一台VMWare机器。我使用演示LDAP在那里设置了ApacheKnox,目前我正试图通过SQuirreL设置到Knox的连接字符串。我不能使用Hortonworks沙盒,因为我需要使它与Cloudera下的Hive兼容。在开始配置Knox之前,我希望能够首先使用HiveJDBC驱动程序连接到它。以下是我到目前为止掌握的字符串: jdbc:hive2://:8443/;ssl=1;sslTrustStore=/gateway.jks;trustStorePas

我在运行Ubuntu的计算机上创建了一台VMWare机器。我使用演示LDAP在那里设置了ApacheKnox,目前我正试图通过SQuirreL设置到Knox的连接字符串。我不能使用Hortonworks沙盒,因为我需要使它与Cloudera下的Hive兼容。在开始配置Knox之前,我希望能够首先使用HiveJDBC驱动程序连接到它。以下是我到目前为止掌握的字符串:

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

我的具体问题是:

  • 我的
    sslTrustStore
    应该使用什么路径?它目前位于
    /home//Downloads/knox-1.0.0/data/security/keystores/gateway.jks
    。我试着用同样的线来画完整的路径,但仍然没有成功

  • 我应该为
    httpPath
    使用什么?我的虚拟机上没有特定的配置单元,因为Knox将使用配置单元连接到Hadoop节点

  • 连接字符串中还有什么我遗漏的吗

  • 在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)
    

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

  • 您是对的,您需要使用
    security/keystores/gateway.jks
    路径,以便Beeline(或任何JDBC客户机)可以信任Knox提供的证书
  • 看起来您正在使用Apache Knox,因此您的路径类似于
    gateway/sandbox/hive
    (您需要更新
    sandbox.xml
    拓扑下的hive服务url)
    gateway/default/hive
    主要由Ambari配置的Knox实例使用,我认为在您的案例中不是这样
  • 尝试进行一些更改,例如
    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
    
    beeline-u“jdbc:hive2://:8443/;ssl=true;sslTrustStore=/var/lib/knox/security/keystores/gateway.jks;trustStorePassword=;transportMode=http;httpPath=gateway/sandbox/hive”-n admin-p admin password
    
    现在开始一些调试

  • 我认为,如果你只是在你的主机操作系统(而不是虚拟机)上下载Knox并与Hive对话,这会更容易。Knox需要“视线”来服务it代理,而虚拟机可能会很棘手。此外,我发现排除故障和检查日志很方便。您不需要在同一台机器上运行蜂箱,只需要一条到诺克斯的视线就足够了
  • 请确保
    hive server.xml
    具有属性
    hive.server2.servermode=http
    ,这会一直困扰我:)
  • 这说明了如何使用Knox和JDBC连接到Hive2,它使用groovy脚本,但您只需查看设置和连接字符串
  • 这是另一个使用KnoxShell连接到Hive2的方法
  • 希望这有帮助