什么是Hive :
(1)Apache Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称为Hive查询语言(HQL), 用于访问和分析存储在Hadoop文件中的大型数据集。
(2)Hive核心是将HQL转换为MapReduce程序,然后将程序提交到Hadoop群集执行。
(3)Hive由Facebook实现并开源。
hive表示蜜蜂,采集,数据
为什么使用Hive :
(1)使用Hadoop MapReduce直接处理数据所面临的问题:
人员学习成本太高 需要掌握java语言
MapReduce实现复杂查询逻辑开发难度太大
(2)使用Hive处理数据的好处:
操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)
避免直接写MapReduce,减少开发人员的学习成本
支持自定义函数,功能扩展很方便
背靠Hadoop, 擅长存储分析海量数据集
Hive和Hadoop关系 :
(1)从功能来说,数据仓库软件,至少需要具备下述两种能力:存储数据的能力、分析数据的能力
(2)Apache Hive作为一款大数据时代的数据仓库软件,当然也具备上述两种能力。只不过Hive并不是自己实现了上述两种能力,而是借助Hadoop。
(3)Hive利用HDFS存储数据,利用MapReduce查询分析数据。
(4)这样突然发现Hive没啥用,不过是套壳Hadoop罢了。其实不然, Hive的最大的魅力在于用户专注于编写HQL,Hive帮您转换成为MapReduce程序完成对数据的分析。
如果让您设计Hive这款软件,要求能够实现用户只编写sql语句, Hive自动将sql转换MapReduce程序,处理位于HDFS上的结构化数据。如何实现?
实现需求:
在HDFS文件系统上有一个文件,路径为/data/china_user.txt;需求:统计来自于上海年龄大于25岁的用户有多少个?
重点理解下面两点:
Hive能将数据文件映射成为一张表,这个映射是指什么
Hive软件本身到底承担了什么功能职责?
映射信息记录 :
映射在数学上称之为一种对应关系,比如y=x+1,对于每一个x的值都有与之对应的y的值。
在hive中能够写sql处理的前提是针对表,而不是针对文件,因此需要将文件和表之间的对应关系描述记录清楚。
映射信息专业的叫法称之为元数据信息(元数据是指用来描述数据的数据 metadata)。 相当于逻辑表
具体来看,要记录的元数据信息包括:
表对应着哪个文件(位置信息)
表的列对应着文件哪一个字段(顺序信息)
文件字段之间的分隔符是什么
SQL语法解析、编译 :
(1)用户写完sql之后, hive需要针对sql进行语法校验,并且根据记录的元数据信息解读sql背后的含义,制定执行计划。
(2)并且把执行计划转换成MapReduce程序来具体执行,把执行的结果封装返回给用户。
对Hive的理解 :
Hive能将数据文件映射成为一张表,这个映射是指什么? 文件和表之间的对应关系
Hive软件本身到底承担了什么功能职责? SQL语法解析编译成 MapReduce
最终效果 : 逻辑表,物理表
基于上述分析,最终要想模拟实现的Hive的功能,大致需要下图所示组件参与其中。
从中可以感受一下Hive承担了什么职责,当然,也可以把这个理解为Hive的架构图。
Hive架构图:
Hive组件介绍:
用户接口:
包括 CLI、 JDBC/ODBC、 WebGUI。其中, CLI(command line interface)为shell命令行;
Hive中的Thrift服务器外部客户端通过网络与Hive进行交互,类似于JDBC或ODBC协议。 WebGUI是通过浏览器访问Hive。
元数据存储:
通常是存储在关系数据库如 mysql/derby中。 Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
Driver驱动程序,包括语法解析器、计划编译器、优化器、 执行器 :
执行引擎:
Hive本身并不直接处理数据文件。而是通过执行引擎处理。当下Hive支持MapReduce、 Tez、 Spark3种执行引擎。