我是靠谱客的博主 清新老师,最近开发中收集的这篇文章主要介绍数仓--Hive--总结之Hive架构原理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

什么是Hive

  • Hive是由FaceBook开源用于解决海量日志文件的数据结构 ; Hive是基于Hadoop的一个数据仓库工具 , 可以将结构化的数据文件映射成一张表 , 并提供了类SQL的查询功能 , 底层计算的引擎默认是Hadoop的MapReduce(本质就是将sql转换为mapreduce程序),并且可以将引擎更换为Spark / Tez
    推荐学习博客 : 关于hive的那些事

Hive架构

在这里插入图片描述
如图所示 : Hive给我们用户提供了一系列的交互接口 , 接受用户的sql指令 , 使用自己的Driver , 再去结合元数据(Meta Store) , 将这些操作指令转换为MapReduce , 提交到Hadoop中并执行 , 最后 , 将执行结果输出到用户的交互接口 .

  • 用户接口 : CLi , JDBC/ODBC , WEBUI
  • 元数据 : Metastore
  • Hadoop : HDFS存储 , MapReduce计算
  • 驱动器 : Driver 4

Hive优点

  • 操作类SQL语法 , 简单容易上手,提升快速开发能力
  • 免去写MapReduce , 减少开发人员的开发时间成本
  • 可以与Impala / Spark等共享元数据
  • 易于扩展 , 支持自定义函数 , 自定义存储位置等

Hive的执行流程

  1. 用户提交查询等任务给Driver。
  2. 编译器 (Driver的组件) 获得该用户的任务Plan。
  3. 编译器Compiler根据用户任务去MetaStore中获取需要的Hive的元数据信息。
  4. 编译器Compiler得到元数据信息,对任务进行编译,HQL----->抽象语法树----->查询块----->逻辑的查询计划----->物理的计划(MapReduce), 最后选择最佳的策略。
  5. 将最终的计划提交给Driver。
  6. Driver将计划Plan转交给ExecutionEngine去执行,获取元数据信息,提交给JobTracker或者SourceManager执行该任务,任务会直接读取HDFS中文件进行相应的操作。
  7. 获取执行的结果。
  8. 取得并返回执行结果。

SQL转化成MapReduce过程

在这里插入图片描述
SQL转换成MapReduce的执行计划包括如下几个步骤:
HiveSQL ->AST(抽象语法树) -> QB(查询块) ->OperatorTree(操作树)->优化后的操作树->mapreduce任务树->优化后的mapreduce任务树
如图所示 :

  • Parser : 通俗理解就是SQL的语法规则 , 不用深究 , 就是将SQL转化为抽象语法树AST Tree
  • Semantic Analyzer : 遍历AST Tree , 遍历出基本组成单元QueryBlock
  • Logical plan : 遍历QueryBlock , 翻译为OpratorTree(操作树)
  • Logical plan optimizer: 逻辑层优化器进行OperatorTree变换,合并ReduceSinkOperator,减少shuffle数据量;
  • Physical plan:遍历OperatorTree,翻译为MapReduce任务;
  • Logical plan optimizer:物理层优化器进行MapReduce任务的变换,生成最终的执行计划;

最后

以上就是清新老师为你收集整理的数仓--Hive--总结之Hive架构原理的全部内容,希望文章能够帮你解决数仓--Hive--总结之Hive架构原理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部