• HIVE调优


    HIVE调优

    1.HIVE 调优:


    需要调优的几个方面:


    1.HIVE语句执行不了


    2.HIVE查询语句,在集群中执行时,数据无法落地
    HIVE执行时,一开始语句检查没有问题,生成了多个JOB,
    并且一开JOB中的Map 及 Reduce 正常运行,之后便报异常包括 OOM 异常等


    3.HIVE查询语句,执行时,Map或者Reduce端数据处理异常慢,导致整个执行效率低


    2.调优方式:


    1.分区、分桶
                为什么分区或者分桶?
                     分区的好处,在扫描表时,会根据查询语句中的过滤条件,将固定分区中的数据加载至内存中
                避免了表的全表扫描。
                分桶好处? 在获取数据时,根据查询的数据,进行做hash操作,将需要获取的数据指定到具体的桶中
                ,这样只获取固定部分桶数据,减小了数据的加载量
            
    2.使用外部表
                外部表和普通表的区别? 删除数据时,外部表不会将HDFS中对应表路径中的数据删除

    3.选择适当的文件压缩格式
                1.对于刚采集过的源数据,需要用TextFile格式进行保存,需要保证源数据的格式及内容和原先一致
                2.对于处理过的数据,一般对数据进行压缩保存(需要考虑实际情况)

    4.命名要规范
                创建表时,需要遵守:
                    如果数据存储在dwd中那么建表时需要将 dwd 放至 表的开端
                    同时后面的业务名称需要和库名用 _ 进行分隔

    5.数据分层,表分离,但是也不要分的太散
                数据分层:
                    将不同类型的数据,应当存储在不同库中,
                    比如 维度表 应当存储在 维度库 、原始数据应当存储在ODS库中专门做管理
                表分离:
                    在实际业务过程中,有一些表的维度比较大,单个表的存储压力大
                    同时数据读取时,拉去的数据内容比较多,但是所需要的字段较少,浪费计算资源
                    可以将表中相同类型的信息切分至多个表中,根据实际业务需要进行读取数据
                    如果分的太散,那么也会造成数据冗余,并且加载表过多,计算慢

    6.分区裁剪 where过滤,先过滤,后join
                1.针对分区表数据,可以通过where条件进行过滤数据,之后再进行其他操作
                2.适当的使用一些子查询,将子查询中的数据进行初步过滤,然后再与其他表数据进行关联

    7.mapjoin (1.2以后自动默认启动mapjoin)
                select /*+mapjoin(b)*/ a.xx,b.xxx from a left outer join b on a.id=b.id
     

  • 相关阅读:
    sed正则表达式
    简单剖析Hashmap
    VMware虚拟化环境搭建
    滴滴2023秋招笔试 老张的美数课 (C++ DP)
    【Java】Java中的引用类型
    几种嵌入式可编程芯片的简介
    C#学习记录——GDI+绘图基础
    DAO 的全景图:金融和社会资本之间的关系
    【论文写作】符号:矩阵、向量的乘法、内积、点积等
    猿创征文|Vue、React可视化分析
  • 原文地址:https://blog.csdn.net/2301_77836489/article/details/138696804