一般数据存储模式分为行存储、列存储以及混合存储。
行存储模式就是把一整行存在一起,包含所有的列,这是最常见的模式。这种结构能很好的适应动态的查询。但行存储模式有以下两点不足:
- 当一行中有很多列,而我们只需要其中很少的几列时,我们也不得不把一行中所有的列读进来,然后从中抽取一些列。这样大大降低了查询执行的效率。
- 基于多个列做压缩时,由于不同的列数据类型和取值范围不同,压缩比不会太高。
列存储模式将每列单独存储或者将某几个列作为列组存在一起。列存储在执行查询时可以避免读取不必要的列。而且一般同列的数据类型一致,读取范围相对多列混合更小,这种情况下压缩数据能达到比较高的压缩比。但是这种结构在重建行时效率比较低。
混合存储模式是将行存储和列存储混合使用的一种结构。
hive数据存储格式常见包括以下几类:textfile、sequencefile、rcfile、orcfile。其中textfile为默认格式,建表时不指定默认为这个格式,导入数据时会直接把数据拷贝到hdfs上不进行处理。SequenceFile,RCFile,ORCFile格式的表不能直接从本地文件导入数据,数据要先导入textFile格式的表中,然后再从textfile表中用insert导入到sequenceFile、RCFile、ORCFile表中。
1、TEXTFILE
默认格式,数据不做压缩,磁盘开销大,数据解析开销大。
可结合Gzip、Bzip2使用(系统自动检查,执行查询时自动解压),使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。比如默认块大小是64M,那么输入一个128MB的非压缩文件则可以拆分为128/64=2个MapReduce任务。而如果文件是压缩格式128MB,那么对于文件则只会启动一个Mapper。
2、SEQUENCEFILE
sequencefile是Hadoop API提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点。这种二进制文件内部使用Hadoop 的标准的Writable 接口实现序列化和反序列化。它与Hadoop API中的MapFile 是互相兼容的。Hive 中的SequenceFile 继承自Hadoop API 的SequenceFile,不过它的key为空,使用value 存放实际的值, 这样是为了避免MR 在运行map 阶段的排序过程。如果你用Java API 编写SequenceFile,并让Hive 读取的话,请确保使用value字段存放数据,否则你需要自定义读取这种SequenceFile 的InputFormat class 和OutputFormat class。sequencefile支持三种压缩选择:NONE,RECORD,BLOCK。Record压缩率低,一般建议使用BLOCK压缩。TEXTFile和SEQUENCEFile都是基于行存储的。
3、RCFILE
RCFILE是一种列存储相结合的存储方式。其遵循的是“先水平划分,在垂直划分”的设计理念。首先,RCFile保证同一行的数据位于同一节点,因此元组重构的开销很低;其次,像列存储一样,RCFile能够利用维度的数据压缩,并且能跳过不必要的列读取。
RCFile存储结构,其广泛应用于Facebook公司的数据分析系统hive中。首先,RCFile具备相当于行存储的数据加载速度和负载适应能力;其次,RCFile的读优化可以在扫描表格式时避免不必要的列读取,测试显示在多数情况下,数据加载时性能消耗较大,但是具有较好的压缩比和查询响应;再次,RCFile使用列维度的压缩,因此能够有效提升
rcfile文件结构如下:
4、ORCFile
ORCFile是hive0.11版本引入的新的存储格式,是对之前的RCFile存储格式的优化。每个ORC文件由一个或多个stripe组成,每个stripe250MB大小,这个Stripe实际相当于之前的rcfile里的RowGroup概念,每个Stripe大小250MB,这样能提升顺序读的吞吐率。每个Stripe里有三部分组成,分别是IndexData,RowData,Stripe footer:
- Index Data:一个轻量级的index,默认是每隔1W行做一个索引。这里做的索引只是记录某行的个字段在RowData中的offset,还包括Column的max和min值。
- Row Data:存的是具体的数据,和RCFile一样,先取部分行,然后对这些行按列进行存储。与RCFile不同的地方在于每个列进行了编码,分成多个Stream来存储。
- Stripe Footer:存的是各个Stream的类型,长度等信息。
ORCFile对RCFile进行优化,和RCFile格式相比,ORC File格式有以下优点:
- 每个task只输出单个文件,这样可以减少NameNode的负载;
- 支持各种复杂的数据类型,比如:datetime,decimal,以及一些复杂类型(Struct,list,map,union)
- 在文件存储了一些轻量级的索引数据;
- 基于数据类型的模块压缩:integer类型的列用行城长度编码;string类型的列用字典编码。
- 多个互相独立的RecordReaders并行读相同的文件;
- 无需扫描markers就可以分割文件。
- 绑定所需要的内存;
- metadata的存储用protocol buffers的,所以它支持添加和删除一些列。
5、测试总结
下面对这sequencefile和rcfile 文件格式结合GzipCodec、DefaultCodec做了测试对比。
相关推荐
### Hive数据存储模式详解 #### 一、Hive的数据存储 Hive作为一款基于Hadoop的数据仓库工具,其核心功能之一就是提供了一种高效的管理大数据的方式。Hive的数据分为两大类:**表数据**和**元数据**。 - **表数据*...
然而,为了适应更复杂的业务需求和更高的性能,我们可以选择将Hive元数据存储在达梦数据库中。本文将详细介绍如何配置Hive metastore以使用达梦数据库。 首先,要在达梦数据库中创建metastore所需的用户和表空间。...
Hive元数据是Hive操作的核心部分,它包含了数据库、表、列、分区等信息,这些信息用于定义数据的结构和组织方式。本资源“hive元数据生成建表语句”主要关注如何从已有的Hive元数据中自动生成创建表的SQL语句,以...
Hive并不存储数据,而是依赖于HDFS进行数据存储,并利用MapReduce、Tez或Spark作为计算引擎执行SQL语句转化的分布式计算任务。它是一个读多写少的系统,主要用于静态数据分析,不支持频繁的数据修改和删除。 1.1 ...
5. **Hive架构**:Hive由多个组件组成,包括元数据存储(通常是MySQL或Derby)、Hive服务器、Hive客户端和执行引擎。元数据存储了表和分区的定义,Hive服务器处理客户端请求,执行引擎则将HiveQL转换为MapReduce任务...
1. **Hive架构**:Hive的核心组件包括元数据存储、驱动器和编译器。元数据存储通常在MySQL或Derby数据库中,包含表名、列名、分区信息等;驱动器负责执行查询计划;编译器则将HQL转化为MapReduce任务。 2. **数据...
通常,这样的数据集可能包含CSV、JSON、Parquet或ORC格式的文件,这些格式都是Hive支持的数据存储格式。Hive会将这些文件组织成分区表或非分区表,用户可以通过HQL进行查询和分析。 在实际应用中,这些数据集可能...
- 元数据存储:Hive 有一个元数据存储服务(Metastore),保存关于表结构、分区等信息,通常存储在关系数据库中,如 MySQL 或 PostgreSQL。 1.2 Hive 架构 Hive 的架构包括以下部分: - 操作界面:用户可以通过...
- **Hive 数据分区**是 Hive 表的一种组织方式,它允许将表中的数据按照某个列(分区键)的值进行划分,存储在不同的目录下。 - 分区有助于提高查询效率,因为当查询指定分区时,Hive 只需要扫描相关的分区,而...
Hive的数据存储格式与传统关系数据库类似,但它是面向HDFS的,这意味着Hive可以直接操作存储在HDFS上的大规模数据集。Hive最重要的特征是支持SQL-like查询语言HiveQL,通过这个接口,数据分析师可以利用熟悉的SQL...
三、Hive数据模型 Hive的数据模型基于传统的关系型数据库模型,包括数据库(Database)、表(Table)、分区(Partition)和桶(Bucket)。数据库是逻辑上的组织单元,表是数据的容器,分区是按照特定字段划分数据的...
首先,选择“数据管理”中的“数据权限”功能,然后在“组织机构”中选择一个组织机构,在数据源中选择“HIVE数据源”,然后勾选“允许访问整个数据源”,将HIVE数据源筛选到“已选区”,单击“保存”,完成对数据源...
6. **位置**:可以指定表的数据存储位置,例如`LOCATION '/user/hive/warehouse/my_table'`。 7. **外部表**:如果数据由其他系统生成或管理,可以创建外部表,仅保存元数据,数据文件位于HDFS的特定路径。 8. **...
本文档详细记录了一次从自建Hadoop集群到华为云MRS(Managed Service for Big Data)的大规模数据迁移项目,涉及到了Hive、Kudu和HBase这三种不同类型的数据存储系统。以下是针对这些系统的迁移策略、流程和解决方案...
4、 Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比 如 select * from tbl 不会生成 MapRedcue 任务)。 1.2Hive 和 Hadoop 关系 Hive 构建在 Hadoop 之上, HQL 中对查询语句的...
- **远程模式**:元数据存储在远程的MetaStoreServer上,通过Thrift协议进行访问,适合分布式环境。 7. **Hive与Impala的对比**: Hive适合长时间批处理,Impala适合实时查询;两者共享相同元数据,但Impala内存...
1. 表和分区:在Hive中,数据被组织成表,表可以进一步分区,以便更快地访问数据。 2. 存储格式:Hive支持多种存储格式,如TextFile、SequenceFile、ORC、Parquet等,每种格式都有其优缺点。 3. 视图:视图是虚拟表...
2. **Hive 架构**:详细阐述 Hive 的组件,如元数据存储(通常使用 MySQL 或 Derby)、执行引擎、编译器和优化器等,以及它们如何协同工作以执行查询。 3. **HiveQL**:讲解 Hive 查询语言,包括基本的 SELECT、...
1.5 Hive 数据存储 数据以文件形式存储在 HDFS 中,Hive 将这些文件组织成表和分区。 **2. Hive 基本操作** 2.1 CreateTable 包括创建普通表、分区表,以及各种创建示例。 2.2 AlterTable 支持添加分区、删除...
1. **数据模型**:Hive 支持两种主要的数据存储结构——表(Table)和分区(Partition)。表是数据的基本单位,可以看作是关系数据库中的表格。分区则是对大表进行逻辑上的划分,通过将数据按特定字段值进行分类,...