什么是Hive?
Hive是在Hadoop分布式文件系统(HDFS)之上开发的ETL和数据仓库工具。 Hive使执行操作变得容易
- 数据封装
- 即席查询
- 分析庞大的数据集
Hive重要特征
- 在Hive中,首先创建表和数据库,然后将数据加载到这些表中。
- Hive作为数据仓库,用于管理和查询存储在表中的结构化数据。
- 在处理结构化数据时,Map Reduce没有像UDF这样的优化和可用性功能,但Hive框架有。 查询优化是指在性能方面执行查询的有效方法。
- Hive的SQL语言将用户与Map Reduce编程的复杂性区分开来。 它重用了关系数据库世界中熟悉的概念,例如表,行,列和模式等,以便于学习。
- Hadoop的编程适用于平面文件。 因此,Hive可以使用目录结构来“分区”数据,以提高某些查询的性能。
- Hive的一个新的重要组件,即用于存储架构信息的Metastore。 此Metastore通常驻留在关系数据库中。 我们可以使用类似的方法与Hive进行交互Web GUI或者Java数据库连接(JDBC)接口
- 大多数交互往往通过命令行界面(CLI)进行。 Hive提供了一个使用Hive查询语言(HQL)编写Hive查询的CLI
- 通常,HQL语法类似于大多数数据分析师熟悉的SQL语法。 下面的Sample查询显示了所提到的表名中的所有记录。 示例查询 :Select * from <TableName>
- Hive支持四种文件格式,即TEXTFILE,SEQUENCEFILE,ORC和RCFILE(记录列文件 Record Columnar File)。
- 对于单用户元数据存储,Hive使用derby数据库,对于多用户元数据或共享元数据情况,Hive使用MYSQL。
关于Hive的一些关键点:
- HQL和SQL之间的主要区别在于Hive查询在Hadoop的基础及架构而不是传统数据库上执行。
- Hive查询执行将像一系列自动生成的map reduce Jobs。
- Hive支持分区和存储桶概念,以便在客户端执行查询时轻松检索数据。
- Hive支持用于数据清理,过滤等的自定义特定UDF(用户定义函数)。根据程序员的要求,可以定义Hive UDF。
Hive与关系数据库比较
通过使用Hive,我们可以执行一些在关系数据库中无法实现的特殊功能。 对于大量的peta字节数据,查询它并在几秒钟内获得结果非常重要。 Hive非常有效地执行此操作,它可以快速处理查询并在第二时间生成结果。
现在让我们看看是什么让Hive如此之快。
Hive和关系数据库之间的一些关键差异如下:
关系数据库是“ READ上的Schema和Write上的Schema ”。 首先创建一个表,然后将数据插入到特定的表中。 在关系数据库表上,可以执行插入,更新和修改等功能。
Hive是“只读READ的架构 ”。 因此,更新,修改等功能不适用于此。 因为典型群集中的Hive查询在多个数据节点上运行。 因此无法跨多个节点更新和修改数据。(Hive版本低于0.13)
此外,Hive支持“ READ Many WRITE Once ”模式。 这意味着在插入表后我们可以更新最新的Hive版本中的表。
注意 :然而,新版本的Hive具有更新的功能。 Hive版本(Hive 0.14)提供了更新和删除选项作为新功能
Hive架构
image.png上面的屏幕截图详细介绍了Apache Hive架构
Hive主要由3个核心部分组成
- 客户端
Hive为与不同类型的应用程序的通信提供了不同的驱动程序。 对于基于Thrift的应用程序,它将为Thrift客户端提供通信。
对于Java相关的应用程序,它提供JDBC驱动程序。 除了提供ODBC驱动程序的任何类型的应用程序。 这些客户端和驱动程序又在Hive服务中与Hive服务器进行通信。
- 服务
客户端与Hive的交互可以通过Hive Services执行。 如果客户端想要在Hive中执行任何与查询相关的操作,则必须通过Hive Services进行通信。
CLI是命令行界面,充当DDL(数据定义语言)操作的Hive服务。 所有驱动程序都与Hive服务器和Hive服务中的主驱动程序进行通信,如上面的体系结构图所示。
Hive服务中的驱动程序代表主要驱动程序,它传递所有类型的JDBC,ODBC和其他客户端特定的应用程序。 驱动程序将处理来自不同应用程序的请求到元存储和现场系统以进行进一步处理。
- Hive存储和计算
诸如Meta存储,文件系统和作业客户端之类的Hive服务又与Hive存储通信并执行以下操作:在Hive中创建的表的元数据信息存储在Hive“元存储数据库”中;表中加载的查询结果和数据将存储在HDFS上的Hadoop集群中。
从上面的屏幕截图中我们可以了解Hive与Hadoop中的作业执行流程
Hive中的数据流表现为以下模式;
-
从UI执行查询(用户界面)
-
驱动程序正在与Compiler交互以获取计划。 (此处计划是指查询执行)过程及其相关的元数据信息收集
-
编译器为要执行的作业创建计划。 编译器与Meta商店通信以获取元数据请求
-
元存储将元数据信息发送回编译器
-
编译器与Driver通信,提议执行查询计划
-
驱动程序将执行计划发送到执行引擎
-
行引擎(EE)充当Hive和Hadoop之间的桥梁来处理查询。 对于DFS操作。
- EE应首先联系Name Node,然后联系Data节点以获取存储在表中的值。
- EE将从数据节点中获取所需的记录。 表的实际数据仅驻留在数据节点中。 从名称节点开始,它仅获取查询的元数据信息。
- 它从与所述查询相关的数据节点收集实际数据
- 执行引擎(EE)与Hive中存在的Meta存储进行双向通信,以执行DDL(数据定义语言)操作。 这里完成了DDATE操作,如CREATE,DROP和ALTERING表和数据库。
- 元存储将仅存储有关数据库名称,表名称和列名称的信息。 它将获取与提到的查询相关的数据。
- 执行引擎(EE)反过来与Hadoop守护进程(如Name节点,数据节点和作业跟踪器)进行通信,以在Hadoop文件系统之上执行查询
-
驱动程序中获取结果
-
结果发送到执行引擎。 将结果从数据节点提取到EE后,它会将结果发送回驱动程序和UI(前端)
Hive通过执行引擎持续与Hadoop文件系统及其守护进程联系。 作业流程图中的虚线箭头显示了执行引擎与Hadoop守护程序的通信。
参考资料
- python测试开发项目实战-目录
- python工具书籍下载-持续更新
- python 3.7极速入门教程 - 目录
- 讨论qq群630011153 144081101
- 原文地址
- 本文涉及的python测试开发库 谢谢点赞!
- [本文相关海量书籍下载](https://github.com/china-testing/python-api-tesing/blob/master/books.md
不同的Hive模式
Hive可以在两种模式(Local和Map reduce)下运行,具体取决于Hadoop中数据节点的大小。
何时使用本地模式:
- 如果Hadoop在伪模式下安装并具有一个数据节点
- 如果数据大小仅限于单个本地机器,我们可以使用此模式
- 本地机器中存在的较小数据集进行处理将非常快
何时使用Map reduce模式:
- 如果Hadoop有多个数据节点并且数据分布在不同的节点上,我们在这种模式下使用Hive
- 它将对大量数据集执行并且查询将以并行方式执行
- 通过该模式可以实现具有更好性能的大数据集的处理
在Hive中,我们可以设置此属性以提及Hive可以使用哪种模式? 默认情况下,它适用于Map Reduce模式,对于本地模式,您可以进行以下设置。
Hive以本地模式设置工作
SET mapred.job.tracker=local;
从Hive版本0.7开始,它支持一种模式,可以自动在本地模式下运行map reduce作业。
什么是Server2 (HS2)?
HiveServer2(HS2)是一个执行以下功能的服务器接口:
- 使远程客户端能够对Hive执行查询
- 检索提到的查询的结果
从最新版本开始,它具有一些基于Thrift RPC的高级功能;
- 多客户端并发
- 认证
小结:
Hive是一个位于Hadoop生态系统之上的ETL和数据仓库工具,用于处理结构化和半结构化数据。
- Hive是Hadoop生态系统中执行DDL和DML操作的数据库,它提供灵活的查询语言(如HQL),以便更好地查询和处理数据。
- 与RDMS相比,它提供了许多功能,具有一定的局限性。
用于满足客户要求的用户特定逻辑。
- 它提供编写和部署自定义脚本和用户定义函数的选项。
- 此外,它还为存储特定逻辑提供分区和存储区。
网友评论