Spark本地模式下executor配置与shuffle现象相关问题咨询
问题1解答
正确答案为:1个worker实例,1个executor拥有16核/线程
Spark的local[*]属于单进程运行模式,Driver和Executor完全运行在同一个JVM进程内,不会启动多个Executor实例:
- 本地模式下不存在独立的Worker进程,所谓的worker实例本质就是当前运行的JVM进程本身
*对应的线程数等于机器的CPU核心数,这16个线程就是唯一的Executor内的任务执行线程,不会拆分到16个独立的Executor中。
问题2解答
shuffle本质是Spark为了处理宽依赖算子(如聚合、关联、排序等)设计的阶段间数据重分区机制,和是否跨JVM、跨节点没有绑定关系:
只要作业的DAG中存在宽依赖,就会被划分成上下游不同的Stage,完整的shuffle流程就会被触发:
- 上游Stage的所有Task执行完成后,会按照分区规则将计算结果写入本地磁盘,你观测到的
shuffleBytesWritten、shuffleRecordsWritten就是这一步的统计值 - 下游Stage的Task需要拉取自己负责的分区对应的数据做计算,哪怕所有数据都在同一个JVM所在的机器上,也要从本地磁盘读取上游写出的分区数据,这一步就对应shuffle读的统计
你给出的指标中shuffleRemoteBlocksFetched为0也符合本地模式的特征:所有shuffle数据都是本地读取,没有跨节点的远程拉取开销,但整个shuffle的核心流程还是完整执行了,所以会统计到shuffle相关的指标。
内容的提问来源于stack exchange,提问作者F Baig
相关产品推荐
相关产品推荐

