我有一个2节点的Spark集群,每个节点有4个核心。
MASTER
(Worker-on-master) (Worker-on-node1)
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个片。
我将slices设置为8,这意味着工作集将被划分为集群上的8个任务,反过来每个工作节点得到4个任务(每个核心1:1)
我假设理想情况下,我们应该调优spark_worker_instances
,使其与每个节点(在同构集群中)中的核数相对应,以便每个核获得自己的执行器和任务(1:1:1)
我会尽力回答你的问题:
1.-在哪里可以看到任务级别的详细信息?
在提交作业时,Spark将有关任务分解的信息存储在除主节点之外的每个工作节点上。我相信,这些数据存储在Spark目录下的工作文件夹中(我只使用Spark for EC2进行过测试)。
4.-每个CPU 2-4个切片背后的推理
一些节点比其他节点更快地完成任务。拥有比可用核心更多的切片可以均衡地分配任务,避免因节点速度较慢而导致的处理时间过长。
注意:我在纱线上使用火花 我一直在尝试Spark中实现的公制。我启用了ConsoleSink和CsvSink,并为所有四个实例(驱动程序、主程序、执行器和工作程序)启用了JvmSource。然而,我只有驱动程序输出,在控制台和csv目标目录中没有工人/执行者/主数据。 看完这个问题后,我想知道在提交作业时,是否需要向执行者发送一些东西。 我的提交命令:<code>/bin/sark提交——类org
执行者即任务需要执行的人或者涉及到任务协同时的主要负责人,每个任务对应唯一执行者。参与者指的是需要关注进展的成员或协同任务的执行人。创建者指的是创建当前任务的人。任务的创建者默认为任务的参与者。
我在AWS上设置了一个10节点的HDP平台。下面是我的配置2台服务器——名称节点和备用名称节点7个数据节点,每个节点有40个vCPU和160 GB内存。 我试图在提交spark应用程序时计算执行者的数量,在浏览了不同的博客后,我对这个参数的实际含义感到困惑。 看看下面的博客,num executors似乎是所有节点上的执行者总数http://blog.cloudera.com/blog/2015/
我一直在寻找这样一种情况的解决方案:我有一个调用项的哈希集,并且我要将这个集提交给执行器进行并行执行。现在我想只要任何提交的任务完成,我应该能够分配一个新的Callable到Executor。 我尝试了这段代码,但是如果我使用Executor.Invoke,那么Executor将等待直到所有任务完成,如果我使用Executor.Submit,那么任务将按顺序完成。如有任何帮助,我们将不胜感激。
> 执行者为每个应用程序。那么工人的角色是什么呢?它是否与执行者协调并将结果反馈给驱动程序?还是司机直接找被执行人对话?如果是的话,那么工人的目的是什么呢? 如何控制申请执行人数? 任务可以在执行器中并行运行吗?如果是,如何配置执行器的线程数? 示例2与示例1相同的集群配置,但我使用以下设置运行一个应用程序--executor-cores10--total-executor-cores10。 示例