LocalEndpoint¶
LocalEndpoint is the ThreadSafeRpcEndpoint for LocalSchedulerBackend and is registered under the LocalSchedulerBackendEndpoint name.
Review Me¶
LocalEndpoint is <LocalSchedulerBackend is requested to <
Put simply, LocalEndpoint is the communication channel between <LocalEndpoint is a (thread-safe) rpc:RpcEndpoint.md[RpcEndpoint] that hosts an <driver ID and localhost hostname) for Spark local mode.
[[messages]] .LocalEndpoint's RPC Messages [cols="1,3",options="header",width="100%"] |=== | Message | Description
| <
| <
| < |
|---|
| <
|===
When a LocalEndpoint starts up (as part of Spark local's initialization) it prints out the following INFO messages to the logs:
INFO Executor: Starting executor ID driver on host localhost
INFO Executor: Using REPL class URI: http://192.168.1.4:56131
[[executor]] LocalEndpoint creates a single executor:Executor.md[] with the following properties:
-
[[localExecutorId]] driver ID for the executor:Executor.md#executorId[executor ID]
-
[[localExecutorHostname]] localhost for the executor:Executor.md#executorHostname[hostname]
-
<
> for the executor:Executor.md#userClassPath[user-defined CLASSPATH] -
executor:Executor.md#isLocal[isLocal] flag enabled
The <LocalEndpoint is requested to handle <
[[internal-registries]] .LocalEndpoint's Internal Properties (e.g. Registries, Counters and Flags) [cols="1m,3",options="header",width="100%"] |=== | Name | Description
| freeCores a| [[freeCores]] The number of CPU cores that are free to use (to schedule tasks)
Default: Initial <
Increments when LocalEndpoint is requested to handle <
Decrements when LocalEndpoint is requested to <
NOTE: A single task to execute costs scheduler:TaskSchedulerImpl.md#CPUS_PER_TASK[spark.task.cpus] configuration (default: 1).
Used when LocalEndpoint is requested to <
|===
[[logging]] [TIP] ==== Enable INFO logging level for org.apache.spark.scheduler.local.LocalEndpoint logger to see what happens inside.
Add the following line to conf/log4j.properties:
log4j.logger.org.apache.spark.scheduler.local.LocalEndpoint=INFO
Refer to <<../spark-logging.md#, Logging>>.¶
=== [[creating-instance]] Creating LocalEndpoint Instance
LocalEndpoint takes the following to be created:
- [[rpcEnv]] <<../index.md#, RpcEnv>>
- [[userClassPath]] User-defined class path (
Seq[URL]) that is the <> configuration property and is used exclusively to create the < > - [[scheduler]] scheduler:TaskSchedulerImpl.md[TaskSchedulerImpl]
- [[executorBackend]] <
> - [[totalCores]] Number of CPU cores (aka totalCores)
LocalEndpoint initializes the <
=== [[receive]] Processing Receive-Only RPC Messages -- receive Method
[source, scala]¶
receive: PartialFunction[Any, Unit]¶
NOTE: receive is part of the rpc:RpcEndpoint.md#receive[RpcEndpoint] abstraction.
receive handles (processes) <
==== [[ReviveOffers]] ReviveOffers RPC Message
[source, scala]¶
ReviveOffers()¶
When <LocalEndpoint <
NOTE: ReviveOffers RPC message is sent out exclusively when LocalSchedulerBackend is requested to <
==== [[StatusUpdate]] StatusUpdate RPC Message
[source, scala]¶
StatusUpdate( taskId: Long, state: TaskState, serializedData: ByteBuffer)
When <LocalEndpoint requests the <taskId, the task state and the data).
If the given scheduler:Task.md#TaskState[TaskState] is a finished state (one of FINISHED, FAILED, KILLED, LOST states), LocalEndpoint adds scheduler:TaskSchedulerImpl.md#CPUS_PER_TASK[spark.task.cpus] configuration (default: 1) to the <
NOTE: StatusUpdate RPC message is sent out exclusively when LocalSchedulerBackend is requested to <
==== [[KillTask]] KillTask RPC Message
[source, scala]¶
KillTask( taskId: Long, interruptThread: Boolean, reason: String)
When <LocalEndpoint requests the single <taskId, the interruptThread flag and the reason).
NOTE: KillTask RPC message is sent out exclusively when LocalSchedulerBackend is requested to <
=== [[reviveOffers]] Reviving Offers -- reviveOffers Method
[source, scala]¶
reviveOffers(): Unit¶
reviveOffers...FIXME
NOTE: reviveOffers is used when LocalEndpoint is requested to <
=== [[receiveAndReply]] Processing Receive-Reply RPC Messages -- receiveAndReply Method
[source, scala]¶
receiveAndReply(context: RpcCallContext): PartialFunction[Any, Unit]¶
NOTE: receiveAndReply is part of the rpc:RpcEndpoint.md#receiveAndReply[RpcEndpoint] abstraction.
receiveAndReply handles (processes) <
==== [[StopExecutor]] StopExecutor RPC Message
[source, scala]¶
StopExecutor()¶
When <LocalEndpoint requests the single <RpcCallContext to reply with true (as the response).
NOTE: StopExecutor RPC message is sent out exclusively when LocalSchedulerBackend is requested to <