1 Hive Client、Hive Beeline Client
Hive发展至今,总共历经了两代客户端工具。
第一代客户端(deprecated不推荐使用):$HIVE_HOME/bin/hive, 是一个 shellUtil。主要功能:一是可用于以交互或批处理模式运行Hive查询;二是用于Hive相关服务的启动,比如metastore服务。
第二代客户端(recommended 推荐使用):$HIVE_HOME/bin/beeline,是一个JDBC客户端,是官方强烈推荐使用的Hive命令行工具,和第一代客户端相比,性能加强安全性提高。
Beeline Shell在嵌入式模式和远程模式下均可工作。在嵌入式模式下,它运行嵌入式 Hive(类似于Hive Client),而远程模式下beeline通过 Thrift 连接到单独的 HiveServer2 服务上,这也是官方推荐在生产环境中使用的模式。
那么问题来了,HiveServer2是什么?HiveServer1哪里去了?
2 HiveServer、HiveServer2服务
HiveServer、HiveServer2都是Hive自带的两种服务,允许客户端在不启动CLI的情况下对Hive中的数据进行操作,且两个都允许远程客户端使用多种编程语言如java,python等向hive提交请求,取回结果。
但是,HiveServer不能处理多于一个客户端的并发请求。因此在Hive-0.11.0版本中重写了HiveServer代码得到了HiveServer2,进而解决了该问题。HiveServer已经被废弃。
HiveServer2支持多客户端的并发和身份认证,旨在为开放API客户端如JDBC、ODBC提供更好的支持。
3 Hive服务和客户端关系梳理
HiveServer2通过Metastore服务读写元数据。所以在远程模式下,启动HiveServer2之前必须先首先启动metastore服务。
特别注意:远程模式下,Beeline客户端只能通过HiveServer2服务访问Hive。而Hive Client是通过Metastore服务访问的。具体关系如下:
4 Hive Client使用
在hive安装包的bin目录下,有hive提供的第一代客户端 bin/hive。该客户端可以访问hive的metastore服务,从而达到操作hive的目的。
友情提示:如果您是远程模式部署,请手动启动运行metastore服务。如果是内嵌模式和本地模式,直接运行bin/hive,metastore服务会内嵌一起启动。
可以直接在启动Hive metastore服务的机器上使用bin/hive客户端操作,此时不需要进行任何配置。
#远程模式 首先启动metastore服务
/home/hive-3.1.2/bin/hive --service metastore
#克隆CRT会话窗口 使用hive client连接
/home/hive-3.1.2/bin/hive
如果需要在其他机器上通过bin/hive访问hive metastore服务,只需要在该机器的hive-site.xml配置中添加metastore服务地址即可。
选择一台从节点进行测试:
#上传hive安装包到另一个机器上,比如hadoop139:
cd /home/
tar zxvf apache-hive-3.1.2-bin.tar.gz
mv apache-hive-3.1.2-bin hive-3.1.2
解决hadoop、hive之间guava版本差异
#解决hadoop、hive之间guava版本差异
cd /home/hive-3.1.2/
rm -rf lib/guava-19.0.jar
cp /home/hadoop-3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/
修改hive环境变量文件 添加Hadoop_HOME
#修改hive环境变量文件 添加Hadoop_HOME
cd /home/hive-3.1.2/conf
mv hive-env.sh.template hive-env.sh
vim hive-env.sh
export HADOOP_HOME=/home/hadoop-3.1.4
添加metastore服务地址
#添加metastore服务地址
cd /home/hive-3.1.2/conf/
vim hive-site.xml
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://hadoop138.com:9083</value>
</property>
</configuration>
注意:hadoop138.com是我这边的hive服务
启动hive
bin/hive
启动后使用show databases;命令,会发现显示的数据库和服务端一样,说明配置成功。
4.5 Hive Beeline Client使用
hive经过发展,推出了第二代客户端beeline,但是beeline客户端不是直接访问metastore服务的,而是需要单独启动hiveserver2服务。
在hive运行的服务器上,首先启动metastore服务,然后启动hiveserver2服务。
#先启动metastore服务 然后启动hiveserver2服务
nohup /home/hive-3.1.2/bin/hive --service metastore &
nohup /home/hive-3.1.2/bin/hive --service hiveserver2 &
在node3上使用beeline客户端进行连接访问。需要注意hiveserver2服务启动之后需要稍等一会才可以对外提供服务。
Beeline是JDBC的客户端,通过JDBC协议和Hiveserver2服务进行通信,协议的地址是:jdbc:hive2://hadoop138.com:10000
#启动beeline
/home/hive-3.1.2/bin/beeline
#连接hive
beeline> !connect jdbc:hive2://hadoop138.com:10000
#输入用户名密码
Connecting to jdbc:hive2://hadoop138.com:10000
Enter username for jdbc:hive2://hadoop138.com:10000: root
Enter password for jdbc:hive2://hadoop138.com:10000: ******
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://hadoop138.com:10000>
使用show databases;命令进行测试
版权归原作者 不死鸟.亚历山大.狼崽子 所有, 如有侵权,请联系我们删除。