hive
Hive是一个基于Hadoop的数据仓库工具,它提供了类似于SQL的查询语言HiveQL来查询和分析大规模数据。Hive将结构化的数据文件映射为一张数据库表,并提供了SQL查询、数据导入导出等功能。HiveQL支持大部分SQL语法,可以在Hadoop集群上执行MapReduce任务来处理数据。它广泛应用于大数据处理场景,例如数据分析、数据挖掘、日志分析等。
hive架构
-
jdbc、commandLine Intefafce(CLI)、hive thrift server、hive web Interface
-
元数据存储
存储表、表字段、分区字段、分区信息、表格式等数据
-
Hive驱动程序
parse解析器->plan任务计划->Optimizer优化器->Executor执行器
-
hive可在哪些计算引擎上执行
Mapreduce、Tez、Spark
-
计算引擎资源调度组件
yarn资源调度系统
-
Hive可读写哪些数据:
hadoop hdfs/hbase/rds
Hive的架构主要包括以下组件
Metadata Store
元数据存储(Metadata Store):Hive使用元数据存储来管理表、分区、列等信息。元数据存储通常使用关系型数据库(如MySQL、Derby等)来存储,其中记录了表结构、分区信息、表与文件之间的映射关系等。
commandLine Interface
Hive提供了多种用户接口,包括命令行界面(CLI)、图形界面(Hue)、Web接口(Beeline)等,用户可以通过这些接口与Hive进行交互。
Driver
驱动器(Driver):驱动器是Hive的核心组件,负责解析用户提交的HiveQL语句,生成查询计划,并将其转换为一系列的MapReduce任务或Tez任务。驱动器还负责与Hadoop集群的资源管理器通信,调度任务的执行,并收集执行结果返回给用户。
Compiler
查询编译器(Query Compiler):查询编译器负责将用户提交的HiveQL查询语句转换为查询计划。它会对查询语句进行语法和语义检查,确定需要执行的操作(如选择、投影、连接等),并根据数据的存储格式和分布情况生成相应的物理计划。
Execution
执行引擎(Execution Engine):执行引擎负责执行查询计划,并将计算任务分解为一系列的MapReduce任务或Tez任务。执行引擎会与Hadoop集群的资源管理器进行交互,申请执行所需的计算资源,并监控任务的执行情况。
Storage Management
存储管理(Storage Management):存储管理模块负责将数据存储在Hadoop分布式文件系统(HDFS)中,并管理数据的存储格式、压缩方式、分区策略等。Hive支持多种数据存储格式,如文本、序列文件、Parquet、ORC等。
MetaStore Service
元数据服务(MetaStore Service):元数据服务提供了对元数据存储的访问接口,用于查询和修改表、列、分区等信息。它可以独立于Hive运行,也可以与Hive运行在同一个进程中。
Hive的抽象模型
-
数据库(Database):Hive中的数据库是一个逻辑容器,用于组织和管理表。每个数据库可以包含多个表,并具有唯一的名称。
-
表(Table):表是Hive中最基本的数据存储单位。每个表由一组有序的列和零到多个分区组成。表可以关联到一个特定的数据目录,存储在Hadoop分布式文件系统(HDFS)中的数据文件。
-
列(Column):列是表的组成部分,表示数据的属性或字段。每个列都有一个名称和数据类型,用于定义数据的结构。
-
分区(Partition):分区是表的逻辑划分,可以将表的数据按照某个列的值进行划分存储。分区可以基于时间、地区、类别等任何合适的列。通过分区,可以提高查询的性能和效率。
-
分桶(Bucket):分桶是将表的数据划分为固定数量的块,每个桶中包含相同数量的数据。桶可以在表的分区内进行定义,也可以在没有分区的表上使用。分桶适用于更细粒度的数据划分和更高效的数据查询。
-
HiveQL:Hive查询语言(HiveQL)是一种类似于SQL的查询语言,用于对Hive中的表进行查询、插入、更新等操作。HiveQL支持大部分SQL语法,并通过执行引擎将查询转化为MapReduce或Tez任务。
hive序列化与反序列化SerDe/InputFormat/OutPutFormat
-
SerDe是Serializer和Deserial的简称,用于序列化和反序列化。序列化,即将对象转化为字节码;反序列化,即将字节码转换为对象的过程
-
Hive读过程:Hdfs files ->InputFormat -> <key,value> ->Deserial->Row Object
-
Hive写过程:Row Object->Serializer-> <key,value> -> OutPutFormat-> Hdfs文件
hive数据类型
primitive_type-基本类型
类型 | 描述 |
---|---|
TINYINT | 整数型,8位有符号整数,取值范围为-128到127。 |
SMALLINT | 整数型,16位有符号整数,取值范围为-32768到32767。 |
INT | 整数型,32位有符号整数,取值范围为-2147483648到2147483647。 |
BIGINT | 整数型,64位有符号整数,取值范围为-9223372036854775808到9223372036854775807。 |
BOOLEAN | 布尔型(Boolean):表示逻辑值,只能取true或false。 |
FLOAT | 浮点型,单精度浮点数,占4个字节。 |
DOUBLE | 浮点型,双精度浮点数,占8个字节。 |
DOUBLE PRECISION | 双精度浮点数,占8个字节,这是一种近似值类型 |
STRING | 字符串型,可变长度字符串,可以包含任意字符。 |
BINARY | 二进制数据类型,用于存储二进制数据,如图片、音频等文件。使用BINARY或BINARY(n)关键字来定义该类型,其中n表示最大长度(以字节为单位),默认为255。 |
TIMESTAMP | 时间戳,表示特定的日期和时间。 |
DECIMAL | 十进制类型,用于存储精确的十进制数值。 |
DECIMAL(precision, scale) | DECIMAL(precision, scale)关键字用于定义该类型,其中precision表示总位数,scale表示小数点后的位数。例如,DECIMAL(10,2)表示总共10位数,其中2位小数。 |
DATE | 日期,只包含年、月、日。 |
VARCHAR | 字符串型,可变长度字符串,长度限制在指定范围 |
CHAR | 字符串型,固定长度字符串,长度限制在指定范围内 |
array_type-数组类型
数组类型(Arrays):用于存储一组具有相同数据类型的元素。
array_type : ARRAY < data_type > //ARRAY<data_type>:表示一个数组,其中data_type是数组元素的数据类型
map_type-map类型
map_type //:用于存储键值对。 : MAP < primitive_type, data_type > //表示一个键值对集合,其中primitive_type是键的数据类型,data_type是值的数据类型。
struct_type-结构体类型
struct_type //结构体类型(Structs):用于存储一组具有不同数据类型的字段。 STRUCT<col_name : data_type [COMMENT col_comment], ...> //表示一个结构体,其中col_name是字段名,data_type是字段的数据类型,col_comment是字段的注释(可选)
union_type-联合类型
union_type : UNIONTYPE < data_type, data_type, ... > -- (Note: Available in Hive 0.7.0 and later)