PySpark之Spark Shuffle

三、Spark Shuffle

一、Spark的Shuffle简介

  • Spark在DAG调度阶段会将一个Job划分为多个Stage,上游Stage做map工作,下游Stage做reduce工作,其本质上还是MapReduce计算框架。Shuffle是连接map和reduce之间的桥梁,它将map的输出对应到reduce输入中,涉及到序列化和反序列化、跨节点网络IO以及磁盘读写IO等

  • Spark的Shuffle分为Write和Read两个阶段,分属于两个不同的Stage,前者是Parent Stage的最后一步,后者是Child Stage的第一步
    在这里插入图片描述

  • 执行Shuffle的主体是Stage中的并发任务,这些任务分ShuffleMapTask和ResultTask两种,ShuffleMapTask要进行Shuffle,ResultTask负责返回计算结果,一个Job中只有最后的Stage采用ResultTask,其他的均为ShuffleMapTask。如果要按照map端和reduce端来分析的话,ShuffleMapTask可以即是map端任务,又是reduce端任务,因为Spark中的Shuffle是可以串行的;ResultTask则只能充当reduce端任务的角色。
    在这里插入图片描述

四、HashShuffle详解

一、Shuffle阶段划分:

  • shuffle write:mapper阶段,上一个stage得到最后的结果写出
  • shuffle read :reduce阶段,下一个stage拉取上一个stage进行合并

二、未经优化的hashShuffleManager:

  • HashShuffle是根据task的计算结果的key值的hashcode%ReduceTask来决定放入哪一个区分,这样保证相同的数据一定放入一个分区,Hash Shuffle过程如下:

### 关于Cloudera平台上的SparkPySpark #### 安装与配置 为了在Cloudera平台上安装并配置Apache Spark以及PySpark环境,通常建议通过Cloudera Manager来完成这一过程。这不仅简化了部署流程,还提供了图形化的界面用于监控集群健康状态和服务性能。 对于基于RPM包管理系统的Linux发行版而言,在开始之前确实需要先下载并安装`bootstrap` RPM文件[^1]。此操作会更新本地Yum源设置以加入来自Cloudera官方维护的远程仓库链接,从而使得后续能够顺利获取到最新版本的Hadoop生态系统组件及其依赖项。 一旦完成了上述准备工作之后,则可以通过Cloudera Manager界面对所需服务进行选择性启用;具体来说就是找到“Add Service”选项卡下的Spark服务,并按照向导指示逐步完成初始化设定工作。值得注意的是,在这个过程中可以指定是否要同时开启支持Python编程接口(PySpark)的功能开关。 ```bash sudo yum install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server ``` 这段命令适用于执行初步软件栈搭建阶段,即当环境中尚未存在任何CDH(Clondera's Distribution Including Apache Hadoop)相关程序时所采取的动作。 #### 使用教程 针对初次接触Spark框架的新手开发者们,可以从简单的Word Count案例入手学习如何编写基本的数据处理逻辑。而在掌握了核心概念和技术要点以后,则可尝试探索更多高级特性比如流式计算(Streaming),机器学习库(MLlib),图算法(GraphX)等领域的内容。 至于PySpark部分,则更加侧重于介绍怎样利用Pandas DataFrame API风格的操作方式去实现高效便捷的大规模数据分析任务。由于其底层仍然依托于RDD机制运作,因此两者之间存在着紧密联系但也存在一定差异之处值得深入研究比较。 #### 最佳实践 - **资源规划**:合理分配节点内存给各个应用实例,避免因过度占用而导致整体系统响应缓慢甚至崩溃的情况发生。 - **数据分区优化**:根据实际业务场景需求调整输入输出文件大小及数量,减少Shuffle环节带来的额外开销。 - **持久化策略选取**:权衡不同级别的缓存模式利弊得失,力求达到速度与成本之间的平衡点。 - **错误恢复机制设计**:构建完善的日志记录体系以便快速定位故障原因,并制定相应的补救措施确保作业连续稳定运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值