Apache Thrift
HiveServer2 与 HiveServer2服务 都是基于这一RPC框架开发,允许远程客户端使用不同编程语言向 Hive
提交请求并返回结果。
受制于 HiveServer 1
暴露的Thrift
接口所限制,并且不能通过修改 HiveServer1
源代码来解决,从 Hive 1.0.0
版本开始,Hive 发行版中删除了 HiveServer1
HiveServer2
生产环境中使用Hive,强烈建议使用HiveServer2
来提供服务:
- 在应用侧不用部署
Hadoop和Hive
客户端; - 相比
hive-cli
方式,HiveServer2
不用直接将HDFS和Metastore
暴漏给用户; - 有安全认证机制,并且支持自定义权限校验
- 有HA机制,解决应用端的并发和负载均衡问题
- JDBC方式,可以使用任何语言,方便与应用进行数据交互;
- 从2.0开始,
HiveServer2
提供了WEB UI
。
HS2架构
HiveServer2
是 HiveServer1
的改进版,主要解决:
-
HiveServer1
无法处理来自多个客户端的并发请求 - 身份验证(
Kerberos、LDAP
和自定义可插拔的身份验证)问题。 -
HS2
基于Thrift的RPC
接口,可以处理并发客户端 -
HS2
可以看作是Hive
执行引擎的容器。对于每个客户端的连接,它创建一个新的执行上下文,应对来自客户端的Hive SQL
请求。
依赖服务
- Metastore:Metastore 可以配置为嵌入式(与 HS2 同一个进程)或者远程服务(也是基于 Thrift 的服务)。HS2访问 Metastore 以获取SQL AST解析过程中所需的元数据。
具体参考 :https://sq.163yun.com/blog/article/178698247892459520
虽说的是SparkSQL - Hadoop 集群:HS2为不同执行引擎(
MapReduce/Tez/Spark
)提供物理执行计划,并将作业提交到Hadoop
集群执行。
HS2服务启动
1.默认端口号为10000
,启动为前台服务:
bin/hiveserver2
2.启动为后台服务:
nohup bin/hiveserver2 \
1>/var/log/hiveserver.log \
2>/var/log/hiveserver.err &
3.当然也可以指定端口号来启动HS2
:
bin/hive --service hiveserver -p 10002
其中-p参数是用来指定监听端口的
4.检查 HS2
是否启动成功的最快捷的办法就是使用 netstat
命令查看 10000
端口是否打开并监听连接。
netstat -nl | grep 10000
HS2
允许在配置文件hive-site.xml
中进行配置管理
hive.server2.thrift.min.worker.threads– 最小工作线程数,默认为5。
hive.server2.thrift.max.worker.threads – 最小工作线程数,默认为500。
hive.server2.thrift.port– TCP 的监听端口,默认为10000。
hive.server2.thrift.bind.host– TCP绑定的主机,默认为localhost
metastore服务
<property>
<name>hive.metastore.uris</name>
<value>thrift://xxx.xxx.xxx.xxx:9083</value>
<description>Thrift URI for the remote metastore. Used by metastore client to con
nect to remote metastore.</description>
</property>
默认端口为9083
Web UI
Hive 2.0 以后支持Web UI的,在页面中可以直观看到当前链接的会话、历史日志、配置参数以及度量信息。Web UI默认 端口为 10002
HiveServer2 HA
Hive从0.14开始,使用Zookeeper
实现了HiveServer2
的HA功能(ZooKeeper 服务发现),Client端可以通过指定一个nameSpace来连接HiveServer2
,而不是指定某一个host和port
JDBC连接的URL格式为:
jdbc:hive2://<zookeeper quorum>/<dbName>;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2
其中:
-
<zookeeper quorum>
为Zookeeper
的集群链接串 -
<dbName>
为Hive数据库,默认为default
-
serviceDiscoveryMode=zooKeeper
指定模式为zooKeeper
-
zooKeeperNamespace=hiveserver2
指定ZK中的nameSpace
形如:
jdbc:hive2://bigdata003.xxx.com.cn:2181,bigdata004.xxx.com.cn:2181,bigdata005.xxx.com.cn:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;principal=hive/_HOST@BIGDATA.XXXX.COM.CN
客户端接入
hive/bin/beeline
回车,进入beeline的命令界面
输入命令连接hiveserver2
beeline> !connect jdbc:hive2://zk001:2181,zk002:2181,zk003:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2
,
安装提示输入用户名与密码(默认回车)
生产参数配置
HiveServer2 Heap Size 8000MB
Metastore Heap Size 6000MB
hive.server2.thrift.max.worker.threads 600
【参考】
https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Overview