Spark Push Based Shuffle 原理分析_spark remoteblockpushresolver(4)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

<value>org.apache.spark.network.shuffle.RemoteBlockPushResolver</value>
默认为 org.apache.spark.network.shuffle. NoOpMergedShuffleFileManager

### 客户端配置


spark-defaults.conf



spark.shuffle.push.enabled true
spark.master yarn
spark.shuffle.service.enabled true
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.io.encryption.enabled false


关闭 adaptive 执行,此项不是必须的,仅在测试中不自动调整下游任务的并发度。



spark.sql.adaptive.enabled false


### 执行流程


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/bf9d0aea63d44f37b22155c068712469.png)


#### 1.Get Merger Locations


因为同一个shuffle partition 的数据要放到同一个 ESS。ESS 要把收到的多个 mapper 的同一个 shuffle partition 的数据进行合并, Merger Location 就是进行合并的这些 ESS 的地址。  
 整个 Stage 的所有 Map Task 拿到的是相同的 merge locations。


计算逻辑:  
 如果正在运行 Executor 的 host 的数量大于需要的 locations 的数量,则直接返回正在运行执行器的 host 列表。  
 如果不够的话,加上第 2 部分。第2部分从所有运行过执行器的 host 中查找,去除第 1 部分中重叠的 host,并且去除加入黑名单的host。第 2 部分的 host 是开启 Dynamic Allocation 后,在这些 host 上启动过 Executor, 并且 Executor 没有任务正常退出。


触发时机:  
 第 1 版是在 Stage 启动的时候计算,发现开启 Dynamic Allocation 后,开始运行的 Executor 是 initialExecutors。造成大任务的 shuffle 数据被 push 到少数的 ESS 上。  
 第 2 版是 Mapper 把 shuffle 数据写到本地磁盘后,再调用 get merger locations。比第 1 版好一些。


问题: merger location 是现在运行的 executor 地址。如 application 刚开始运行时队列资源紧张,第 1 个 mapper 处理完时,getMergerLocation 时,申请到的 executor 不多,但是任务很大,后续可能申请到更多 executor。就会出现把 shuffle 数据 push 到少数 ess 上, 照成 shuffle 数据倾斜。


是否可能用所有的 ESS 地址参加 get merger locations 的计算?这样就不会有 shuffle 数据倾斜的问题。难点:如果一个 node 上没有运行 application 的 executor,就不会向 ess 注册 appl
<think>好的,我现在要处理用户关于华为大数据技术面试的问题。用户希望了解常见的面试问题及解决方案,并且系统提示需要结合之前的引用内容。首先,我需要回忆用户提供的三个引用,看看哪些可以关联上。 引用1提到数据治理的挑战,比如文化阻力、资源分配、数据孤岛等。这可能和大数据平台设计、数据治理相关的问题有关。华为可能会问如何处理数据孤岛或如何实施数据治理,这时候可以引用这些点。 引用2讲的是数据倾斜的定义,常见于处理大数据时的性能问题。数据倾斜是面试中的经典问题,需要解决方案,比如调整分区键或使用Combiner。这里需要结合Hadoop或Spark的数据处理机制。 引用3关于Hive的查询处理流程,涉及查询编译、优化器和物理执行计划。华为可能问Hive优化策略,可以提到谓词下推、MapReduce任务拆分等。 接下来,我需要整理华为大数据面试的常见技术点。通常包括Hadoop生态组件(HDFS、MapReduce、YARN)、Spark、Hive优化、数据倾斜处理、数据治理、实时计算(如Flink)、分布式系统原理等。 然后,结合用户提供的引用,将相关知识点对应起来。例如,数据治理的挑战可以对应到数据治理策略的问题;数据倾斜对应到处理大数据性能优化的方法;Hive的查询流程对应到Hive优化问题。 接下来需要组织回答结构,按照常见问题分类,每个问题给出解决方案,并适当引用提供的资料。比如: 1. 数据倾斜问题:解释现象,引用[2]中的定义,然后给出解决方法如增加随机前缀、使用Combiner等。 2. Hive优化:引用[3]中的优化步骤,如谓词下推、分区剪裁等。 3. 数据治理挑战:引用[1]中的问题,如数据孤岛,技术选型,然后给出解决方案,比如元数据管理、数据标准化。 另外,华为可能关注实际项目经验,需要结合理论解决方案和实际应用案例,比如在项目中如何解决数据倾斜,如何优化Hive查询速度。 需要注意使用中文,数学公式用$...$,独立公式用$$...$$,但用户的问题可能不涉及太多数学,所以可能用不上。不过如果有涉及算法复杂度的话可能需要,比如解释排序算法的时间复杂度。 最后,生成相关问题,比如如何处理数据倾斜,Hive优化方法,数据治理的挑战等,确保问题与回答内容相关,并参考之前的引用。 检查是否符合系统级指令,确保格式正确,没有使用markdown,引用标识正确,比如[^1]、[^2]等。</think>### 华为大数据技术面试常见问题与解决方案 #### 一、数据治理与平台设计 1. **数据孤岛问题** **问题**:如何整合分散在不同系统中的数据? **解决方案**: - 建立统一元数据管理系统,通过数据湖(如Hudi、Iceberg)实现多源数据统一存储[^1] - 使用ETL工具(如DataX)进行数据清洗和标准化 - 示例:华为FusionInsight平台通过元数据联邦查询整合Hive、HBase等异构数据源 2. **数据治理初期挑战** **问题**:如何说服团队接受数据治理规范? **解决方案**: - 结合华为内部流程,制定与企业目标对齐的治理指标(如数据质量达标率) - 通过小范围试点展示治理效果(如减少30%重复数据处理时间)[^1] --- #### 二、大数据处理核心问题 1. **数据倾斜(Data Skew)** **问题**:Reduce阶段某些节点负载过高导致任务延迟[^2] **解决方案**: - **预处理**:对Key添加随机前缀(如`salting`),分散数据分布 ```sql -- Hive示例:将key扩展为随机数+原值 SELECT CONCAT(CAST(RAND()*10 AS INT), '_', key) AS new_key, value FROM table; ``` - **运行时优化**:启用Spark的`Combine`预聚合或Flink的`LocalKeyBy`机制 2. **Hive查询优化** **问题**:如何提升HiveQL执行效率? **解决方案**: - **逻辑优化**:利用谓词下推(Predicate Pushdown)提前过滤数据[^3] - **物理优化**:对JOIN操作使用MapJoin(小表广播),避免Reduce阶段Shuffle - **华为实践**:在FusionInsight中启用CBO(Cost-Based Optimizer)自动选择最优执行计划 --- #### 三、分布式系统原理 1. **CAP理论应用** **问题**:设计分布式存储系统时如何权衡一致性、可用性、分区容忍性? **解决方案**: - **华为HDFS实践**:强一致性(CP)+ 副本机制(默认3副本)保障可靠性 - **流处理场景**:采用Flink的Exactly-Once语义(CP)与Kafka高吞吐(AP)结合 2. **故障恢复机制** **问题**:如何实现Spark任务容错? **解决方案**: - **RDD血缘(Lineage)**:通过DAG重新计算丢失分区 - **Checkpointing**:定期将状态持久化到HDFS --- #### 四、实时计算技术 1. **Flink窗口机制** **问题**:如何处理乱序事件流? **解决方案**: - 使用`Watermark`机制定义事件时间容忍延迟 - 华为增强方案:动态调整Watermark阈值(如网络抖动场景) $$ Watermark(T) = max\_event\_time - delay\_threshold $$ 2. **状态管理** **问题**:如何避免Flink状态爆炸? **解决方案**: - 设置TTL(Time-To-Live)自动清理过期状态 - 使用RocksDB状态后端实现磁盘溢出(Spill to Disk) --- #### 五、项目经验类问题 **典型问题**:请举例说明你解决过的最复杂的大数据问题 **回答框架**: 1. **背景**:描述数据规模(如"10TB日志数据/天")和业务目标(如"实时风控") 2. **挑战**:明确技术难点(如"95分位延迟超过SLA") 3. **方案**:结合前述技术点(如"Flink反压优化+Kafka分区重平衡") 4. **结果**:量化指标(如"端到端延迟降低60%") ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值