【Hadoop技术篇】hive的优化,经典面试

简介: 1) 开启配置:set hive.optimize.bucketmapjoin = true;2) 一个表的bucket数是另一个表bucket数的==整数倍==3) bucket列 == join列 4) 满足map join条件

 目录

Map Join

作用

触发条件

Bucket-Map Join

作用

触发条件

SMB Join (sort merge bucket)

作用

触发条件

Join-Skew关联查询时数据倾斜

运行时优化

编译时优化

Unoin优化

GroupBy-Skew统计时数据倾斜

Map先行打散

MR Job随机数打散


Map Join

作用

大表 和 小表 关联查询时,提升性能,避免数据倾斜。

触发条件

--  1、开启MapJoin
set hive.auto.convert.join=true;
--  2、设置阈值,不要超出自己的硬件配置,否则内存溢出
set hive.auto.convert.join.noconditionaltask.size=512000000

image.gif

Bucket-Map Join

作用

大表 和 中表 关联(小表的数据大小超出阈值)时,使用Map端Join优化。

触发条件

1) 开启配置:set hive.optimize.bucketmapjoin = true;

2) 一个表的bucket数是另一个表bucket数的==整数倍==

3) bucket列 == join列 4) 满足map join条件

SMB Join (sort merge bucket)

作用

当大表和大表关联(关联的两个表数据都很大)时使用。

触发条件

    1. 开启SMB配置
    set hive.optimize.bucketmapjoin = true;
    set hive.auto.convert.sortmerge.join=true;
    set hive.optimize.bucketmapjoin.sortedmerge = true;
    set hive.auto.convert.sortmerge.join.noconditionaltask=true;
    1. image.gif
    2. bucket列 == join列,且要Sort此列
      1. 创建表时,sorted by (列);
      2. 插入数据时:
        1. cluster by (列);
        2. hive.enforce.sorting 设置为 true
            1. 两个表的bucket数==必须相等==
            2. 满足BucketMapJoin的条件

            Join-Skew关联查询时数据倾斜

            运行时优化

            -- 开启运行时倾斜优化
            set hive.optimize.skewjoin=true;
            -- 设定倾斜阈值
            set hive.skewjoin.key=100000;  //行数

            image.gif

            编译时优化

              1. 开启编译时优化
              set hive.optimize.skewjoin.compiletime=true;
              1. image.gif
              2. 建表时指定倾斜字段和倾斜的值
              CREATE TABLE list_bucket_single (key STRING, value STRING)
              --  倾斜的字段和需要拆分的key值
              SKEWED BY (name) ON (‘张三’,’李四’,’王五’)
              --   为倾斜值创建子目录单独存放
              [STORED AS DIRECTORIES];
              1. image.gif

              Unoin优化

              set hive.optimize.union.remove=true;

              image.gif

              GroupBy-Skew统计时数据倾斜

              Map先行打散

              CM中配置hive.map.aggr

              MR Job随机数打散

              hive.groupby.skewindata=true;

              image.gif

              注意:有多个列执行distinct去重操作时,不支持skewindata:

              目录
              相关文章
              |
              9月前
              |
              存储 分布式计算 Hadoop
              从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
              从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
              410 79
              |
              7月前
              |
              存储 SQL 关系型数据库
              京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
              京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
              京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
              |
              SQL 关系型数据库 MySQL
              大厂面试官:聊下 MySQL 慢查询优化、索引优化?
              MySQL慢查询优化、索引优化,是必知必备,大厂面试高频,本文深入详解,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
              大厂面试官:聊下 MySQL 慢查询优化、索引优化?
              |
              9月前
              |
              机器学习/深度学习 人工智能 JSON
              Resume Matcher:增加面试机会!开源AI简历优化工具,一键解析简历和职位描述并优化
              Resume Matcher 是一款开源AI简历优化工具,通过解析简历和职位描述,提取关键词并计算文本相似性,帮助求职者优化简历内容,提升通过自动化筛选系统(ATS)的概率,增加面试机会。
              1065 18
              Resume Matcher:增加面试机会!开源AI简历优化工具,一键解析简历和职位描述并优化
              |
              8月前
              |
              人工智能 算法 数据库
              美团面试:LLM大模型存在哪些问题?RAG 优化有哪些方法?_
              美团面试:LLM大模型存在哪些问题?RAG 优化有哪些方法?_
              |
              12月前
              |
              并行计算 算法 安全
              面试必问的多线程优化技巧与实战
              多线程编程是现代软件开发中不可或缺的一部分,特别是在处理高并发场景和优化程序性能时。作为Java开发者,掌握多线程优化技巧不仅能够提升程序的执行效率,还能在面试中脱颖而出。本文将从多线程基础、线程与进程的区别、多线程的优势出发,深入探讨如何避免死锁与竞态条件、线程间的通信机制、线程池的使用优势、线程优化算法与数据结构的选择,以及硬件加速技术。通过多个Java示例,我们将揭示这些技术的底层原理与实现方法。
              711 3
              |
              存储 分布式计算 Hadoop
              数据湖技术:Hadoop与Spark在大数据处理中的协同作用
              【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
              545 2
              |
              存储 分布式计算 Hadoop
              数据湖技术:Hadoop与Spark在大数据处理中的协同作用
              【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
              452 1
              |
              存储 Java
              【IO面试题 四】、介绍一下Java的序列化与反序列化
              Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
              |
              存储 算法 Java
              大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
              本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
              大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?

              相关实验场景

              更多