当前位置:   article > 正文

HiveServer2 和 HiveMetastore 梳理_hive的metastore与hiveserver2

hive的metastore与hiveserver2

本文重新回顾一下Hive的两个核心服务:HiveServer2 和 HiveMetastore(HMS)。很多人会简单地把HiveServer2当成Hive的JDBC/ODBC服务,不启动HiveServer2服务,就没有10000端口,JDBC/ODBC客户端就连接不上Hive。从使用者的角度理解这就够了。如果要deep dive一下,HiveServer2的功能不止这些。我们知道:如果把Hive整体当做一个黑盒,则它的输入是用户提交的sql,它的输出是提交后的MR作业,用一句概括Hive的功能就是:将sql语句“转译”成MR作业,这实际上也正是HiveServer2的主要工作内容。更加细致一点的表述是:一般客户端会使用Hive的JDBC驱动连接到Hiveserver2(Hiveserver2通过Thrift RPC框架实现的JDBC服务端),然后将SQL语句提交给Hiveserver2,Hiveserver2会进行SQL的解析编译优化,在这个过程中Hiveserver2需要跟HiveMetastore服务通信以得到数据库和数据表的元数据,HiveMetastore服务会将数据库的元数据信息存储到数据库中。最终Hiveserver2将SQL编译为MapReduce作业运行在MapReduce/Tez/Spark分布式计算引擎上。HiveMetastore和HiveServer2都是独立运行的服务,对外提供基于Thrift协议的服务接口。

以下是不同平台和视角绘制的Hive架构图,基本都是一致的:

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

上述4张图描述的已经非常清晰了,我们再详细介绍一下Hive Driver。从这些图上可知:似乎Hiveserver2的主要工作都由这个Driver包揽了,尤其是编译,优化和执行都是由Driver主导和协调的。实际上,这里的Driver是Hive中的一个重要的类:org.apache.hadoop.hive.ql.Driver,也就是说这已经进入到了Hive的内部设计细节了,设计者设计各种重要的业务实体,抽象各种概念,将不同的职责委派给合适的类,所以回到话题本身,Driver类确实是Hiveserver2中的一个核心的类,组织与串联了SQL提交后到转译为MR作业的关键操作,但是从大的架构层面上, 我们可以认为这是HiveServer2的职责和工作内容。

接下来,我们分别看一下HiveServer2和HiveMetastore的进程和端口情况:

  • HiveServer2的进程和端口

在这里插入图片描述

  • HiveMetastore的进程和端口

不同于,HiveServer2,HiveMetastore的进程有一点隐秘,使用jps罗列进程时是看不到Metastore相关进程的,改使用ps aux | grep metastore可以查到对应进程!之所以jps中看不到是因为metastore服务的主类是org.apache.hadoop.util.RunJar,使用jps时,仅仅显示为RunJar,所以很容易被忽视。

在这里插入图片描述

Hive Metastore占用9083端口对外提供服务,这个9083正是在hive-site.xml中的:

  <property>
    <name>hive.metastore.uris</name>
    <value>thrift://xxx.xxx.xxx.xxx:9083</value>
  </property>
  • 1
  • 2
  • 3
  • 4

参考:

https://www.interviewbit.com/blog/hive-architecture/

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/429593
推荐阅读
相关标签
  

闽ICP备14008679号