首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将碎片分给任务/执行者/工作人员?

如何将碎片分给任务/执行者/工作人员?
EN

Stack Overflow用户
提问于 2014-09-05 01:29:43
回答 3查看 10.4K关注 0票数 12

我有一个2节点星火集群,每个节点有4个核心.

代码语言:javascript
复制
        MASTER
(Worker-on-master)              (Worker-on-node1)

火花配置:

  • 奴隶:主人,node1
  • SPARK_WORKER_INSTANCES=1

我试图理解星火的paralellize行为。sparkPi示例具有以下代码:

代码语言:javascript
复制
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(_ + _)

根据文件:

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)。
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-10 12:57:36

我会尽我所能回答你的问题:

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

在提交作业时,除主节点外,火花还会在每个工作节点上存储有关任务分类的信息。我相信,这些数据被存储在星火目录下的工作文件夹中(我只使用EC2进行了测试)。

2.-如何以编程方式找到映射函数的工作集大小?

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

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

我相信节点内部的不同任务会按顺序运行。上面指出的日志显示了这一点,这些日志指示每个任务的开始和结束时间。

4.-每个CPU 2-4片背后的推理

一些节点比其他节点更快地完成任务。拥有比可用核心更多的片以平衡的方式分配任务,避免了由于节点速度较慢而导致的长处理时间。

票数 7
EN

Stack Overflow用户

发布于 2015-12-29 18:31:10

尝试一下#4:

对于#4,值得注意的是,“片”和“分区”是同一回事,有一个bug被归档,并努力清理文档:https://issues.apache.org/jira/browse/SPARK-1701

下面的链接扩展了#4:http://spark.apache.org/docs/latest/tuning.html#level-of-parallelism中的推理

具体而言,请看这一行:

通常,我们建议在集群中每个CPU核心执行2-3个任务。

一个重要的考虑因素是避免洗牌,而设置切片数就是其中的一部分。这是一个比我完全理解的更复杂的问题--在这里充分解释--基本思想是预先将数据分割成足够的分区/切片,以避免星火不得不重新洗牌才能得到更多的分区。

票数 3
EN

Stack Overflow用户

发布于 2018-07-04 10:53:09

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

我不理解您的问题,因为从UI中,我们肯定可以看到分区(如果您愿意的话)的效果。

2)如何以编程方式找到上述映射函数的工作集大小?我想是n/片(100000以上)

请详细说明您感兴趣的尺码。如果你指的是每个工人消耗的内存.每个星火分区有64 so所以..。来自火种的官方文件:

火花在主服务器上打印每个任务的序列化大小,因此您可以查看它以确定您的任务是否太大;一般来说,大于20 KB的任务可能值得优化。

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

一个很好的来源是这个问题:

Spark executor & tasks concurrency

4)每CPU 2-4片的推理。理想情况下,我们应该对SPARK_WORKER_INSTANCES进行调优,使其与每个节点(在同构集群中)中的核数相对应,以便每个核心都有自己的执行器和任务(1:1:1)。

主要的目标是不要有闲置的工人..。一旦它完成了一个任务,在等待其他节点完成更长的任务时,它总是有一些东西要处理。如果是(1:1:1),工人们就会无所事事。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25677407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档