• Hive效率优化记录


    Hive是工作中常用的数据仓库工具,提供存储在HDFS文件系统,将结构化数据映射为一张张表以及提供查询和分析功能。
    Hive可以存储大规模数据,但是在运行效率上不如传统数据库,这时需要懂得常见场景下提升存储或查询效率的方法,本文记录工作中常见的情形。

    map阶段优化

    map阶段主要是把文件拆分成一个个文件块。正常情况下,一个map任务的启动和初始化时间远远大于逻辑处理时间,所以可以增大max参数值减少map数;但在计算逻辑较为复杂(字段少记录过多)时可以减少max参数值增大map数,控制map数来协调启动和逻辑处理时间。

    -- 减少map数
    set hive.hadoop.supports.splittable.combineinputformat=true;
    set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; -- 执行前进行小文件合并,进而减少map数目
    -- 文件小于1M的会单独产生一个map,文件在1M-256M之间大小的会合并,文件大于256M的拆分为多个
    set mapred.min.split.size=1000000;
    set mapred.max.split.size=256000000;
    set mapred.min.split.size.per.node=256000000;
    set mapred.min.split.size.per.rack=256000000;
    -- set hive.exec.reducers.bytes.per.reducer=1073741824; -- 控制reduce个数,超过文件大小会产生多个reduce任务
    
    -- 增大map数
    -- 一般使用情况是文件不是特别大,但是计算逻辑复杂,计算比较耗时,那么可以强制指定一个map任务个数提高执行效率
    set mapred.reduce.tasks=10;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    reduce阶段优化

    reduce个数决定了最终输出文件的个数。增大reduce的个数会增加输出文件数量,减小reduce个数会减少输出文件数量。reduce个数过多会产生很多小文件影响以后计算效率,reduce个数过少会造成单个reduce处理数据量过大影响效率。

    -- 1、Hive自动计算reduce个数
    set hive.exec.reducers.bytes.per.reducer=500000000; -- 每个reduce任务最多处理500M的数据
    set hive.exec.reducers.max=1009; -- 每个任务的最大reduce个数
    
    -- 2、认为指定reduce个数
    set mapred.reduce.tasks=10; -- 人为指定10个reduce,会产生10个文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注意,会产生只有一个reduce的情况:

    1. 查询时使用了order by 全局排序
    2. 表关联join时产生笛卡尔积情况
    源头建表优化

    建表时可以指定文件压缩格式,不要使用textfile,一般可以使用parquet+snappy格式

    -- 为了提高计算和存储效率
    ROW FORMAT SERDE
    'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
    STORED AS INPUTFORMAT
    'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
    OUTPUTFORMAT
    'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
    TBLPROPERTIES('parquet.compression'='SNAPPY')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    基本数据类型
    深度学习检测算法YOLOv5的实战应用
    dubbo和springcloud问题解决——interface not allow null
    Spring中PointcutAdvisor和IntroductionAdvisor梳理
    第十四届蓝桥杯省赛C/C++大学B组真题-飞机降落
    前端面试总结
    springboot 查看和修改内置 tomcat 版本
    云原生周刊:Argo CD v2.12 发布候选版本 | 2024.06.24
    ESP32 开发笔记(二) 开发环境搭建 windows VSCode ESP32_IDF_V4.4.2开发环境搭建(cmd/powershell方式编译)
    皮革店铺怎么实施IT程序快速实施 部署
  • 原文地址:https://blog.csdn.net/weixin_50646402/article/details/134474270