HiveServer2

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架构

image.png

HiveServer2HiveServer1 的改进版,主要解决:

  • 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容