当前位置: 首页 > news >正文

Hive的存储格式

文章目录

  • Hive的存储格式
    • 1.存储格式简介
    • 2.行存储与列存储
      • 行式存储
      • 列式存储
      • 混合的 PAX 存储结构
    • TextFile
    • SequenceFile

Hive的存储格式

1.存储格式简介

Hive支持的存储数的格式主要有:TEXTFILE(默认格式) 、SEQUENCEFILE、RCFILE、ORCFILE、PARQUET。

textfile为默认格式,建表时没有指定文件格式,则使用TEXTFILE,导入数据时会直接把数据文件拷贝到hdfs上不进行处理;

sequencefile,rcfile,orcfile格式的表不能直接从本地文件导入数据,数据要先导入到textfile格式的表中,然后再从表中用insert导入sequencefile、 rcfile、orcfile表中。

2.行存储与列存储

行式存储下一张表的数据都是放在一起的,但列式存储下数据被分开保存了。

行式存储

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

比如:select a from tableAselect a, b, c, d, e, f, g from tableA这样两个查询其实查询的开销差不多,都需要把所有的行读进来过一遍,拿出需要的列。

而且这种情况下,属于同一行的数据都在同一个 HDFS 块上,重建一行数据的成本比较低。

但是这样做有两个主要的弱点:

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

**优点:**数据被保存在一起,insert和update更加容易

**缺点:**选择(selection)时即使只涉及某几列,所有数据也都会被读取

列式存储

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

但是这种结构在重建行时比较费劲,尤其当一行的多个列不在一个 HDFS 块上的时候。比如我们从第一个 DataNode 上拿到 column A,从第二个 DataNode 上拿到了 column B,又从第三个 DataNode 上拿到了 column C,当要把 A,B,C 拼成一行时,就需要把这三个列放到一起重建出行,需要比较大的网络开销和运算开销。

**优点:**查询时只有涉及到的列会被读取,效率高

**缺点:**选中的列要重新组装,insert/update比较麻烦

混合的 PAX 存储结构

PAX 结构是将行存储和列存储混合使用的一种结构,主要是传统数据库中提高 CPU 缓存利用率的一种方法,并不能直接用到 HDFS 中。但是 RCFile 和 ORC 是继承自它的思想,先按行存再按列存。

TEXTFILE、SEQUENCEFILE的存储格式是基于行存储的

ORC和PARQUET是基于列式存储的。

TextFile

TextFile 为 Hive 默认格式,建表时不指定则默认为这个格式,导入数据时会直接把数据文件拷贝到 hdfs 上不进行处理。

创建一个 TextFile 格式的 Hive 表:

create table if not exists ldsx_table (    
name STRING,    
age STRING,   
class_t STRING,
tc STRING)
row formated delimated fields terminated by '\t'stored as textfile;  -- 可不指定(默认格式)

向 TextFile 表中加载数据:

load data local inpath "hdfs://xxxxx/xxxx/xxx.csv"  into table textfile_table

TextFile 优缺点

TextFile 格式因为不对导入的数据文件做处理,所以可以直接使用 load 方式加载数据,其他存储格式则不能使用 load 直接导入数据文件。所以 TextFile 的加载速度是最高的

TextFile 格式虽然可以使用 Gzip 压缩算法,但压缩后的文件不支持 split。在反序列化过程中,必须逐个字符判断是不是分隔符和行结束符,因此反序列化开销会比 SequenceFile 高几十倍。

SequenceFile

SequenceFile 是 Hadoop API 提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点。

SequenceFIle 的内部格式取决于是否启用压缩,如果是压缩,则又可以分为记录压缩和块压缩。

无压缩(NONE):如果没有启用压缩(默认设置)那么每个记录就由它的记录长度(字节数)、键的长度,键和值组成。长度字段为 4 字节。

记录压缩(RECORD):记录压缩格式与无压缩格式基本相同,不同的是值字节是用定义在头部的编码器来压缩。注意:键是不压缩的。

块压缩(BLOCK):块压缩一次压缩多个记录,因此它比记录压缩更紧凑,而且一般优先选择。当记录的字节数达到最小大小,才会添加到块。该最小值由 io.seqfile.compress.blocksize 中的属性定义。默认值是 1000000 字节。格式为记录数、键长度、键、值长度、值。Record 压缩率低,一般建议使用 BLOCK 压缩。

创建一个 SequenceFile 格式的 Hive 表:

create table if not exists seqfile_table(    ueserid STRING,    movieid STRING,    rating STRING,    ts STRING)row format delimitedfields terminated by '\t'stored as sequencefile;

设置压缩格式为块压缩:

set mapred.output.compression.type=BLOCK;

向 SequenceFile 表中加载数据:

insert overwrite table seqfile_table select * from textfile_table;

复制

SequenceFile 优点

  • 支持基于记录(Record)或块(Block)的数据压缩。
  • 支持 splitable,能够作为 MapReduce 的输入分片。
  • 修改简单:主要负责修改相应的业务逻辑,而不用考虑具体的存储格式。

SequenceFile 的缺点

  • 需要一个合并文件的过程,且合并后的文件不方便查看。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • csrf的详解
  • ContentObserver 内容观察者
  • Comsol 水下周期弹性结构中的声传播损失
  • 类在JVM中的工作原理
  • Renesa Version Board和微信小程序通信
  • ubuntu设置为自己需要的屏幕分辨率
  • Unity3D DOTS Component详解
  • IDEA主题的设置
  • 前端数据结构
  • C++学习笔记(4)
  • 贪心算法---不同路径
  • sicp每日一题[1.42]
  • SpringBoot整合Thymleaf实现页面静态化
  • 【数据结构】—— 栈与队列
  • 【Prometheus】Prometheus的特点、数据采集方式、架构、数据模型详解
  • 《剑指offer》分解让复杂问题更简单
  • 0基础学习移动端适配
  • 4个实用的微服务测试策略
  • docker-consul
  • Hexo+码云+git快速搭建免费的静态Blog
  • Mysql5.6主从复制
  • 从零开始学习部署
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 简单易用的leetcode开发测试工具(npm)
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 为什么要用IPython/Jupyter?
  • ​linux启动进程的方式
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #WEB前端(HTML属性)
  • #控制台大学课堂点名问题_课堂随机点名
  • $.proxy和$.extend
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (附源码)计算机毕业设计大学生兼职系统
  • (面试必看!)锁策略
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)基于IDEA的JAVA基础10
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)Google的Objective-C编码规范
  • ***原理与防范
  • .“空心村”成因分析及解决对策122344
  • .NET 命令行参数包含应用程序路径吗?
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • .NET技术成长路线架构图
  • .Net中wcf服务生成及调用
  • /*在DataTable中更新、删除数据*/
  • /proc/vmstat 详解
  • @在php中起什么作用?
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码