Spark如何将切片分解为任务/执行者/工作者?

nom*_*-ir 12 apache-spark

我有一个2节点的Spark集群,每个节点有4个核心.

        MASTER
(Worker-on-master)              (Worker-on-node1)
Run Code Online (Sandbox Code Playgroud)

Spark配置:

  • slave:master,node1
  • SPARK_WORKER_INSTANCES = 1

我想了解Spark的paralellize行为.sparkPi示例包含以下代码:

val slices = 8  // my test value for slices
val n = 100000 * slices
val count = spark.parallelize(1 to n, slices).map { i =>
  val x = random * 2 - 1
  val y = random * 2 - 1
  if (x*x + y*y < 1) 1 else 0
}.reduce(_ + _)
Run Code Online (Sandbox Code Playgroud)

根据文件:

Spark将为群集的每个切片运行一个任务.通常,您希望群集中的每个CPU有2-4个切片.

我将切片设置为8,这意味着工作集将在群集上的8个任务之间划分,反过来每个工作节点获得4个任务(每个核心1:1)

问题:

  1. 我在哪里可以看到任务级详细信息?内部执行程序我没有看到任务分解,所以我可以看到切片对UI的影响.

  2. 如何以编程方式查找上面的map函数的工作集大小?我认为它是n/slices(100000以上)

  3. 执行程序运行的多个任务是在多个线程中顺序运行还是并行运行?

  4. 推理每个CPU 2-4片.

  5. 我认为理想情况下我们应该调整SPARK_WORKER_INSTANCES以对应每个节点(在同构群集中)的核心数,以便每个核心获得自己的执行器和任务(1:1:1)

Mik*_*kia 7

我会尽力回答你的问题:

1.-我在哪里可以看到任务级别的详细信息?

提交作业时,Spark会在除主服务器之外的每个工作节点上存储有关任务细分的信息.这个数据存储,我相信(我只测试过Spark for EC2),在spark目录下的工作文件夹中.

2.-如何以编程方式查找地图功能的工作集大小?

虽然我不确定它是否将大小存储在切片的内存中,但第一个答案中提到的日志提供了有关每个RDD分区包含的行数的信息.

3.-执行程序运行的多个任务是否在多个线程中顺序或并行运行?

我相信节点内的不同任务是按顺序运行的.这显示在上面显示的日志中,表示每个任务的开始和结束时间.

4.-推理每个CPU 2-4片

有些节点比其他节点更快完成任务.具有比可用核心更多的切片以均衡的方式分配任务,从而避免由于较慢的节点而导致的长处理时间.