Hive的使用场景是什么?web
基于Hadoop作一些数据清洗啊(ETL)、报表啊、数据分析sql
能够将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。shell
Hive是SQL解析引擎,它将SQL语句转译成M/R Job而后在Hadoop执行。数据库
Hive底层的执行引擎有:MapReduce、Tez、Spark编程
Hive是C/S模式架构
客户端:并发
Client端有JDBC/ODBC和Thrift Client,可远程访问Hiveapp
能够经过shell脚本的方式访问,或者经过Thrift协议,按照平时编写JDBC的方式完成对Hive的数据操做框架
Server:CLI、Thrift Server、HWI(Hive web Interface)、Driver、Metastore函数
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链,成为逻辑计划
优化器:只提供了基于规则的优化
执行器:执行器将DAG转换为MR任务。执行器会顺序执行其中全部的Job,若是Job不存在依赖关系,采用并发的方式进行执行。
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,该任务便是集群上的执行的做业
查看执行计划。
explain select id,name from emp where deptid = 1001 order by id