1、背景描述
Hive的hive
与beeline
命令都可以为客户端提供Hive的控制台连接。两者之间有什么区别或联系吗?
Hive-cli(hive)是Hive提供的连接Hive数据仓库的命令行工具,从Hive出生就一直存在,但随着Hive功能的增强、BUG的修复及版本升级,Hive-cli结构的局限性已经跟不上Hive的发展,如果强行更改又不能满足向下兼容,于是就出现了全新的beeline
命令行结构。值得注意的是,Hive-cli能做的事beeline
都能做,而beeline
能做的事Hive-cli不一定能做
2、hive客户端
Hive-cli(hive
)的主要特点有:
- Hive-cli是通过访问Metastore服务操作元数据的,且只能访问Metastore服务
- CliDriver是SQL本地直接编译,然后访问Metastore,提交作业,是重客户端
- 执行
hive
会自动运行一个RunJar进程,进程是提供Thrift的RPC的,用于连接Metastore服务
3、beeline客户端
beeline
的主要特点有:
beeline
是一个纯粹的客户端,通过访问hiveserver2
服务来操作数据beeline
将SQL提交给hiveserver2
,由hiveserver2
编译,然后访问Metastore,提交作业,是轻客户端- 多用户、安全、可以实现其权限控制
4、hive与beeline的关系
hive
与beeline
的主要区别在于:
1)使用场景
- Hive-cli:适用于需要直接访问元数据和执行复杂查询的场景,但由于其结构限制,可能无法满足所有需求
- Beeline:适用于需要多用户支持、权限控制和安全性保障的场景。Beeline通过Hiveserver2进行管理,能够实现更细粒度的权限控制
2)性能差异
- 查询效率:Beeline在查询效率上通常优于Hive-cli,因为它通过Hiveserver2编译和执行SQL,减少了客户端的负担
- 功能差异:Beeline不支持UPDATE和DELETE操作,而Hive-cli则没有这些限制
beeline
有权限控制而Hive-cli没有,因为Hive-cli读取元数据绕过了hiveserver2
直接从Metastore访问元数据,而beeline
通过hiveserver2
的管控,实现其多用户的权限控制
值得注意的是,远程模式下,Beeline客户端只能通过hiveserver2
服务访问Hive,而Hive-cli(hive
)始终是通过Metastore服务访问Hive的
5、hive与beeline执行SQL
5.1、hive执行SQL(通过操作Metastore)
1) 不进入交互窗口执行SQL
hive -e "sql"
2) 执行SQL脚本文件
hive -f file.sql
5.2、beeline执行SQL(通过连接Hiveserver2)
1) 执行SQL查询
beeline -e "sql"
2) 执行SQL脚本文件
beeline -f file.sql
3) 设置变量传参执行SQL脚本文件
beeline --hivevar k1=v1 --hivevar k2=v2 ... -f file.sql