`
student_lp
  • 浏览: 437954 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

    一般数据存储模式分为行存储、列存储以及混合存储。

    行存储模式就是把一整行存在一起,包含所有的列,这是最常见的模式。这种结构能很好的适应动态的查询。但行存储模式有以下两点不足:

  • 当一行中有很多列,而我们只需要其中很少的几列时,我们也不得不把一行中所有的列读进来,然后从中抽取一些列。这样大大降低了查询执行的效率。
  • 基于多个列做压缩时,由于不同的列数据类型和取值范围不同,压缩比不会太高。

    列存储模式将每列单独存储或者将某几个列作为列组存在一起。列存储在执行查询时可以避免读取不必要的列。而且一般同列的数据类型一致,读取范围相对多列混合更小,这种情况下压缩数据能达到比较高的压缩比。但是这种结构在重建行时效率比较低。

    混合存储模式是将行存储和列存储混合使用的一种结构。

    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做了测试对比。

    总结:相比TEXTFILE和SEQUENCEFILE,RCFILE由于列式 存储方式,数据加载时性能消耗很大,但是具有较好的压缩比和查询响应。数据仓库的特点是一次写入、多次读取,因此,整体来看,RCFILE相比其余两种格式具有较明显的优势。

    建议:设置上述压缩参数hive表文件格式和压缩编码采用Rcfile+Gzip压缩效果最好,比sequencefile节省约33%存储,而且rcfile 在列筛选数据查询效率上比sequencefile高很多。综上建议hive默认参数调整如下:

set mapred.output.compression.type=BLOCK;
set hive.merge.mapredfiles = true;
set hive.merge.mapfiles = true;
set hive.merge.smallfiles.avgsize=160000000;
set hive.exec.compress.output=true;

    hive表文件格式选择:除了etl表其余表建表默认格式为RCFile。对于已经创建的表用ALTER TABLE table_name SET RCFile;修改后续数据的存储格式,这个设置不影响该表之前存储的数据,因为hive在数据读取的时候预判的文件格式。 

  • 大小: 49.6 KB
  • 大小: 44.5 KB
  • 大小: 34.3 KB
  • 大小: 160.5 KB
分享到:
评论

相关推荐

    hive数据存储模式

    ### Hive数据存储模式详解 #### 一、Hive的数据存储 Hive作为一款基于Hadoop的数据仓库工具,其核心功能之一就是提供了一种高效的管理大数据的方式。Hive的数据分为两大类:**表数据**和**元数据**。 - **表数据*...

    Hive metastore 使用达梦数据库存储元数据

    然而,为了适应更复杂的业务需求和更高的性能,我们可以选择将Hive元数据存储在达梦数据库中。本文将详细介绍如何配置Hive metastore以使用达梦数据库。 首先,要在达梦数据库中创建metastore所需的用户和表空间。...

    hive元数据生成建表语句

    Hive元数据是Hive操作的核心部分,它包含了数据库、表、列、分区等信息,这些信息用于定义数据的结构和组织方式。本资源“hive元数据生成建表语句”主要关注如何从已有的Hive元数据中自动生成创建表的SQL语句,以...

    Hive总结.docx

    Hive并不存储数据,而是依赖于HDFS进行数据存储,并利用MapReduce、Tez或Spark作为计算引擎执行SQL语句转化的分布式计算任务。它是一个读多写少的系统,主要用于静态数据分析,不支持频繁的数据修改和删除。 1.1 ...

    hive 操作相关的测试数据集

    1. **Hive架构**:Hive的核心组件包括元数据存储、驱动器和编译器。元数据存储通常在MySQL或Derby数据库中,包含表名、列名、分区信息等;驱动器负责执行查询计划;编译器则将HQL转化为MapReduce任务。 2. **数据...

    基于Hadoop的数据仓库Hive学习指南.doc

    5. **Hive架构**:Hive由多个组件组成,包括元数据存储(通常是MySQL或Derby)、Hive服务器、Hive客户端和执行引擎。元数据存储了表和分区的定义,Hive服务器处理客户端请求,执行引擎则将HiveQL转换为MapReduce任务...

    hive数据集.zip

    通常,这样的数据集可能包含CSV、JSON、Parquet或ORC格式的文件,这些格式都是Hive支持的数据存储格式。Hive会将这些文件组织成分区表或非分区表,用户可以通过HQL进行查询和分析。 在实际应用中,这些数据集可能...

    Hadoop数据仓库--hive介绍

    - 元数据存储:Hive 有一个元数据存储服务(Metastore),保存关于表结构、分区等信息,通常存储在关系数据库中,如 MySQL 或 PostgreSQL。 1.2 Hive 架构 Hive 的架构包括以下部分: - 操作界面:用户可以通过...

    hive数据分区时分区字段不可为中文。.doc

    - **Hive 数据分区**是 Hive 表的一种组织方式,它允许将表中的数据按照某个列(分区键)的值进行划分,存储在不同的目录下。 - 分区有助于提高查询效率,因为当查询指定分区时,Hive 只需要扫描相关的分区,而...

    基于Hadoop_Hive的气象数据分布式处理研究.pdf

    Hive的数据存储格式与传统关系数据库类似,但它是面向HDFS的,这意味着Hive可以直接操作存储在HDFS上的大规模数据集。Hive最重要的特征是支持SQL-like查询语言HiveQL,通过这个接口,数据分析师可以利用熟悉的SQL...

    Hive案例数据集.rar

    三、Hive数据模型 Hive的数据模型基于传统的关系型数据库模型,包括数据库(Database)、表(Table)、分区(Partition)和桶(Bucket)。数据库是逻辑上的组织单元,表是数据的容器,分区是按照特定字段划分数据的...

    工业大数据分析-HIVE输入与输出教学讲义.docx

    首先,选择“数据管理”中的“数据权限”功能,然后在“组织机构”中选择一个组织机构,在数据源中选择“HIVE数据源”,然后勾选“允许访问整个数据源”,将HIVE数据源筛选到“已选区”,单击“保存”,完成对数据源...

    生成hive建表语句

    6. **位置**:可以指定表的数据存储位置,例如`LOCATION '/user/hive/warehouse/my_table'`。 7. **外部表**:如果数据由其他系统生成或管理,可以创建外部表,仅保存元数据,数据文件位于HDFS的特定路径。 8. **...

    Hive用户指南(Hive_user_guide)_中文版.pdf

    4、 Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比 如 select * from tbl 不会生成 MapRedcue 任务)。 1.2Hive 和 Hadoop 关系 Hive 构建在 Hadoop 之上, HQL 中对查询语句的...

    大数据-数据迁移-hive、hbase、kudu迁移

    本文档详细记录了一次从自建Hadoop集群到华为云MRS(Managed Service for Big Data)的大规模数据迁移项目,涉及到了Hive、Kudu和HBase这三种不同类型的数据存储系统。以下是针对这些系统的迁移策略、流程和解决方案...

    大数据 虚拟机 Linux VM复习题库:题库包括了60题选择题、10题填空题、10题判断题、2题简答题,助你度过期末复习

    - **远程模式**:元数据存储在远程的MetaStoreServer上,通过Thrift协议进行访问,适合分布式环境。 7. **Hive与Impala的对比**: Hive适合长时间批处理,Impala适合实时查询;两者共享相同元数据,但Impala内存...

    hadoop Hive学习配套数据

    1. 表和分区:在Hive中,数据被组织成表,表可以进一步分区,以便更快地访问数据。 2. 存储格式:Hive支持多种存储格式,如TextFile、SequenceFile、ORC、Parquet等,每种格式都有其优缺点。 3. 视图:视图是虚拟表...

    apache-hive-2.3.9-bin.tar大数据HIVE.zip

    1. **数据模型**:Hive 支持两种主要的数据存储结构——表(Table)和分区(Partition)。表是数据的基本单位,可以看作是关系数据库中的表格。分区则是对大表进行逻辑上的划分,通过将数据按特定字段值进行分类,...

    hive实用-hadoop数据仓库指南【英文about云】1

    2. **Hive 架构**:详细阐述 Hive 的组件,如元数据存储(通常使用 MySQL 或 Derby)、执行引擎、编译器和优化器等,以及它们如何协同工作以执行查询。 3. **HiveQL**:讲解 Hive 查询语言,包括基本的 SELECT、...

    hive的学习资料

    1.5 Hive 数据存储 数据以文件形式存储在 HDFS 中,Hive 将这些文件组织成表和分区。 **2. Hive 基本操作** 2.1 CreateTable 包括创建普通表、分区表,以及各种创建示例。 2.2 AlterTable 支持添加分区、删除...

Global site tag (gtag.js) - Google Analytics