【问题标题】:Connecting to Hive Database with DBeaver使用 DBeaver 连接到 Hive 数据库
【发布时间】:2017-12-19 21:35:14
【问题描述】:

我有一个 Hortonworks Hadoop 集群,其中数据节点位于主/头节点之外的单独网络上。访问数据节点的唯一方法是通过主节点或边缘节点。从边缘节点,我执行 hive 命令连接到我的 hive 数据库。

我无法使用 DBeaver(4.3.0,64 位 Windows)或 hive 命令行界面从我的桌面连接到 hive 数据库。通过 DBeaver,我尝试创建到我的边缘节点的 SSH 隧道并不断收到“无法使用 JDBC Uri 打开客户端传输。jdbc:hive2://127.0.0.1:[port#]/[database]

Hive/Apache Hive 驱动配置:

 General Tab:
     Host: dataNodeName
     Port: 10000
     Database/Schema: databaseName
     User name: myUID

 SSH Tunnel Tab (Network page):
     Checked Use SSH Tunnel
     Host/IP:   edgeNodeServerName
     Port:      22
     User Name: myUID
     Authentication Method:  Password
     Password:  myPWD

     Advanced
       Local port: 0
       Keep-Alive interval (ms): 0

当我选择“测试连接”并将本地端口设置为“0”时,我收到上述带有随机端口号的错误消息。如果我将本地端口设置为“10000”,则会收到端口号“10000”的上述错误。

看起来 DBeaver 忽略了通用 JDBC 连接设置——创建的 JDBC 字符串中的主机名是 127.0.0.1 而不是数据节点名。

我错过了什么?如何设置 DBeaver 以访问位于“隐藏”网络上的 Hive 数据库?

【问题讨论】:

  • HiveServer2的端口不能对外开放吗?为什么需要 SSH 隧道?
  • 换句话说,您需要通过隧道到 HiveServer 才能使其工作,而不是边缘节点。

标签: hadoop jdbc hive dbeaver


【解决方案1】:

您的主机名是否配置了 jdbc 连接语法中提到的 IP 地址 (127.0.0.1)? 你能从你的 Unix shell 连接到直线吗? 连接直线的语法(hiveserver2): beeline -u jdbc:hive2://<hostname>:<hive listener port>/<database> -n username> -p <password>

如果您能够连接到beeline,您应该能够使用来自DBeaver 的相同端口号和主机连接到hive。 Hive 侦听器端口默认配置为 10000,但您的管理员可能会更改端口号。检查 hive-site.xml 中的端口号,或从管理员处获取。

能否取消选中 SSH 隧道并尝试一下?

此链接包含从头开始的所有设置,请检查您是否遗漏了任何步骤。

https://www.linkedin.com/pulse/query-hive-hiveserver2-from-windows-using-universal-database-nimmala

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • 谢谢,但我问了他们几个问题,并提出了建议!我只是没有单独发布链接。我在这里指定了“答案的基本部分”!
  • 不要在答案中提问。将它们转化为建议。
  • 这正是我所做的!看到这一行 *******你能从你的 Unix shell 连接到直线吗?连接beeline(hiveserver2)的语法:beeline -u jdbc:hive2://:/ -n username> -p *********
【解决方案2】:

不确定您的环境是否是 Kerberized,但假设它是 -

以下是连接到 Cloudera 时对我有用的方法 -

  1. 从您的管理员处获取 krb5.conf 或 krb5.ini 并将其放置在某个目录中。我通常将文件放在放置密钥表的位置。
  2. 创建 jaas.conf 文件并将其放在同一位置(或您选择的位置)
  3. jaas.conf 必须如下所示(复制粘贴)-

    客户{ com.sun.security.auth.module.Krb5LoginModule 需要 调试=真 doNotPrompt=true useKeyTab=true keyTab="C:\Users{用户}\krb5cc_{用户}" useTicketCache=true 更新TGT=真 principal="{user}@DOMAIN.ORG" ; };

  4. 编辑您的 dbeaver.ini 文件并提供对这两个文件的引用(将以下行附加到现有的 dbeaver.ini)。确保备份 dbeaver.ini,重新安装或替换为较新的版本,dbeaver.ini 可能会被替换,在这种情况下,您可以从备份的 dbeaver.ini 文件中复制以下行 -

-Djavax.security.auth.useSubjectCredsOnly=false

-Djava.security.krb5.debug=true

-Dsun.security.krb5.debug=true

-Djava.security.krb5.conf=C:\Users{用户}\Documents\Keytabs\krb5.conf

-Djava.security.auth.login.config=C:\Users{用户}\Documents\Keytabs\jaas.conf

最后一步(您可能需要也可能不需要)

我在连接之前初始化了我的密钥表。所以我使用 Shell 命令 -

  1. 创建连接后按 F4
  2. 确保在用户中只输入要为其初始化 keytab 的用户名,没有其他内容。它不应该是 {user}@domain.org。
  3. 使用 shell 命令初始化 keytab

【讨论】:

    【解决方案3】:

    我在将 DBeaver 配置为 Hive 时也遇到了问题,我的解决方案是使用 Cloudera's ODBC Driver。它比 JDBC 驱动程序好得多(自动完成工作,更快,无需运行 kinit),我可以自动创建它。

    唯一的问题是您必须是管理员才能安装它。

    【讨论】:

      猜你喜欢
      • 2018-12-29
      • 2020-05-30
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      • 2019-06-11
      • 1970-01-01
      • 2023-01-28
      相关资源
      最近更新 更多