RpcEnv 实例在 Driver、Master 还是 Worker 中?

Where is the RpcEnv instance in, Driver, Master or Worker?

RpcEnv实例在哪里,每个组件如何获取对应的rpcEnv实例?组件如何相互连接?

RpcEnv是一个RPC环境,它是为Spark中的每个组件单独创建的,用于彼此之间交换消息以进行远程通信。

Spark 为驱动程序和执行程序创建 RPC 环境(分别通过执行 SparkEnv. createDriverEnv and SparkEnv.createExecutorEnv 方法)。

SparkEnv.createDriverEnv 专用于 SparkContext is created for the driver:

_env = createSparkEnv(_conf, isLocal, listenerBus)

您可以自己使用 RpcEnv.create 工厂方法创建 RPC 环境(与 ExecutorBackends 一样,例如 CoarseGrainedExecutorBackend):

val env = SparkEnv.createExecutorEnv(
    driverConf, executorId, hostname, cores, cfg.ioEncryptionKey, isLocal = false)

还为 standalone Master and workers 创建了单独的 RpcEnv


How do the components make connection to each other?

这里没什么神奇的:) 首先创建 Spark 应用程序的驱动程序和 Spark Standalone 集群的独立 Master,它们不依赖于其他组件。

当 Spark 应用程序的驱动程序启动时,它会使用命令请求资源(以来自集群管理器的资源容器的形式)以启动执行程序(每个集群管理器不同)。在启动命令中,有驱动程序的 RpcEndpoint 的连接详细信息(即主机和端口)。

Client 中查看它如何与 Hadoop YARN 一起工作。

这与独立 Workers 的过程类似,不同之处在于管理员必须在命令行指定 master 的 URL。

$ ./sbin/start-slave.sh
Usage: ./sbin/start-slave.sh [options] <master>

Master must be a URL of the form spark://hostname:port

Options:
  -c CORES, --cores CORES  Number of cores to use
  -m MEM, --memory MEM     Amount of memory to use (e.g. 1000M, 2G)
  -d DIR, --work-dir DIR   Directory to run apps in (default: SPARK_HOME/work)
  -i HOST, --ip IP         Hostname to listen on (deprecated, please use --host or -h)
  -h HOST, --host HOST     Hostname to listen on
  -p PORT, --port PORT     Port to listen on (default: random)
  --webui-port PORT        Port for web UI (default: 8081)
  --properties-file FILE   Path to a custom Spark properties file.
                           Default is conf/spark-defaults.conf.