相关疑难解决方法(0)

如何将阶段拆分为Spark中的任务?

让我们假设以下每个时间点只运行一个Spark作业.

到目前为止我得到了什么

以下是我了解Spark中发生的事情:

  1. SparkContext被创建,每个工作节点开始执行人.执行程序是单独的进程(JVM),它连接回驱动程序.每个执行程序都有驱动程序的jar.退出驱动程序,关闭执行程序.每个执行程序都可以保存一些分区.
  2. 执行作业时,将根据沿袭图创建执行计划.
  3. 执行作业分为几个阶段,其中阶段包含尽可能多的邻近(在谱系图中)转换和动作,但没有随机播放.因此阶段通过混洗分开.

图片1

我明白那个

  • 任务是通过序列化Function对象从驱动程序发送到执行程序的命令.
  • 执行程序反序列化(使用驱动程序jar)命令(任务)并在分区上执行它.

问题(S)

如何将舞台分成这些任务?

特别:

  1. 是由变换和操作决定的任务还是可以在任务中进行多个转换/操作?
  2. 任务是由分区确定的(例如,每个分区每个阶段一个任务).
  3. 任务是由节点确定的(例如,每个节点每个阶段一个任务)?

我的想法(只有部分答案,即使是正确的)

https://0x0fff.com/spark-architecture-shuffle中,随着图像解释了随机播放

在此输入图像描述

我得到了规则的印象

每个阶段被分成#count-of-partitions任务,不考虑节点数量

对于我的第一张图片,我会说我有3个地图任务和3个减少任务.

对于来自0x0fff的图像,我会说有8个地图任务和3个减少任务(假设只有三个橙色和三个深绿色文件).

无论如何都要打开问题

那是对的吗?但即使这是正确的,我上面的问题也没有全部回答,因为它仍然是开放的,无论多个操作(例如多个地图)是在一个任务内还是每个操作分成一个任务.

别人怎么说

Spark的任务是什么?Spark工作人员如何执行jar文件?以及Apache Spark调度程序如何将文件拆分为任务?是相似的,但我觉得我的问题在那里得不到清楚.

apache-spark

125
推荐指数
3
解决办法
4万
查看次数

DAG如何在RDD的幕后工作?

星火研究论文已规定了新的分布式编程模型,相比于传统的Hadoop MapReduce的,声称在许多情况下,特别是机器学习的简化和广阔的性能提升.但是,材料揭开internal mechanicsResilient Distributed DatasetsDirected Acyclic Graph似乎缺乏本文.

通过调查源代码可以更好地学习吗?

directed-acyclic-graphs apache-spark rdd

60
推荐指数
2
解决办法
4万
查看次数

Spark集群上"Locality Level"的含义是什么?

标题"地点级别"和5状态数据本地 - >进程本地 - >节点本地 - >机架本地 - >任何?的含义是什么?

在此输入图像描述

cluster-computing apache-spark

43
推荐指数
2
解决办法
2万
查看次数

Spark Shuffle - 工人如何知道从哪里提取数据

我试图理解Spark如何在引擎盖下改变依赖关系.因此我有两个问题:

  1. 在Spark中,执行者如何知道从其他执行器获取数据?

    • 每个执行者在完成其地图侧任务后,是否将其状态和位置更新为某个中央实体(可能是驱动程序)并减少侧执行者首先联系驱动程序以获取每个执行程序的位置,然后直接从这些执行程序中取出?
  2. 在具有随机播放依赖性的作业中,只有在所有地图侧任务完成后,驱动程序计划才会加入(或其他任务与shuffle依赖关系)?

    • 这是否意味着每个任务都会通知驱动程序其状态,驱动程序将及时协调其他相关任务.

apache-spark

8
推荐指数
1
解决办法
1269
查看次数

spark.task.cpus和--executor-cores有什么区别

在我的mapPartition部分中,有多线程工作要做,我使用线程池并希望并行运行任务。但是我无法区分这两个参数。我想我可以将--executor-cores设置为5,然后在任务中运行4个线程。这是正确的吗?

multithreading apache-spark

4
推荐指数
1
解决办法
5147
查看次数