Figure 1. ExecutorBackend receives notifications from TaskRunners
It is effectively a bridge between the driver and an executor, i.e. there are two endpoints running.
There are three concrete executor backends:
statusUpdate( taskId: Long, state: TaskState, data: ByteBuffer): Unit
TaskRunner is requested to run a task (to send task status updates).