共计 2279 个字符,预计需要花费 6 分钟才能阅读完成。
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