如何优化Hive查询?看这篇

本文详细介绍了Hive查询的流程,并提出了优化Hive查询的8条原则,包括开启FetchTask、合并中间表、合理使用分区表、JVM重用、推测执行、设置合适的reduce个数、开启并行执行以及优化SQL等,旨在提升Hive查询效率。
摘要由CSDN通过智能技术生成

Hive查询过程

根据上图,查询组件主要包括:

UI(user interface)

        –用户提交查询或者其他操作,现在标准UI有CLI(command line interface),Thrift Serve,Hive web interface(HWI)。

Driver(驱动)

         –负责接收查询及其他操作,Driver 实现了会话句柄的概念,并提供在基于JDBC / ODBC的execute和fetch API

Compiler(编译器)

         – 解析查询的sql,对不同的块和不同的查询表达式进行语义分析,借助metastore中的表和分区的元数据定义生成执行计划。

Metastore

        –存储所有表及分区的结构信息,包含列名,列的数据类型,读取和写入的序列化器和反序列化器以及相关的HDFS文件存储目录

Execution Engine(执行引擎)

         –执行compiler所产生的执行计划。该执行计划是一个阶段的DAG,执行引擎关联执行计划中不同阶段的之间依赖,并负责在不同的系统组件中执行不同的阶段。

查询流程

(1)Step 1:UI(user interface)调用的Driver的execute接口

(2)Step 2:Driver为查询创建会话句柄,并将查询发送给compiler以生成执行计划,

(3)Step 3 and 4:compiler从metastore获取相关的元数据定义

(4)Step 5:元数据用于对查询树中的表达式进行类型检查,以及基于查询谓词调整分区,生成计划

(5)Step 6, 6.1, 6.2 and 6.3:由compiler生成的执行计划是阶段的DAG,每个阶段都会涉及到Map/Reduce job,元数据的操作或者HDFS文件的操作。在Map/Reduce阶段,执行计划包含Map 操作树(操作树在Mappers上执行)和reduce操作树(Reduce 操作树在 Reducers上执行),Execution Engine 将各个阶段提交个适当的组件执行。

(6)Step 7, 8 and 9:在每个任务(mapper / reducer)中,表或者中间输出相关的反序列化器从HDFS读取行,并通过相关的操作树进行传递。一旦这些输出产生&#

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值