Hive的学习之路(理论篇)
一、Hive介绍
Apache官网给出的logo,一半是Hadoop大象的头,一半是蜜蜂的身体,也是寓意着它是基于Hadoop,哈哈,纯属个人理解,进入正题。
Hive是基于Hadoop的一个数据仓库工具,可以将sql语句转换成MapReduce任务来运行。可以用来数据提取、转化、加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。
Hive定义了简单的类sql查询语言,成为HiveQL,它允许熟悉SQL的用户查询数据。
HiveSQL:Hive通过类sql的语法,来进行分布式的计算。HQL用起来和SQL非常的相似,Hive在执行的过程中会将HQL转换为MapReduce去执行,所以Hive其实就是基于Hadoop的一种分布式计算框架,底层依然是MapReduce程序,因此它本质上还是一种离线大数据分析工具。
二、Hive的适用场景
Hive是构建在静态(离线)批处理的Hadoop之上,Hadoop通常有较高的延迟并且在作业提交和调度的时候需要大量的开销。因此,Hive并不能在大规模数据上实现低延迟快速的查询。
Hive查询操作过程严格遵守Hadoop MapReduce的作业执行模型,Hive将用户的HiveQL语句通过解释器转换为MapReduce作业提交到Hadoop集群 中,Hadoop监控作业执行过程,然后返回作业执行结果给用户。Hive并非为联机事务处理而设计,Hive并不提供实时的查询和基于行级的数据更新操作。Hive的最佳使用场景:大规模数据的离线批处理作业,例如网络日志分析等。
三、Hive的体系结构
用户接口主要有3个:CLI,JDBC和WUI
①CLI,最常用的模式:实际上平时在>hive命令下操作,就是CLI用户接口
②JDBC,通过java代码操作,需要启动hiveserver,然后连接操作
MetaStroe元数据库
Hive将元数据存储在数据库中,如mysql,derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
解释器(Compiler)、优化器(optimizer)、执行器(executor)组件
这三个组件:HQL语句从词法分析、语法分析、编译、优化、以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行
Hadoop
Hive的数据存储在Hadoop中,大部分的查询、计算由MapReduce完成
四、Hive的原理分析
通过上图来分析Hive的原理(HQL的底层执行过程):
①客户端提交一条HQL语句(左侧UI部分)
②Driver将该HQL转发给Compiler(编译组件)对HQL进行词法分析、语法分析。在此,编译器要知道hql语句到底操作哪张表。
③底层查询元数据库(MetaStroe)寻找表信息(默认是derby数据库,后续会换成mysql)
④返回元信息
⑤Compiler编译器提交hql语句分析方案
⑥执行流程
i.executor执行器收到方案后,执行方案,在此需要注意:执行器在此执行方案时,会进行判断:如果不涉及MR组件,比如为表添加分区信息,简单的查询操作等,此时会直接与元数据库进行交互,然后去HDFS直接寻找具体数据;如果方案需要转换成MRJob,则会将job提交给Hadoop的JobTracker(后续为Yarn)
ii.MR Job执行完成,并且将结果写入HDFS中
iii.执行器与HDFS交互,获取结果文件信息
⑦如果客户端提交的hql语句是带有查询结果性,则会发生7~8~9,完成结果的查询。
最新文章
- JDBC入门学习
- selenium RC+JAVA 笔记 一
- gulp和grunt的区别
- 获取select当前选择的值和文本
- tomcat6.0添加ssi(*.shtml)配置
- HDU4857——逃生(反向建图+拓扑排序)(BestCoder Round #1)
- 实时时钟、系统时钟和CPU时钟的区别
- ubuntu mint 15 编译安装PHP开发环境
- Android Studio下打jar包
- 承诺c指针 (1)指针是地址
- 通过VBA,当在EXCEL单元格中输入任意的日期格式时,都能自动转换为指定的标准格式的日期值
- 分布式文件系统FastDFS如何做到高可用
- map文件的使用
- hash专题学习笔记QAQ
- [转]Google 全球 IP 地址库
- 85. Maximal Rectangle 由1拼出的最大矩形
- 关于派生类访问基类对象的保护变量的问题 --Coursera
- 【淘宝客】批量提取QQ号
- swift出师作,史丹佛大学游戏制作案例,计算器,小游戏
- codechef May Challenge 2016 FORESTGA: Forest Gathering 二分
热门文章
- 378. 有序矩阵中第K小的元素
- rabbitmq 命令行与控制台
- VS Code 配置 C/C++ (Windwos)
- tomcat查看当前内存
- VS2015生成代码图
- Go_type
- 排序:ORDER BY
- laravel执行数据库迁移的过程中出现Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] Operation timed out (SQL: select * from information_schema.tables where table_schema = shop and table_name = migrations
- opencv:像素统计信息
- maven打包一直报class not found错误