繁体   English   中英

Spark如何在Hadoop YARN上准备执行程序?

[英]How does Spark prepare executors on Hadoop YARN?

我正在尝试了解Spark如何准备执行程序的详细信息。 为了做到这一点,我尝试调试org.apache.spark.executor.CoarseGrainedExecutorBackend并调用

Thread.currentThread().getContextClassLoader.getResource("")

它指向以下目录:

/hadoop/yarn/local/usercache/_MY_USER_NAME_/appcache/application_1507907717252_15771/container_1507907717252_15771_01_000002/

查看目录,我发现以下文件:

default_container_executor_session.sh
default_container_executor.sh
launch_container.sh
__spark_conf__
__spark_libs__

问题是谁将文件交付给每个执行者,然后仅使用适当的类路径运行CoarseGrainedExecutorBackend 什么是脚本? 它们都是YARN自动生成的吗?

我查看了org.apache.spark.deploy.SparkSubmit ,但内部没有发现任何有用的东西。

哎呀...您需要很多有关Spark在请求资源时如何与集群管理器通信的详细信息。 让我给你一些信息。 不断询问您是否想要更多...


您正在使用Hadoop YARN作为Spark应用程序的集群管理器。 让我们只关注这个特定的集群管理器(因为Spark支持的其他组件有Apache Mesos,Spark Standalone,DC / OS和不久的Kubernetes,它们都有自己的方式来处理Spark部署)。

默认情况下,在使用spark-submit Spark应用程序时,Spark应用程序(即它实际使用的SparkContext )请求三个YARN容器。 一个容器用于该Spark应用程序的ApplicationMaster ,它知道如何与YARN对话并为两个Spark执行者请求另外两个YARN容器。

您可以查看YARN官方文档的Apache Hadoop YARNHadoop:编写YARN应用程序以更深入地研究YARN内部。

提交Spark应用程序时,Spark的ApplicationMaster使用YARN“协议”提交给YARN,该协议要求对第一个YARN容器( 容器0 )的请求使用ContainerLaunchContext ,该ContainerLaunchContext包含所有必要的启动详细信息(请参阅Client.createContainerLaunchContext )。

在此处输入图片说明

谁将文件交付给每个执行者

这就是YARN被告知如何启动Spark应用程序的ApplicationMaster的方式。 在满足对ApplicationMaster容器的请求时,YARN下载在容器的工作空间中找到的必要文件。

这是任何 YARN应用程序在YARN上如何工作的本质,并且与Spark几乎(无关)无关。

负责通信的代码在Spark的Client ,尤其是。 Client.submitApplication

在此处输入图片说明

然后仅使用适当的类路径运行CoarseGrainedExecutorBackend

引用掌握Apache Spark 2 gitbook:

CoarseGrainedExecutorBackend是一个独立的应用程序,当在YARN的ExecutorRunnable上启动(...)Spark时,将在资源容器中启动。

当YARN的YarnAllocator上的Spark在分配的YARN资源容器中调度ExecutorRunnable将启动ExecutorRunnable

在此处输入图片说明

什么是脚本? 它们都是YARN自动生成的吗?

的种类。

有些是由Spark准备的,作为Spark应用程序提交的一部分,而另一些则是特定于YARN的。

在您的Spark应用程序中启用DEBUG日志记录级别,您将看到文件传输。


您可以在Spark官方文档的YARN上Running Spark和我的Mastering Apache Spark 2 gitbook中找到更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM