美文网首页Hive在简书
hive学习(五)——原理解析

hive学习(五)——原理解析

作者: 大数据阶梯之路 | 来源:发表于2019-08-22 15:37 被阅读0次

    一、Hive的服务端组件

    • Driver组件:该组件里包含Compiler、Optimizer、Executor,负责将hiveQL进行编译、解析、优化并转化为MapReduce任务提交给hadoop的SourceManager来进行实际的任务处理。
    • MetaStore组件:存储着hive的元数据信息,将元数据信息存储到例如mysql或者derby这种关系型数据库,元数据主要包含表的名称、表的列和分区等属性、以及表的数据所在目录。

    二、Hive的编译过程

    (Parser)先把hiveQL转化为抽象语法树AST,(Semantic Analyzer)再把抽象语法树转化为查询块QB,(Logic Plan Generator)之后转化为逻辑查询计划OP Tree,(LogicalOptimizer)再重写逻辑查询计划,(Physical Plan Generator)然后将逻辑查询计划转化为物理查询计划Task Tree,(PhysicalOptimizer)最后选择最佳Join策略。
    产物:hiveQL-->抽象语法树-->查询块-->逻辑查询计划-->物理查询计划(MRjobs)-->最佳Join策略
    过程:Parser-->Semantic Analyzer-->Logic Plan Generator-->LogicalOptimizer-->Physical Plan Generator-->PhysicalOptimizer

    操作符是Hive的最小处理单元,每个操作符处理代表一道HDFS操作或MapReduce作业

    借用而来.png

    三、Hive的执行原理

    Hive的执行入口是Driver,执行的SQL语句首先提交到Driver驱动,然后调用compiler解释驱动,最终解释成MapReduce任务去执行。


    图片.png

    大致流程是:

    • 1、用户提交查询等任务给Driver
    • 2、编译器获取该用户的任务Plan
    • 3、编译器Compiler根据用户任务去MetaStore中获取需要的元数据信息
    • 4、编译器得到元数据信息,对任务进行编译
    • 5、将最终的计划提交给Driver
    • 6、Driver将任务Plan转交给ExecutionEngine去执行,获取元数据信息,提交给SourceManager执行该任务,任务会直接读取HDFS中文件进行相应的操作。
    • 7、获取执行的结果
    • 8、取得并返回执行结果

    附参考文章:https://blog.csdn.net/qq_36864672/article/details/78648248

    四、Hive面试常问简易问答

    • 1、hive内部表与外部表的区别?
      内部表:删除表时,会把表结构和底层数据都删掉,底层数据存在于HDFS中
      外部表:删除表时,仅仅只是删除表结构而已,底层数据hive是没权限删除的,底层数据存在于HDFS中
    • 2、hive分区的作用?
      答:分区主要是为了把大文件夹分成多个小文件夹,一方面方便我们业务的扩展,另一方面也便于我们表的健壮性,一般是应用于大表中,小表也没必要分区,在一定程度上可以减少数据倾斜的可能。
    • 3、order by 与sort by 的区别?
      答:order by会把所有的数据通过一个reducer进行处理,对于大数据集的话,这个过程就会很慢,所以尽量少用。
      sort by 只会在每个reducer中对数据进行排序,当使用的reducer个数大于1的话,这样全局排序和局部排序的结果就区别出来了。
      使用distribute by+sort by方式进行分组排序,被distribute by设定的字段为key,数据会被hash分发到不同的reducer机器中,然后sort by针对同一个reducer机器上的每组数据进行局部排序。
    • 4、什么是UDF?
      答:是用户自定义函数,主要用来解决hive提供的函数无法满足实际需求的时候,需要继承UDF类。
    class TestUDF extends UDF{
        //方法
    }
    
    • 5、hive优化
      答:有各种手段,比如设置参数hive.groupby.skewindata=true自动负载均衡,比如解决group by可能导致的数据倾斜问题,比如使用静态分区。

    附参考文章:
    1、hive面试题1
    2、hive面试题2
    3、MapReduce原理解析

    相关文章

      网友评论

        本文标题:hive学习(五)——原理解析

        本文链接:https://www.haomeiwen.com/subject/uuowjctx.html