1、Hive产生背景

  • MapReduce编程的不便性
  • HDFS上的文件短少Schema(表名,名称,ID等,为数据库对象的汇合)

2、Hive是什么

Hive的应用场景是什么?

基于Hadoop做一些数据荡涤啊(ETL)、报表啊、数据分析

能够将结构化的数据文件映射为一张数据库表,并提供类SQL查问性能。

Hive是SQL解析引擎,它将SQL语句转译成M/R Job而后在Hadoop执行。

  • 由Facebook开源,最后用于解决海量结构化的日志数据统计问题
  • 构建在Hadoop之上的数据仓库
  • Hive定义了一品种SQL查询语言:HQL(相似SQL但不完全相同)
  • 通常用于进行离线数据处理(晚期采纳MapReduce)
  • 底层反对多种不同的执行引擎(当初能够间接把Hive跑在Spark下面)

Hive底层的执行引擎有:MapReduce、Tez、Spark

3、Hive 特点

  • Hive 最大的特点是 Hive 通过类 SQL 来剖析大数据,而防止了写 MapReduce 程序来剖析数据,这样使得剖析数据更容易
  • Hive 是将数据映射成数据库和一张张的表,库和表的元数据信息个别存在关系型数据库上(比方 MySQL)
  • Hive 自身并不提供数据的存储性能,数据个别都是存储在 HDFS 上的(对数据完整性、格局要求并不严格)
  • Hive 很容易扩大本人的存储能力和计算能力,这个是继承自 hadoop 的(实用于大规模的并行计算)
  • Hive 是专为 OLAP(在线剖析解决) 设计,不反对事务

4、Hive体系架构

Hive是C/S模式

客户端:

Client端有JDBC/ODBC和Thrift Client,可近程拜访Hive

能够通过shell脚本的形式拜访,或者通过Thrift协定,依照平时编写JDBC的形式实现对Hive的数据操作

Server:CLI、Thrift Server、HWI(Hive web Interface)、Driver、Metastore

  • 其中CLI、Thrift Server、HWI是裸露给Client拜访的独立部署的Hive服务
  • Driver、Metastore是Hive外部组件,Metastore还能够供第三方SQL on Hadoop框架应用
  • beeine(Hive 0.11引入),作为Hive JDBC Client拜访HiveServer2,解决了CLI并发拜访问题

Driver:

输出了sql字符串,对sql字符串进行解析,转化程形象语法树,再转化成逻辑打算,而后应用优化工具对逻辑打算进行优化,最终生成物理打算(序列化反序列化,UDF函数),交给Execution执行引擎,提交到MapReduce上执行(输出和输入能够是本地的也能够是HDFS/Hbase)见下图的hive架构

Metastore:

Metastore进行元数据管理:Derby(内置 )、Mysql;Derby:Derby只承受一个Hive的会话拜访;Mysql:Hive跑在Hadoop之上的,Mysql进行主备(定时同步操作)

由上图可知,hadoop 和 mapreduce 是 hive 架构的根基。

MetaStore:存储和治理Hive的元数据,应用关系数据库来保留元数据信息。

解析器和编译器:将SQL语句生成语法树,而后再生成DAG模式的Job链,成为逻辑打算

优化器:只提供了基于规定的优化

  • 列过滤:去除查问中不须要的列
  • 行过滤:Where条件判断等在TableScan阶段就进行过滤,利用Partition信息,只读取符合条件的Partition
  • 谓词下推:缩小前面的数据量
  • Join形式
    。 Map端join: 调整Join程序,确保以大表作为驱动表,小表载入所有mapper内存中
    。 shuffle join:依照hash函数,将两张表的数据发送给join
    。对于数据分布不平衡的表Group by时,为防止数据集中到多数的reducer上,分成两个map-reduce阶段。第一个阶段先用Distinct列进行shuffle,而后在reduce端局部聚合,减小数据规模,第二个map-reduce阶段再按group-by列聚合。
    。 sort merge join:排序,依照程序切割数据,雷同的范畴发送给雷同的节点(运行前在后盾创建设两张排序表,或者建表的时候指定)
    。 在map端用hash进行局部聚合,减小reduce端数据处理规模。

执行器:执行器将DAG转换为MR工作。执行器会程序执行其中所有的Job,如果Job不存在依赖关系,采纳并发的形式进行执行。

5、基于Hadoop上的Hive SQL的执行流程

sql写进去当前只是一些字符串的拼接,所以要通过一系列的解析解决,能力最终变成集群上的执行的作业

1.Parser:将sql解析为AST(形象语法树),会进行语法校验,AST实质还是字符串

2.Analyzer:语法解析,生成QB(query block)

3.Logicl Plan:逻辑执行打算解析,生成一堆Opertator Tree

4.Logical optimizer:进行逻辑执行打算优化,生成一堆优化后的Opertator Tree

5.Phsical plan:物理执行打算解析,生成tasktree

6.Phsical Optimizer:进行物理执行打算优化,生成优化后的tasktree,该工作即是集群上的执行的作业

  • 论断:通过以上的六步,一般的字符串sql被解析映射成了集群上的执行工作,最重要的两步是 逻辑执行打算优化和物理执行打算优化(图中红线圈画)

查看执行打算。

explain select id,name from emp where deptid = 1001 order by id