我对Spark有点陌生,并试图理解一些术语。 (无法理解如何使用在线资源)
请先使用以下条款验证我:
执行器:其container or JVM process
将在worker node or data node
上运行。每个节点可以有多个执行器。
Core:它是在container or JVM process
上运行的worker node or data node
中的一个线程。每个执行者可以有多个核心或线程。
如果上述两个概念有误,请纠正我。
问题:
1]每当我们提交火花作业时,这意味着什么?我们是否要将工作移交给Yarn或资源管理器,后者将资源分配给群集中的我的application or job
并执行该任务?它是正确的理解..?
2)在用于在Spark集群中提交作业的命令中,有一个选项可以设置执行者的数量。
spark-submit --class <CLASS_NAME> --num-executors ? --executor-cores ? --executor-memory ? ....
因此,将在每个节点上设置这些数量的执行者+内核吗?如果不是,那么我们如何设置每个节点的特定核心数?
您所有的假设都是正确的。有关群集体系结构的详细说明,请通过this链接。您会得到清晰的画面。关于第二个问题,执行者数是整个集群的总和。计算公式如下:
num-cores-per-node * total-nodes-in-cluster
例如,假设您有一个包含20个节点的4核机器的集群,并且使用-executor-memory 1G和--total-executor-cores 8提交了一个应用程序。然后Spark将启动八个执行器,每个执行器都有1 GB的RAM,在不同的计算机上。默认情况下,Spark会这样做,以使应用程序有机会实现在同一台计算机(例如HDFS)上运行的分布式文件系统的数据局部性,因为这些系统通常会将数据散布在所有节点上。
希望对您有所帮助!