ZeppelinServer

SparkInterpreter

RemoteInterpreterServer

RemoteInterpreterEventClient
(ResourcePoolConnector)

ResourceRegistry

ResourcePoolRestAPI

central catalog for all resources

ZeppelinResourcePoolDataSource

RemoteInterpreterProces (Spark)

RemoteInterpreterServer.Client

RemoteInterpreterEventPoller

Spark Cluster

Postgres

JDBCInterpreter

RemoteInterpreterServer

RemoteInterpreterEventClient
(ResourcePoolConnector)

JDBCTableData

RemoteInterpreterProces (JDBC)

RemoteInterpreterServer.Client

RemoteInterpreterEventPoller

2. propagate resource states

3. notify to the catalog if resource is changed
(add, remove, updated, ...)

list all available resources / 
download tables

5. SparkInterpreter can use the zeppelin resource pool  as a data source

DistributedResourcePool

1. user executed JDBC paragraph and wants to share via a resource pool.  

then, JDBC interpreter creates `JDBCTableData` to point the table result which want to be shared

Each `ResourcePool` instance in an interpreter consists the distributed resource pool

7. Spark interpreter fetches
the remote table's rows, columns
by using remote `invokeMethod` call

8

9

10. get the actual resource by querying the table in the storage

ResourcePool

ResourcePool

Web UI

6. The table (resource) that spark cluster wants to use might be persisted in a different interpreters' resource pool