>
执行者为每个应用程序。那么工人的角色是什么呢?它是否与执行者协调并将结果反馈给驱动程序?还是司机直接找被执行人对话?如果是的话,那么工人的目的是什么呢?
如何控制申请执行人数?
任务可以在执行器中并行运行吗?如果是,如何配置执行器的线程数?
示例2与示例1相同的集群配置,但我使用以下设置运行一个应用程序--executor-cores10--total-executor-cores10。
示例3与示例1相同的集群配置,但我使用以下设置运行一个应用程序--executor-cores10--total-executor-cores50。
示例4与示例1相同的集群配置,但我使用以下设置运行一个应用程序--executor-cores50--total-executor-cores50。
在每个例子中,有多少执行者?每个执行程序有多少线程?几个核心?每宗申请的被执行人人数是如何决定的?是不是总是和工人的数量一样?
Spark采用主/从架构。正如您在图中所看到的,它有一个中央协调器(驱动程序),它与许多分布式工作者(执行器)进行通信。驱动程序和每个执行程序在各自的Java进程中运行。
驱动程序
驱动程序是运行主方法的进程。首先,它将用户程序转换为任务,然后在执行器上调度任务。
您的问题
>
当执行程序启动时,它们将自己注册到驱动程序中,然后直接通信。工作人员负责向集群管理器通报其资源的可用性。
在一个YARN集群中,您可以使用--num-executors来实现这一点。在独立集群中,除非您使用spark.executor.cores,并且一个工作器有足够的核心来容纳多个执行器,否则每个工作器将得到一个执行器。(正如@jaceklaskowski指出的,--num-executors在YARN中已不再使用https://github.com/apache/spark/commit/16b6d18613e150c7038c613992d80a7828413e66)
正如Sean Owen在这篇文章中所说:“没有一个好的理由让每台机器运行一个以上的工人”。例如,在一台机器中会有许多JVM。
更新
我还没能测试这种场景,但是根据文档:
当Spark应用程序提交到集群时,这些设置在上设置。
工人出现在图片上。为了运行我的代码,我使用了以下命令:
我正在AWS EMR上学习火花。在这个过程中,我试图理解执行者数量(--num-executors)和执行者核心(--executor-cores)之间的区别。谁能告诉我这里吗? 同样,当我试图提交以下作业时,我得到了错误:
我有一个向spark独立单节点集群提交spark作业的maven scala应用程序。提交作业时,Spark应用程序尝试使用spark-cassandra-connector访问Amazon EC2实例上托管的cassandra。连接已建立,但不返回结果。一段时间后连接器断开。如果我在本地模式下运行spark,它工作得很好。我试图创建简单的应用程序,代码如下所示: SparkContext.Sca
应用程序不是那么占用内存,有两个连接和写数据集到目录。同样的代码在spark-shell上运行没有任何失败。 寻找群集调优或任何配置设置,这将减少执行器被杀死。