文章目录
- 1.概述
- 1.1 hive与hadoop的关系
- 1.2 映射信息记录
- 1.3 hive架构图
- Hive组件
- 2.Hive数据模型
- 2.1 Table
- 2.2 Partition
- 2.3 Buckets
- 3.元数据相关名词
- 3.1 Metadata
- 3.2 Metastore
- 3.3 metastore三种配置方式
- 3.3.1 内嵌模式
- 3.3.2 本地模式
- 3.3.3 远程模式
1.概述
Apach hive 是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop的hdfs系统中的结构化、半结构化文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称之为Hive查询语言(HQL),用于访问和分析存储在Hadoop文件中的大型数据集。
Hive核心:将HQL转换为MapReduce程序,然后将程序提交到Hadoop集群执行,Hive是由Facebook实现并开源的。
1.1 hive与hadoop的关系
hive借助hadoop实现了数据仓库软件所具有的分析数据和存储数据的能力,hive利用hdfs来实现对数据的存储,利用mapreduce来实现对数据的分析和计算。
hive最大的魅力在于用户只需要根据业务逻辑去编写HQL,hive将用户编写的hql转换为MR程序来完成对数据的分析。
1.2 映射信息记录
在hive中能实现写sql处理的前提是针对表,而不是针对文件,因此需要将文件和表之间的对应关系描述记录清楚。映射信息专业的叫法叫做元数据信息(元数据:即用来描述数据的数据)。
hive将表中的数据存储在hdfs上,将表的元数据信息存储在RDBMS(关系型数据库,如MySQL)上。
1.3 hive架构图
用户在写完sql之后,hive需要对sql进行语法校验,并且会根据记录的元数据信息找到对应的文件,制定执行计划,并且将执行计划转换成MR程序调用执行引擎来执行,执行完成后,将结果返回给用户。
Hive组件
用户接口:包括CLI、JDBC/ODBC、WebGUI。
元数据存储:元数据通常存储在关系数据库:MySQL/derby中。
Driver驱动程序:包括语法解析器、计划编译器、优化器、执行器:完成HQL查询语句的词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并且随后有执行引擎调用执行。
执行引擎:Hive本身不直接处理数据文件,而是通过执行引擎处理,当下hive支持MR、Tez、Spark 3种执行引擎。
2.Hive数据模型
Hive中的数据可以在粒度级别上分为三类:
Table表
Partition分区
Bucket分桶
2.1 Table
Hive表与关系数据库中的表相同。Hive中的表所对应的数据是存储在Hadoop的文件系统中,而表相关的数据是存储在关系型数据库中
2.2 Partition
Partition分区是hive的一种优化手段表。分区是指根据分区列(如根据日期day属性的值将表划分为不同的分区)
分区在存储层面上的表现是:table表目录下以子文件夹形式存在。
一个文件夹表示一个分区。子文件命名标准:分区列=分区值
2.3 Buckets
Bucket分桶表是hive的一种优化手段表。分桶是指根据表中字段(如ID的值),经过hash计算规划将数据文件划分为指定的若干个小文件。
分桶规则:hashfunc(ID)%桶的个数,余数相同的分到同一个文件中。
3.元数据相关名词
3.1 Metadata
metadata即元数据,元数据包含用Hive创建的database、table、表的位置、类型、属性、字段顺序等元信息。
3.2 Metastore
Metastore即元数据服务。Metastore服务的作用是管理metadata,对外暴露服务地址,让各种客户端通过连接metastore服务,由metastore再去连接MySQL数据库来获取元数据。
有了metastore服务,各个客户端可以同时连接metastore,而这些客户端不需要知道mysql的用户名和密码,只需要连接metastore服务即可,某种程度上也保证了hive元数据的安全。
3.3 metastore三种配置方式
3.3.1 内嵌模式
内嵌模式(Embedded Metastore)是metastore默认部署模式。此种模式下,元数据存储在内置的Derby数据库,并且Derby数据库和metastore服务都嵌入在主HiveServer进程中,当启动HiveServer进程时,Derby和metastore都会启动。不需要额外起Metastore服务。
但是一次只能支持一个活动用户,适用于测试体验,不适用于生产环境。
3.3.2 本地模式
本地模式(Local Metastore)下,Hive Metastore服务与主HiveServer进程在同一进程中运行,但是存储元数据的数据库在单独的进程中运行,并且可以在单独的主机上。metastore服务将通过JDBC与metastore数据库进行通信。
本地模式采用外部数据库来存储元数据,推荐使用MySQL。
hive根据hive.metastore.uris 参数值来判断,如果为空,则为本地模式。
缺点是:每启动一次hive服务,都内置启动了一个metastore。
3.3.3 远程模式
远程模式(Remote Metastore)下,Metastore服务在其自己的单独JVM上运行,而不在HiveServer的JVM中运行。如果其他进程希望与Metastore服务器通信,则可以使用Thrift Network API进行通信。
在生产环境中,建议用远程模式来配置Hive Metastore。在这种情况下,其他依赖hive的软件都可以通过Metastore访问hive。由于还可以完全屏蔽数据库层,因此这也带来了更好的可管理性/安全性。
远程模式下,需要配置hive.metastore.uris 参数来指定metastore服务运行的机器ip和端口,并且需要单独手动启动metastore服务。