使用直线连接到 Hive

Posted

技术标签:

【中文标题】使用直线连接到 Hive【英文标题】:Connecting to Hive using Beeline 【发布时间】:2015-03-18 02:50:07 【问题描述】:

我正在尝试通过 Beeline 客户端连接到我的机器中安装的配置单元。当我给出“直线”命令并连接到 Hive 时,客户端要求输入用户名和密码

!connect jdbc:hive2://localhost:10000/default

我不知道我应该提供的用户名和密码是什么。我是否必须在某些配置文件中添加凭据(用户名和密码)?

【问题讨论】:

【参考方案1】:

通过直线访问 HIVE:

启动直线客户端

beeline --incremental=true

注意:命令行选项“--incremental=true”是可选的,但会延长您可以保持空闲且连接不中断的时间。

连接到 hive2 服务器

!connect jdbc:hive2://silver-server-
hive.app.google.com:10000/default

注意:系统将提示您输入用户名和密码。使用用户名和密码

beeline> !connect jdbc:hive2:// silver-server-hive.app.google.com:10000/default
scan complete in 3ms
Connecting to jdbc:hive2:// silver-server-hive.app.google.com:10000/default
Enter username for jdbc:hive2:// silver-server-hive.app.google.com:10000/default:suman
Enter password for jdbc:hive2:// silver-server-hive.app.google.com:10000/default: *********

设置队列(如果有)

set mapred.job.queue.name=<your queue name>; 

注意:您需要设置队列才能运行查询。

设置你的数据库

USE google_map_data;

注意:执行查询时,您应该在数据库中。

重新连接非活动会话

!reconnect jdbc:hive2:// silver-server-hive.app.google.com:10000/default; 

退出beeline客户端

!quit

注意事项:

在一个命令中加载直线、URL 并提供您的用户名和密码:

beeline -u jdbc:hive2:// silver-server-hive.app.google.com:10000\ 
-n <yourname> -p <yourpassword> --incremental=true**

基本直线查询

Beeline 支持一组丰富的 SQL 查询函数。

获取有关数据的信息

SHOW DATABASES;
USE <database>;

SHOW TABLES;
DESC <table>;
DESC FORMATTED <table>;

简单的有限选择语句

SELECT * FROM google_map_city limit 25;

【讨论】:

【参考方案2】:

没有用户名和密码。

!connect jdbc:hive2://localhost:10000/default

  Enter username for jdbc:hive2://localhost:10000/default: <press Enter>
  Enter password for jdbc:hive2://localhost:10000/default: <press Enter>

只需按回车键。它对我有用。

或者试试这个。

!connect jdbc:hive2://localhost:10000/default "" "" ""

【讨论】:

谢谢@sravan & Jit B ;看起来我必须运行 HiveServer2 才能使用主机名从 Beeline 连接。正在关注一本书的细节......他们没有提到这个:(。启动了 HiverServer2 并按照描述连接。现在可以通过直线连接。 添加到我的评论中;虽然我已经使用空的用户名和密码从 Beeline 成功连接到 Hive;由于权限相关的问题,查询没有正确执行。相信。使用当前用户的 Linux(Ubuntu) uid & pwd 登录。现在查询成功执行【参考方案3】:

在启用了 Kerberos 安全性的情况下使用 beeline 配置 hive 服务器

 beeline -u "jdbc:hive2://<Server Ip>:<port>/sample;principal=<hive user>/<Server Ip>@<relam>;retries=3"

例子

 beeline -u "jdbc:hive2://10.10.10.10:8071/sample;principal=hive/10.10.10.10@abc.com;retries=3"

【讨论】:

【参考方案4】:

您可以使用@sravan 提到的空白用户名和密码。这将以运行 hiveserver2 进程的用户身份执行查询。

但是,如果您在 hive-site.xml 中设置了 hive.server2.enable.doAs 属性,或者在运行 hiveserver2 时将其放入 hiveconf 中,那么您可以选择通过提示传递用户名和密码。在这种情况下,hive 将使用给定的密码作为传递的用户名执行查询。这里的用户名是系统用户名。

在某些情况下它是必需的 - 假设您正在以用户“hive”的身份运行 hiveserver2 进程,但您有一个使用 HDFS 路径 /user/alex/table1 定义的外部表,该表由用户“alex”拥有,并且没有其他用户对此位置具有读/写访问权限。在这种情况下,将查询作为“hive”运行 - 通过输入空的用户名和密码 - 将不起作用,因为它将无法访问目录并引发权限被拒绝异常。

【讨论】:

【参考方案5】:

是用来登录集群的用户名和密码。有时它是您用来登录服务器的边缘节点凭据。 避免这种情况的最佳方法是使用以下命令

beeline -u jdbc:hive2://localhost:10000/default

如果您已经通过 putty 登录到某个节点,则不会提示您输入任何用户 ID 或密码。

编辑

技巧: 为避免重复输入整个直线字符串,最好在 bash_profile 文件中创建一个别名。

只需在 bash 配置文件中添加以下行(@Harsimranjit Singh Kler 建议使用 kerberos 安全性) beeline -u jdbc:hive2://&lt;hostname&gt;:10000/default;principal=hive/&lt;hostname&gt;@&lt;realm&gt;;ssl=true; 和 获取 bash_profile (source .bash_profile) 就完成了。 下次只需输入beeline,它就会连接到hive2服务器

【讨论】:

【参考方案6】:

是的,您可以在 tge conf 文件夹内的 hive-site.xml 文件中设置用户名和密码。默认凭据为APP/mine

how to get database username and password in hive

【讨论】:

【参考方案7】:

• 在一个命令中加载直线、URL 并提供您的用户名和密码:

**beeline -u jdbc:hive2:// silver-server-hive.app.google.com:10000\ 
-n <yourname> -p <yourpassword> --incremental=true**

【讨论】:

以上是关于使用直线连接到 Hive的主要内容,如果未能解决你的问题,请参考以下文章

直线无法连接到 hive2server

无法使用直线连接到配置单元,用户 root 无法模拟匿名

无法使用 Zookeeper 连接字符串通过 JDBC 连接到 Hive

连接到Hortonworks Hadoop / Hive

使用 Rstudio windows 中的 R rJDBC 包连接到 hive(启用了 kerbero)

通过远程jdbc方式连接到hive数据仓库