Hive Cli 和 Beeline

前言

你们怎么直接用hive命令进hive呢?为什么不使用beeline,另一个部门的同事,看到我直接输入hive 回车进入hive,感到很困惑。我说有什么区别吗?我一直都用的cli,从未用过beeline。这个同事说区别是:

cli 服务器是HiveServer,而beeline服务器是HiveServer2。HiveServer不能处理多个客户端的并发请求,所以产生了HiveServer2。

我一听就懵逼了,怎么可能?我们好几个同事都在用hive,而且不同的客户端并发访问从来就没有过任何问题,但是的确用hive直接回车进入时,无论我们旧集群(版本:Hive 1.1.0-cdh5.16.1)还是新集群(版本:Hive 2.1.1-cdh6.2.1),都会有一个警告:

WARNING: Hive CLI is deprecated and migration to Beeline is recommended.

官网解开了迷惑

从hive1.0.0开始,HiveServer已经不存在了,从Hive代码中删除了,Hive Cli 也使用的是HiveServer2了,这对用户来说是透明的

我之前使用的hive版本完全不用考虑cli和beeline的问题

为什么不直接删除Hive Cli命令,而仅仅留下Beeline呢

Hive CLI是一个有两个主要用例的遗留工具。第一个是作为Hadoop上的SQL的客户端,第二个是作为Hive服务器(原始的Hive服务器,现在通常称为“HiveServer1”)的命令行工具。从Hive 1.0.0 (Hive -6977)开始,Hive服务器已经被弃用并从Hive代码库中移除,取而代之的是HiveServer2 (Hive -2935),所以第二个用例不再适用。对于第一个用例,Beeline提供或应该提供相同的功能,但实现方式与Hive CLI不同。

理想情况下,Hive CLI应该被弃用,因为Hive社区一直建议使用Beeline + HiveServer2配置;然而,由于Hive CLI的广泛使用,我们正在替换Hive CLI的实现,取而代之的是一个新的Hive CLI在Beeline加上嵌入式HiveServer2 (Hive -10511),所以Hive社区只需要维护一个单一的代码路径。这样,新的Hive CLI只是shell脚本层和高级代码层的一个别名。目标是使用Hive CLI不需要对现有用户脚本进行任何或最小的更改。

如何进入Beeline

beeline -u jdbc:hive2://[HiveServer2节点的ip或对应的hostname]:10000
比如:

beeline -u jdbc:hive2://10.169.x.xx:10000

在CDH中也可以直接查看HiveServer2安装在哪台节点了:
在这里插入图片描述

[xc@node01 ~]$ beeline -u jdbc:hive2://10.169.x.xx:10000
Connecting to jdbc:hive2://10.169.x.xx:10000
Connected to: Apache Hive (version 2.1.1-cdh6.2.1)
Driver: Hive JDBC (version 2.1.1-cdh6.2.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 2.1.1-cdh6.2.1 by Apache Hive
0: jdbc:hive2://10.169.x.xx:10000> 

发布了237 篇原创文章 · 获赞 140 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/Android_xue/article/details/103527195