HIVE 数据仓库工具
一、Hive 概述
1.1 Hive 是什么
- Hive是由faceBook开源,最初用于解决海量结构化的日志数据统计问题,它可以作为ETL
工具。 - Hive最初是构建在Hadoop之上的数据仓库
- 数据计算是MapReduce
- 数据存储是HDFS
- Hive 定义了一种类SQL的查询语言——HQL
- Hive 适合离线数据处理
- Hive 是将HQL转换为MR的语言翻译器
1.2 Hive 产生的背景
Hive 的诞生源于 Facebook 的日志分析需求,面对海量的结构化数据, Hive 能够以较低的成本完成以往需要大规模数据库才能完成的任务,并且学习门槛相对较低,应用开发灵活且高效。
后来Facebook将 Hive 开源给了 Apache,成为 Apache的一个顶级项目,至此Hive在大数据应用方面得到了快速的发展和普及。
1.3 Hive 优缺点
1.3.1 Hive的优点
- Hive适合数据的批处理,解决了传统关系型数据库在海量数据处理上的瓶颈。
- Hive构建在Hadoop之上,充分利用了集群的存储资源、计算资源。
- Hive学习使用成本低,支持标准的SQL语法,这样就免去了编写MapReduce程序的过程减少了开发成本。
- 具有良好的扩展性,且能够实现与其他组件的集成开发
1.3.2 Hive 的缺点
- HQL的表达能力依然有限,不支持迭代计算,有些复杂的运算用 HQL不易表达,还需要单独编写MapReduce来实现。
- Hive的运行效率低、延迟高,这是因为Hive底层计算引擎默认为MapReduce,而MapReduce是离线计算框架。
- Hive的调优比较困难,由于HQL语句最终会转换为MapReduce任务,所以Hive的调优还需要考虑MapReduce层面的优化。
1.4 Hive在Hadoop生态系统中的位置
1.5 Hive 和 Hadoop的关心
Hive利用HDFS来存储数据,利用MapReduce来查询分析数据,那么Hive与Hadoop之间的关系总结如下。
- Hive需要构建在Hadoop集群之上。
- Hive中的所有数据都存储在Hadoop分布式文件系统中。
- 对HQL查询语句的解释、优化、生成查询计划等过程均是由 Hive 完成的,而查询计划被转化为 MapReduce 任务之后需要运行在 Hadoop 集群之上。
二、Hive 原理及架构
2.1 Hive 的设计原理
Hive 是一种构建在Hadoop之上的数据仓库工具,可以使用HQL 语句对数据进行分析和查询而Hive的底层数据都存储在HDFS中。Hive在加载数据过程中不会对数据进行任何的修改,只是将数据移动到指定的HDFS目录下,因此,Hive不支持对数据的修改。
2.2 Hive 特点
- 支持索引,加快数据查询。
- 不同的存储类型,例如,纯文本文件、HBase 中的文件。
- 将元数据保存在关系数据库中,大大减少了在查询过程中执行语义检查的时间。
- 可以直接使用存储在Hadoop 文件系统中的数据。
- 内置大量用户自定义函数(user define function,简称UDF)来对时间、字符串进行操作,支持用户扩展UDF 函数来完成内置函数无法实现的操作。
- HQL语句最终会被转换为MapReduce任务运行在Hadoop集群之上。
2.3 Hive的体现结构
2.4 Hive的运行机制
2.5 Hive 的转换过程
2.6 Hive 的数据类型
2.6.1 Hive 的基本数据类型
2.6.2 Hive 的复杂数据类型
2.7 Hive 的数据存储
-
表(table)
Hive的表在逻辑上由存储的数据和描述表中数据形式的相关元数据组成。数据一般存放在HDFS中,但它也可以放在其他任何Hadoop文件系统中,包括本地文件系统或S3。Hive把元数据存放在关系型数据库中,而不是放在HDFS中。在Hive中创建表时,默认情况下Hive负责管理数据。这意味着Hive把数据移入它的“仓库目录”另外一种选择是创建一个外部表(external table),这会让Hive到仓库目录以外的位置访问数据。 -
分区(Partiti