我有一个2节点星火集群,每个节点有4个核心.
MASTER
(Worker-on-master) (Worker-on-node1)火花配置:
我试图理解星火的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(_ + _)根据文件:
Spark将为集群的每个部分运行一个任务。通常,您需要为集群中的每个CPU分2-4片。
我将切片设置为8,这意味着工作集将被分配到集群上的8个任务中,然后每个工作节点得到4个任务(每个核心为1:1)。
问题:
n/slices (100000以上)SPARK_WORKER_INSTANCES进行调优,使其与每个节点(在同构集群中)中的核数相对应,以便每个核心都有自己的执行器和任务(1:1:1)。发布于 2014-09-10 12:57:36
我会尽我所能回答你的问题:
1.-我在哪里可以看到任务级别的详细信息?
在提交作业时,除主节点外,火花还会在每个工作节点上存储有关任务分类的信息。我相信,这些数据被存储在星火目录下的工作文件夹中(我只使用EC2进行了测试)。
2.-如何以编程方式找到映射函数的工作集大小?
虽然我不确定它是否将片的大小存储在内存中,但是第一个答案中提到的日志提供了关于每个RDD分区包含的行数的信息。
3.-执行程序运行的多个任务是按顺序运行还是在多个线程中并行运行?
我相信节点内部的不同任务会按顺序运行。上面指出的日志显示了这一点,这些日志指示每个任务的开始和结束时间。
4.-每个CPU 2-4片背后的推理
一些节点比其他节点更快地完成任务。拥有比可用核心更多的片以平衡的方式分配任务,避免了由于节点速度较慢而导致的长处理时间。
发布于 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个任务。
一个重要的考虑因素是避免洗牌,而设置切片数就是其中的一部分。这是一个比我完全理解的更复杂的问题--在这里充分解释--基本思想是预先将数据分割成足够的分区/切片,以避免星火不得不重新洗牌才能得到更多的分区。
发布于 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),工人们就会无所事事。
https://stackoverflow.com/questions/25677407
复制相似问题