当我启动一个Spark作业时,我会发现Executor启动命令行如下:
bin/java -cp /opt/conf/:/opt/jars/* -Xmx1024M -Dspark.driver.port=56559
org.apache.spark.executor.CoarseGrainedExecutorBackend
--driver-url spark://CoarseGrainedScheduler@10.1.140.2:56559
--executor-id 1 --hostname 10.1.140.5 --cores 2
--app-id app-20161221132517-0000
--worker-url spark://Worker@10.1.140.5:56451
从上面的命令我们会找到行--worker-url spark://Worker@10.1.140.5:56451
,我很好奇,为什么Executor需要与Worker沟通,在我看来,执行者只需要与其他执行者交谈,驱动程序。
答案 0 :(得分:1)
您可以在上面的图片中看到Executors are part of worker nodes
。
应用程序:基于Spark构建的用户程序。由群集上的driver program and executors
组成。
工作线程:群集中可以run application code
的任何节点
执行者:为应用on a worker node
启动了一个流程,runs tasks and keeps data in memory or disk
存储了这些流程。每个应用程序都有自己的执行程序。
答案 1 :(得分:0)
执行者的命运与工人的命运联系在一起。如果工人异常终止,执行者必须能够检测到这一事实并自行停止。如果没有这个过程,最终可能会遇到“幽灵”执行者。