Hive概述
架构于Hadoop之上,可以将结构化的HDFS文件映射成一张表,并提供了类似于SQL语法的HQL查询功能
核心本质:将HQL语句转换成MapReduce任务
Hive的主要优缺点
优点: 避免了开发人员去实现Map和Reduce的接口,大大降低了学习成本 HQL语法类似于SQL语法,简单、容易上手
缺点: 执行效率比较低 Hive生成的MapReduce任务,不够智能化,容易造成数据倾斜
Hive架构图
每个模块负责的内容: Meta Store: 元数据,一般存储在mysql Client: 客户端 Driver:驱动器 HQL Parse: 解析器,HQL解析和语法分析 Physical Plan: 编译生成逻辑执行计划 Query Optimizer: 对逻辑执行计划进行优化 Execution: 把逻辑执行计划转换成物理执行计划 Hadoop Map Reduce: 执行计算 HDFS: 文件存储 MapReduce 执行原理 MapReduce是一种分布式计算模型,由Map和Reduce组成。 Map()负责把一个大的block块进行切片并计算。 Reduce() 负责把Map()切片的数据进行汇总、计算。
执行的核心思想: 相同key的键值对为一组调用一次Reduce方法,方法内迭代这组数据进行计算。
【Map Reduce 详细步骤图】
ODPS与Hive的关系 ODPS是阿里基于Hive的核心思想构建的,不同的是Hive的文件存储在hdfs上,ODPS则存在阿里的盘古里。而且ODPS针对Hive做了一些优化
【ODPS架构图】
ODPS针对HIVE的优化 Query Optimizer 优化器的优化
RBO: 基于规则的优化器 (Oracle 6-9i, Hive)
? 一种过时的优化器框架,它只认规则,对数据不敏感。优化是 局部贪婪,容易陷入局部优但是全局差的场景,容易受应用规 则的顺序而生产迥异的执行计划,往往结果是不是最优的。
CBO:基于代价的优化器 (Oracle 8开始,Oracle 10g完 全取代RBO; MaxCompute)
? Volcano模型,展开各种可能等价的执行计划,然后依赖数据
的统计信息,计算这些等价执行计划的“代价”,最后从中选 用cost最低的执行计划。
最典型的优化点:
distinct 的性能优化到和 group by 一致 reduce 分配更加平滑
|