🍳
Between code and words
  • About
    • About Me
    • About Book
  • 技术专辑
    • 大数据BigData
      • Ambari
        • 搭建虚拟机集群以及安装Ambari
          • self
            • 构建b
            • 构建m
            • 构建s
            • 构建集群
          • Windows
            • +VMware从头完全部署
            • +Docker从已有镜像简易部署
          • Linux
            • +Docker从头完全部署
            • +Docker从已有镜像简易部署
      • CDH
      • Maven
        • 一个简单的项目
        • GitHub远程maven私人仓库
      • Hadoop
        • HDFS介绍
        • MapReduce介绍
        • YARN介绍
        • HDFS常用命令
      • Hive
        • Hive简介及核心概念
        • Hive CLI和Beeline命令行的基本使用
        • ambari安装Hive
        • Hive常用DDL操作
        • Hive常用DML操作
        • Hive常用DCL操作
        • Hive分区表和分桶表
        • Hive 视图和索引
        • Hive数据查询详解
        • 进阶-优化
        • 进阶-函数
        • 进阶-Brickhouse UDF
        • 进阶-接入Python
      • 帮助
        • 常用端口
        • 常用命令
        • QA
    • 项目Program
      • 大数据项目实践
        • 1 亿条淘宝用户行为数据分析
          • 1. 部署环境
          • 2. 数据集下载
          • 3. 数据处理和表优化
          • 4.数据分析
          • 5.可视化
      • Web实践-Qhubl
        • 第一章-概
        • 第二章-面向公众的前后端
        • 部署指导
      • GNN
        • 1. 环境配置
        • 2. 节点分类
          • 数据集
            • Cora.py
          • 模型
            • GCN.py
            • GAT.py
          • Utils
            • draw.py
            • TTV.py
      • 美亚柏科
    • Linux
      • Linux
        • 常见
        • 代理
        • 科学计算
          • MPAS7
        • WSL
          • WSL数据迁移
          • 安装Docker Engine
        • 脚本
        • QA
      • Git
        • QA
      • VMware
        • 虚拟机代理
        • 双向复制粘贴
        • 磁盘扩容
        • QA
      • Docker
        • WSL安装Docker Engine
        • 优雅的上代理
        • 优雅地给容器新添端口
        • QA
      • MySQL
        • 重置初始密码
        • 免输密码登录
        • 低密码策略脚本
        • DeBug
    • Java
      • 语言特性
        • 多线程
        • AQS
        • JVMG1
      • 框架
        • SpringBoot
          • 注解
          • 配置
          • YAML
  • Self
    • 电脑应用
    • 奖项存档
    • 日语笔记
      • 入门五十音
      • 入门音调声调
    • 读书笔记
      • 《贫穷的本质》
        • 前言
        • 第一章 再好好想想
        • 第二章 饥饿人口已达到10亿?
Powered by GitBook
On this page
  1. 技术专辑
  2. 大数据BigData
  3. Hive

进阶-优化

1. 存储格式和压缩算法

在Hive命令行中,用于指定不同的表存储格式的关键词如下

  • 文本格式:TEXTFILE

  • 序列化文件格式:SEQUENCEFILE

  • RC文件格式:RCFILE

  • ORC文件格式:ORC

  • AVRO文件格式:AVRO

  • Parquet文件格式:PARQUET

这些存储格式在Hive中主要有以下区别:

  1. 存储方式:不同的存储格式采用不同的存储方式,如文本格式以纯文本形式存储,序列化文件格式以二进制序列化形式存储,ORC文件格式以行列混合存储形式存储等。

  2. 存储效率:不同的存储格式对存储效率有不同的影响,如序列化文件格式和ORC文件格式采用列式存储,可以大幅减少IO操作的次数,提高存储效率;而文本格式则不支持列式存储,效率相对较低。

  3. 压缩支持:不同的存储格式对压缩有不同的支持,如ORC文件格式和RC文件格式支持多种压缩算法,可以在减少存储空间的同时提高IO效率;而文本格式则不支持压缩。

  4. 兼容性:不同的存储格式对兼容性有不同的要求,如Avro文件格式支持多种语言的序列化和反序列化,并支持架构演化,适用于多语言环境下的数据交换;而其他存储格式则可能不支持跨语言的数据交换。

  5. 处理方式:不同的存储格式在查询和处理时可能有不同的方式,如列式存储的数据在执行聚合查询时效率更高,因为只需要扫描需要的列;而行式存储的数据则在执行全表扫描时效率更高,因为只需要扫描一行的数据。

例如对于电商用户行为分析,建议使用列式存储的存储格式,如ORC文件格式或Parquet文件格式。这是因为电商用户行为数据通常包含大量的字段,而列式存储可以只读取所需的列,减少IO操作的次数,提高查询效率;此外,列式存储通常支持更好的压缩比率,可以减少存储空间的占用。与行式存储相比,列式存储在数据分析和处理方面具有更好的性能和扩展性,因此在大数据场景下,列式存储格式是更加有效率的选择。同时,ORC文件格式和Parquet文件格式都支持多种压缩算法,可以在减少存储空间的同时提高IO效率,这对于电商用户行为数据的存储和分析非常有帮助。

ORC文件格式和Parquet文件格式都支持多种压缩算法,并且Hive默认会对这些文件格式进行自动压缩和解压。Hive提供了一些配置参数,可以指定默认的压缩算法和压缩级别,以及是否对所有文件进行压缩。

在命令行使用SET hive.exec.compress.output=true设置默认语法输出压缩为true,仅在当前会话有效。创建表时可以使用STORED AS ORC TBLPROPERTIES("orc.compress"="SNAPPY")的语法指定ORC文件格式使用SNAPPY压缩算法;

除了SNAPPY压缩算法,ORC文件格式和Parquet文件格式还支持多种其他的压缩算法,包括但不限于:

算法
压缩率
解压缩速度

GZIP、ZLIB

较高

较慢

BZIP2

较高

很慢

LZO

较低

快

LZ4

较低

很快

SNAPPY

较低

很快

除了hive.exec.compress.output和TBLPROPERTIES语法外,Hive还提供了一些其他的配置参数,具体如下

mapreduce.map.output.compress

这个参数指定Map任务输出时是否进行压缩,默认值为false。如果将其设置为true,Map任务输出的中间结果会被压缩,从而减少磁盘IO和网络传输的开销。用户可以通过设置mapreduce.map.output.compress.codec来指定压缩算法,默认值为org.apache.hadoop.io.compress.SnappyCodec。

mapreduce.output.fileoutputformat.compress

这个参数指定Reduce任务输出时是否进行压缩,默认值为false。如果将其设置为true,Reduce任务输出的结果会被压缩,从而减少磁盘IO和网络传输的开销。用户可以通过设置mapreduce.output.fileoutputformat.compress.codec来指定压缩算法,默认值为org.apache.hadoop.io.compress.SnappyCodec。

mapreduce.output.fileoutputformat.compress.type

这个参数指定输出文件的数据的压缩格式,默认值为RECORD,表示压缩单个记录。如果将其设置为BLOCK,则表示压缩块,可以提高压缩率,但会影响查询性能。如果数据量较小,可以使用RECORD格式的压缩,以获得较好的压缩率和较高的解压缩速度。如果数据量较大,可以考虑使用BLOCK格式的压缩,以获得更高的压缩率。

mapreduce.output.fileoutputformat.compress.level

这个参数指定压缩级别,默认值为1,表示快速压缩。可以设置为0~9之间的整数,表示不同的压缩级别,级别越高,压缩率越高,但压缩速度越慢。

mapreduce.output.fileoutputformat.compress.codec

这个参数指定压缩算法,默认值为org.apache.hadoop.io.compress.SnappyCodec。用户可以通过设置该参数来指定其他的压缩算法,如org.apache.hadoop.io.compress.GzipCodec、org.apache.hadoop.io.compress.BZip2Codec等。

Q:我是否可以这样理解,record是对每一条数据都用了压缩算法,而block是对整个数据用了压缩算法?

A:您的理解基本正确。在Hadoop中,压缩算法通常是基于数据块进行压缩的。当mapreduce.output.fileoutputformat.compress.type参数设置为RECORD时,每个数据记录都会被单独压缩,这可以获得较好的压缩比,同时也使得解压缩操作更加高效,因为每个记录都可以单独解压缩。而当该参数设置为BLOCK时,多个数据记录被组合成一个块,然后对整个块进行压缩,这样可以获得更高的压缩比,但解压缩操作需要对整个块进行解压缩,因此可能会更加耗时。

需要注意的是,RECORD和BLOCK并不是对每条数据或整个数据都使用了压缩算法,而是指定了压缩的粒度。实际上,每个数据块中的数据都会被压缩,无论是使用RECORD还是BLOCK方式。RECORD方式将每个数据记录单独压缩,而BLOCK方式将多个数据记录组合成一个块,然后对整个块进行压缩。因此,RECORD方式可以获得更好的压缩比,但解压缩操作可能更加高效;而BLOCK方式可以获得更高的压缩比,但解压缩操作可能更加耗时。

PreviousHive数据查询详解Next进阶-函数

Last updated 1 year ago