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

Hive 默认计算引擎:MapReduce(Map 阶段 → Shuffle 阶段 → Reduce 阶段)MapJoin 把小表放内存,避免 shuffle,shuffle 是什么

Shuffle是分布式计算中数据在节点间重新分配的过程用于将相同key的数据集中处理如JOIN操作但会因网络传输和磁盘读写导致性能下降。MapJoin通过将小表完全加载到各节点内存中避免Shuffle过程显著提升JOIN效率。适用场景包括小表可放入内存默认lt;25MB、大表数据量大的情况。核心区别在于传统JOIN需要双向Shuffle而MapJoin只需单向数据分布是小表关联优化的关键技术。把小表放内存避免 shuffle。shuffle 是什么Shuffle 简单理解一句话Shuffle 就是数据在节点之间重新分配的过程。一、为什么需要 Shuffle1.1 场景举例假设有两张表用户表小表user_idname1张三2李四3王五订单表大表user_idamount1100220011503300250需求SELECT * FROM 订单表 JOIN 用户表 ON user_id1.2 数据可能分散在不同节点text节点Auser_id1 的数据张三 订单100、150 节点Buser_id2 的数据李四 订单200、50 节点Cuser_id3 的数据王五 订单300如果直接 JOIN每个节点只知道自己节点的数据没法关联。1.3 Shuffle 做的事把相同user_id的数据拉到同一个节点textShuffle 前 Shuffle 后 节点Auser_id1 的订单 节点A所有 user_id1 的数据订单用户 节点Buser_id2 的订单 → 节点B所有 user_id2 的数据 节点Cuser_id3 的订单 节点C所有 user_id3 的数据然后每个节点可以独立完成 JOIN。二、Shuffle 的形象比喻比喻全班分组活动text老师让学生按生日月份分组讨论。 Shuffle 前座位是随便坐的1月生的人和6月生的人坐一起 Shuffle 过程大家都站起来走到自己生日的区域 Shuffle 后所有1月生的人在一个区域2月生的在一个区域...比喻快递分拣text快递站收到各地包裹 北京来的、上海来的、广州来的...混在一起 Shuffle 分拣过程 把所有去北京的分到一堆去上海的分到一堆 分拣后才能装车运输才能执行后续计算三、Shuffle 为什么慢原因说明网络传输数据要在节点之间移动走网络比走内存慢很多磁盘读写数据要先写磁盘再被下游读取排序合并很多时候需要排序消耗 CPU数据量放大某些操作如GROUP BY可能需要传输全部数据对比操作需要 Shuffle 吗速度SELECT * FROM 表❌ 不需要很快SELECT * FROM 表 WHERE 条件❌ 不需要很快GROUP BY 部门✅ 需要按部门重新分配较慢JOIN ON 用户ID✅ 需要按用户ID重新分配较慢四、Map Join 如何避免 Shuffle4.1 传统 JOIN需要 ShufflesqlSELECT * FROM 大表 a JOIN 小表 b ON a.id b.idtext步骤 1. 两个表的数据分别按 id 重新分配Shuffle 2. 相同 id 的数据拉到同一节点 3. 在该节点上完成 JOIN问题小表只有几 MB但也要经历 Shuffle网络传输。4.2 Map Join不需要 ShufflesqlSELECT /* MAPJOIN(b) */ * FROM 大表 a JOIN 小表 b ON a.id b.idtext步骤 1. 把整个小表 b 加载到**每个节点**的内存中 2. 大表 a 按原有方式被分配到各个节点 3. 每个节点直接用自己的内存中的小表去 JOIN 自己收到的数据关键小表不需要在节点间跑来跑去没有 Shuffle。4.3 图解对比text传统 JOIN有 Shuffle ┌─────────────────────────────────────────────────────────┐ │ 节点A大表部分数据 节点A小表部分数据 │ │ 节点B大表部分数据 ──Shuffle──→ 节点B小表部分数据 │ │ 节点C大表部分数据 节点C小表部分数据 │ │ 需要网络传输小表数据 │ └─────────────────────────────────────────────────────────┘ Map Join无 Shuffle ┌─────────────────────────────────────────────────────────┐ │ 节点A大表部分数据 完整小表内存 │ │ 节点B大表部分数据 完整小表内存 │ │ 节点C大表部分数据 完整小表内存 │ │ 小表不需要传输提前复制到每个节点 │ └─────────────────────────────────────────────────────────┘五、什么时候 Map Join 有效条件说明小表足够小能放进每个节点的内存默认阈值 25MB大表很大需要 Shuffle 代价高时Map Join 优势明显JOIN 类型合适适用于 INNER JOIN、LEFT JOIN、RIGHT JOIN 等六、相关概念总结术语含义Shuffle数据在节点之间重新分配的过程代价高网络磁盘Map Join把小表放内存避免 Shuffle速度快Map 阶段读取数据、初步处理Reduce 阶段汇总 Map 阶段的结果通常需要 Shuffle七、一句话总结Shuffle 就是把相同 key 的数据拉到同一个节点以便后续处理。它需要网络传输和磁盘读写是分布式计算中最耗时的环节。Map Join 把小表复制到每个节点的内存中让大表数据不需要去找小表小表已经在了从而避免了 Shuffle大幅提升 JOIN 速度。
http://www.gsyq.cn/news/1339617.html

相关文章:

  • JCMsuite应用:太阳能电池的抗反射惠更斯超表面模拟
  • 解锁AI搜索流量密码:AI搜索优化企业解析 - 品牌测评鉴赏家
  • 初三中考英语作文模板万能句型及范文大全电子版
  • BabelDOC终极指南:5个技巧让你的PDF翻译又快又好
  • 告别小屏幕!5个专业技巧让你在Windows大屏上高效刷酷安
  • 边仓线与线边仓详解:边仓线和线边仓如何协同优化物料流转效率?
  • 从零打造可落地的直流电机 PID 驱动系统(四):Android 蓝牙控制 APP 开发(新手友好版)
  • 最好用的AI论文写作软件推荐(从开题选题到定稿排版全流程)适合全体毕业生
  • 3大实战技巧:如何用FastExcel极速处理百万级Excel数据?
  • 通过Taotoken CLI工具一键配置多款AI开发工具环境
  • 从零打造直流电机 PID 驱动系统(三):iOS 蓝牙控制 APP 开发(新手友好版)
  • 智能音频切片工具终极指南:告别手动剪辑的烦恼
  • 邻近连接技术伯远邻近连接技术深耕邻近连接技术
  • 英伟达816亿营收+国产2000亿参数图像模型:AI军备赛再升级
  • 智能体之间互相结算 怎么定价呢 评论区告诉我
  • 企业内训系统集成AI问答时采用Taotoken的成本控制实践
  • 智慧树视频自动化插件的技术实现与架构解析
  • 诺玛斯基棱镜设计与加工实现
  • IDM激活脚本:破解30天限制背后的注册表权限技术内幕
  • 通过用量看板清晰追踪团队大模型API消费明细
  • 初次使用Taotoken从注册到成功发起调用的全过程体验
  • 多模态大模型Grounding目标检测数据集 - 苹果检测数据集下载
  • 2026年AI岗位薪资揭秘:高薪背后是挑战,小白如何抓住机遇并收藏这份指南?
  • 中东出口静电粉末喷枪口碑推荐
  • 戴尔G15散热终极控制:开源TCC-G15高效替代方案完全指南
  • 2026数字营销岗位需要具备的能力有哪些
  • 软考高项案例分析11:项目管理概述
  • 荷兰市场本地化突围关键,ElevenLabs语音合成合规性解析,欧盟GDPR+NL-ALP认证细节首次公开
  • 【抽奖系统-0】Redis 缓存与 RabbitMQ 削峰实战;架构梳理
  • 随机数Random