Hive依托与Hadoop大数据平台,其架构随着Hadoop版本的迭代和自身的发展也在经历不断的演变,但在Hadoop步入2.x版本,Hive步入1.x版本后整体架构稳定,后续的迭代版本就没有太多重大的调整,更多的只是功能增强,例如Hive 2.x引入的LLAP,Hive 3.x 在2.x的基础上加大了对LLAP和Tez的支持。但是整体的作业的执行流程基本不变
在Hadoop 2.x版本以后,Hive所有的运行的任务都是交由YARN来统一管理。如图4.1的里面刻画YARN和Hive的协作关系。
从上面可以知道,客户端提交SQL作业到HiveServer2,HiveServer2会根据用户提交的SQL作业以及数据库中现有的元数据信息生成一份可供计算引擎执行的执行计划,每个执行计划对应若干的MapReduce作业,Hive会将所有的MapReduce作业都一一提交到YARN中,由YARN去负责创建MapReduce作业对应的子任务任务,并协调它们的运行。YARN创建的子任务会与HDFS进行交互,获取计算所需的数据,计算完成后将最终的结果写入HDFS或者本地。
从整个Hive运行作业的过程,我们可以知道Hive自身主要包含如下三个部分:
- 第一部分,客户端(client)。Hive支持多种客户端的连接,包括beeline、jdbc、thrift、HCatalog。早期的Hive Command Line(CLI)由于其可以直接操作HDFS存储的数据,权限控制较为困难,支持的用户数有限已经被废弃。
- 第二部分,HiveServer2。替代早期HiveServer提供了HTTP协议的Web服务接口和RPC协议的thrift服务接口,使得Hive能够接收多种类型客户端的并发访问,并将客户端的提交SQL进行编译转化可供计算引擎执行的作业。借助于HiveServer2,Hive可以做到更为严格的权限验证。在实际使用中需要注意HiveServre2服务Java堆大小的设置,默认情况下是50MB,在查询任务增多的情况,容器发生内存溢出导致服务崩溃,用户访问不了Hive。
- 第三部分,元数据以及元数据服务。Hive的元数据记录了Hive库内对象的信息,包括表的结构信息、分区结构信息、字段信息以及相关的统计信息等。
有用请给我点个关注,笔者笔耕不辍