千家信息网

Hive体系结构是怎么样的

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章给大家分享的是有关Hive体系结构是怎么样的的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。第一部分:概念概念•用户接口:用户访问Hive的入口•元数据:Hive的用
千家信息网最后更新 2026年10月31日Hive体系结构是怎么样的

这篇文章给大家分享的是有关Hive体系结构是怎么样的的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

第一部分:概念

概念

•用户接口:用户访问Hive的入口

•元数据:Hive的用户信息与表的MetaData

•解释器:分析翻译HQL的组件

•编译器:编译HQL的组件

•优化器:优化HQL的组件

第二部分:Hive架构与基本组成

架构图

基本组成

•用户接口,包括 CLI,JDBC/ODBC,WebUI

•元数据存储,通常是存储在关系数据库如 mysql, derby 中

•解释器、编译器、优化器、执行器

•Hadoop:用 HDFS 进行存储,利用 MapReduce 进行计算

各组件的基本功能

•用户接口主要有三个:CLI,JDBC/ODBC和 WebUI

•CLI,即Shell命令行

•JDBC/ODBC 是 Hive 的JAVA,与使用传统数据库JDBC的方式类似

•WebGUI是通过浏览器访问 Hive

•Hive 将元数据存储在数据库中,目前只支持 mysql、derby,下一版本会支持更多的数据库。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等

•解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行

•Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比如 select * from table 不会生成 MapRedcue 任务)

Metastore

•Metastore是系统目录(catalog)用于保存Hive中所存储的表的元数据(metadata)信息

•Metastore是Hive被用作传统数据库解决方案(如oracle和db2)时区别其它类似系统的一个特征

•Metastore包含如下的部分:

•Database 是表(table)的名字空间。默认的数据库(database)名为'default'

•Table 表(table)的原数据包含信息有:列(list of columns)和它们的类型(types),拥有者(owner),存储空间(storage)和SerDei信息

•Partition 每个分区(partition)都有自己的列(columns),SerDe和存储空间(storage)。这一特征将被用来支持Hive中的模式演变(schema evolution)

Compiler

•Driver调用编译器(compiler)处理HiveQL字串,这些字串可能是一条DDL、DML或查询语句

•编译器将字符串转化为策略(plan)

•策略仅由元数据操作和HDFS操作组成,元数据操作只包含DDL语句,HDFS操作只包含LOAD语句

•对插入和查询而言,策略由map-reduce任务中的具有方向的非循环图(directedacyclic graph,DAG)组成

第三部分:Hive运行模式

Hive运行模式

•Hive的运行模式即任务的执行环境

•分为本地与集群两种

•我们可以通过mapred.job.tracker 来指明

•设置方式

•hive > SET mapred.job.tracker=local

第四部分:数据类型

原始数据类型

•Integers

TINYINT - 1 byte

SMALLINT - 2 byte

INT - 4 byte

BIGINT - 8 byte

•Boolean type

BOOLEAN - TRUE/FALSE

•Floating point numbers

FLOAT -单精度

DOUBLE - 双精度

•String type

STRING - sequence of characters in a specified character set

复杂数据类型

•Structs: 例子 {c INT; d INT}

•Maps (key-value tuples):. 例子'group' -> gid M['group']

•Arrays (indexable lists): 例子['1', '2', '3']

•TIMESTAMP 0.8版本新加属性

第五部分:Hive的元数据存储

存储方式与模式

•Hive 将元数据存储在 数据库中

•连接到数据库模式有三种

•单用户模式

•多用户模式

•远程服务器模式

单用户模式

此模式连接到一个 In-memory 的数据库 Derby ,一般用于 Unit Test

多用户模式

通过网络连接到一个数据库中,是最经常使用到的模式

远程服务器模式

•用于非 Java 客户端访问元数据库,在服务器端启动MetaStoreServer,客户端利用 Thrift 协议通过MetaStoreServer 访问元数据库

第六部分:Hive的数据存储

Hive数据存储的基本概念

•Hive的数据存储是建立在Hadoop HDFS之上的

•Hive没有专门的数据存储格式

•存储结构主要包括:数据库、文件、表、视图

•Hive默认可以直接加载文本文件,还支持sequence file 、RCFile

•创建表时,我们直接告诉Hive数据的列分隔符与行分隔符,Hive即可解析数据

Hive的数据模型-数据库

•类似传统数据库的DataBase

•在第三方数据库里实际是一张表

•简单示例

•命令行hive > create database test_database;

Hive的数据模型-表

•Table 内部表

•Partition 分区表

•External Table 外部表

•Bucket Table

内部表

•与数据库中的 Table 在概念上是类似

•每一个 Table 在 Hive 中都有一个相应的目录存储数据

•例如,一个表 test,它在 HDFS 中的路径为:/ warehouse /test

• warehouse是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的数据仓库的目录

•所有的 Table 数据(不包括 External Table)都保存在这个目录中。

•删除表时,元数据与数据都会被删除

内部表简单示例

•创建数据文件test_inner_table.txt

•创建表

•create table test_inner_table (key string)

•加载数据

•LOAD DATA LOCAL INPATH 'filepath' INTO TABLE test_inner_table

•查看数据

•select * from test_inner_table

•select count(*) from test_inner_table

•删除表 drop table test_inner_table

分区表

•Partition 对应于数据库中的 Partition 列的密集索引

•在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中

•例如:test表中包含 date 和 position 两个 Partition,则对应于 date = 20120801, position = zh 的 HDFS 子目录为:/ warehouse /test/date=20120801/ position =zh

•对应于 = 20100801, position = US 的HDFS 子目录为;/ warehouse /xiaojun/date=20120801/ position =US

分区表简单示例

•创建数据文件test_partition_table.txt

•创建表

•create table test_partition_table (key string) partitioned by (dt string)

•加载数据

•LOAD DATA INPATH 'filepath' INTO TABLE test_partition_table partition (dt='2006')

•查看数据

•select * from test_partition_table

•select count(*) from test_partition_table

•删除表 drop table test_partition_table

外部表

•指向已经在 HDFS 中存在的数据,可以创建 Partition

•它和 内部表 在元数据的组织上是相同的,而实际数据的存储则有较大的差异

•内部表 的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除

• 外部表 只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。当删除一个 外部表 时,仅删除该链接

外部表简单示例

•创建数据文件test_external_table.txt

•创建表

•create external table test_external_table (key string)

•加载数据

•LOAD DATA INPATH 'filepath' INTO TABLE test_inner_table

•查看数据

•select * from test_external_table

•select count(*) from test_external_table

•删除表 drop table test_external_table

Bucket Table

•可以将表的列通过Hash算法进一步分解成不同的文件存储

•例如:将age列分散成20个文件,首先要对AGE进行Hash计算,对应为0的写入/warehouse/test/date=20120801/postion=zh/part-00000,对应为1的写入/warehouse/test/date=20120801/postion=zh/part-00001

•如果想应用很多的Map任务这样是不错的选择

Bucket Table简单示例

•创建数据文件test_bucket_table.txt

•创建表

•create table test_bucket_table (key string)

clustered by (key) into 20 buckets

•加载数据

•LOAD DATA INPATH 'filepath' INTO TABLE test_bucket_table

•查看数据

•select * from test_bucket_table

•set hive.enforce.bucketing = true;

Hive的数据模型-视图

•视图与传统数据库的视图类似

•视图是只读的

•视图基于的基本表,如果改变,指增加不会影响视图的呈现;如果删除,会出现问题

•如果不指定视图的列,会根据select语句后的生成

•示例

•create view test_view as select * from test

第七部分:HiveUI介绍

启动UI

•配置

•hive-site.xml 添加

hive.hwi.war.file

lib/hive-hwi-0.8.1.war

•

•启动Hive的UI sh $HIVE_HOME/bin/hive --service hwi

感谢各位的阅读!关于"Hive体系结构是怎么样的"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

数据 存储 数据库 模式 目录 文件 视图 用户 查询 编译 示例 语句 部分 编译器 过程 仓库 任务 传统 信息 概念 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 蓝思科技飞鸽互联网 科技互联网龙头 易互联网科技有限公司 万易互联网科技有限公司 北京互联网络科技有限公司 友谊互联网络科技 上游互联网科技 丰台科技园 互联网公司 互联网 科技馆 江苏南京365互联网科技 宁波青枫互联网科技有限公司 成都互联网科技公司100强 互联网金融科技公司干啥的 南山科技园互联网公司有哪些 企晟互联网信息科技有限公司 工业互联网等科技实现智能化赋能 无锡工业互联网科技有限公司 互联网相关科技技术 郑州欣桑互联网科技有限公司 互联网时代科技型公司的机会 互联网是第几次科技革命的成果 科技服务与互联网 万易互联网科技有限公司 伴你行互联网科技有限公司 互联网科技股午盘股票涨跌 江苏互联网科技小贷 上海乐五互联网科技有限公司 互联网科技手机排行榜 盐城市攀科互联网科技有限公司 瑞安市蟠桃会互联网科技有限公司
0