使用DBeaver连接Hive数据库

5
我有一个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隧道? - OneCricketeer
换句话说,为了使其正常工作,您需要对HiveServer进行隧道连接,而不是边缘节点。 - OneCricketeer
3个回答

2
您的主机名是否配置了在jdbc连接语法中提到的IP地址(127.0.0.1)? 您能够从Unix shell连接到beeline吗? 连接到beeline(hiveserver2)的语法: beeline -u jdbc:hive2://<hostname>:<hive listener port>/<database> -n username> -p <password> 如果您能够连接到beeline,则应该能够使用相同的端口号和主机连接到Hive。 默认情况下,Hive侦听器端口配置为10000,但是管理员有可能更改端口号。请检查hive-site.xml中的端口号,或者向管理员获取端口号。
请取消选中SSH隧道并尝试连接。
此链接包含从头开始的所有设置,请检查是否漏掉了任何步骤。

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


1
虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分,并提供参考链接。如果链接页面发生更改,仅有链接的答案可能会变得无效。-【来自审核】 - Roman Pokrovskij
谢谢,但我问了他们几个问题,并提出了建议!我只是没有单独发布链接。我在这里指定了“答案的关键部分”! - Rohit Nimmala
不要在答案中提问,将它们转化为建议。 - GhostCat
这正是我所做的!看到这一行 你能够从你的Unix shell连接到Beeline吗?连接到Beeline(HiveServer2)的语法:beeline -u jdbc:hive2://<主机名>:<Hive监听器端口>/<数据库> -n <用户名> -p <密码>** - Rohit Nimmala

0

我也曾经遇到了在 DBeaver 中配置 Hive 的困难,我的解决方法是使用 Cloudera 的 ODBC 驱动程序。它比 JDBC 驱动程序工作得更好(自动完成功能正常,速度更快,无需运行 kinit),我还可以自动创建它。

唯一的问题是,你必须拥有管理员权限才能安装它。


0

不确定您的环境是否已经启用 Kerberos,但是我们假设已经启用了 -

以下是我在连接 Cloudera 时所使用的步骤 -

  1. 从管理员处获取 krb5.conf 或 krb5.ini 文件,并将其放置在某个目录中。我通常会将文件放在一个位置,与我的 keytabs 放在同一目录下。
  2. 创建 jaas.conf 文件并将其放置在相同的位置(或您选择的位置)。
  3. jaas.conf 必须像下面这样(复制粘贴)-

    Client { com.sun.security.auth.module.Krb5LoginModule required debug=true doNotPrompt=true useKeyTab=true keyTab="C:\Users{user}\krb5cc_{user}" useTicketCache=true renewTGT=true 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{User}\Documents\Keytabs\krb5.conf

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

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

在连接之前,我会初始化我的keytab。所以我使用Shell命令 -

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

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接