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.
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.