知识卡片
处理连接中的数据偏斜:热键补偿技术
内容
[[排序合并连接把相关数据放在一起的核心思想]]的前提是”同一个键的所有记录都能进同一个Reducer”,但当某个键(如社交网络里的名人账号,被称为关键对象或热键)关联的数据量远超其他键时,这个前提就会造成严重的负载偏斜:一个Reducer被迫处理远多于其他Reducer的记录量,而MapReduce作业只有等所有Reducer都完成才算完成,于是整个作业被这一个”热点”拖慢。应对办法是打破”同键必须同Reducer”的硬约束:Pig的偏斜连接方法先跑一个抽样作业识别出哪些键是热键,连接执行时把热键相关的记录随机(而非按哈希确定性地)分发到几个Reducer之一分摊负载,但连接另一侧对应该热键的记录就必须被复制到所有承接这个键的Reducer上,代价是额外的数据复制;Crunch的分片连接思路类似但要求显式指定热键,无需抽样;Hive则要求在表元数据里显式标注热键、把它们单独存放,遇到热键连接时改用Map侧连接处理。对分组聚合场景,也可以用两阶段思路缓解:先随机分发到多个Reducer各自算出局部聚合结果,再用第二个作业合并成每个键的最终结果。
参考来源
- 位置:《数据密集型应用系统设计》第十章《批处理》"处理偏斜"(源文件:_epub-src/ch10_split_001.html)
- 结论依据:原文定义关键对象/热键导致的负载偏斜问题,给出Pig偏斜连接(抽样识别热键、随机分发+复制另一侧记录)、Crunch分片连接、Hive显式标注热键改用Map侧连接三种应对方案,直接支撑本卡片结论。
- 原始内容:这种不成比例的活动数据库记录被称为关键对象或热键……Pig中的偏斜连接方法首先运行一个抽样作业来确定哪些键是热键……对于另外一侧的连接输入,与热键相关的记录需要被复制到所有处理该键的Reducer上。