Lee moon soo created ZEPPELIN-533:
-------------------------------------

             Summary: Helium
                 Key: ZEPPELIN-533
                 URL: https://issues.apache.org/jira/browse/ZEPPELIN-533
             Project: Zeppelin
          Issue Type: New Feature
            Reporter: Lee moon soo


Helium proposal 
https://cwiki.apache.org/confluence/display/ZEPPELIN/Helium+proposal was about 
pluggable application on top of Zeppelin. I'd like to extend the concept and 
make Helium covers interpreters, notebook storages, too.
i.e. Interpreter and notebook storage are able to loaded from maven repository 
on the fly.


*Interpreter*

Interpreter is already pluggable. User can just drop necessary binary under 
interpreter/\[interpretername], add configuration into conf/zeppelin-site.xml 
and restart Zeppelin will make interpreter work.
But it'll be much easier if Zeppelin can load interpreter binary from maven 
repository and load them without restart.


*Notebook storage*

Notebook storage is also already pluggable. User can drop necessary binary into 
ZeppelinServer's classpath (/lib), add configuraion into conf/zeppelin-site.xml 
and restart Zeppelin will make notebook storage work.
Current implementation may bring library conflict while all notebook storage is 
loaded from the same classloader. There should be dedicated classloader per 
implementation like Interpreter. And then it can be loaded from maven 
repository on the fly, just like an Interpreter.


*Application*

https://cwiki.apache.org/confluence/display/ZEPPELIN/Helium+proposal tried to 
define it. Application can be loaded and launched just like Interpreter and 
Notebook storage, but not in ZeppelinServer process but in interpreter process 
because of some application may want to use Interpreter provided resource (e.g. 
SparkContext). The resource will be acceseed through Resource pool. Once 
application is being loaded, application will able to use outputstream provided 
by Zeppelin as well as InterpreterContext (provides api for angularobject, etc).
In short, not only the code provided by user but also the packaged code will be 
run on the notebook.

*Package registry*

Package registry central repository for package metadata. Package metadata is 
informations such as name, type, description, maven repository, version, etc. 
One simplest way of making this package repository is create an separate git 
repository and use it as a package repository. We will need automated 
registration / update process of metadata from 3rd party developers.

* 'Helium' menu*
'Helium' menu on GUI will get metadata from package registry and list them to 
user select. It'll need to save user's selection into conf/helium.json

Following sub tasks can be created

- \[Interpreter] Make interpreter loadable from maven repository and REST api 
for it
- \[Notebook storage] Make each notebook storage uses separate classloader
- \[Notebook storage] Make notebook storage loadable from maven repository and 
REST api for it
- \[Application] Provide output stream to application
- \[Application] Shared resource pool that user application can exchange data 
between interpreter processes
- \[Application] Make each user application loaded from separate classloader
- \[Application] Add 'paragraph' scope for angular object in addition to 
'notebook', 'global'
- \[Application] Application launch API
- \[GUI] Create Helium menu and provide user interface for REST api
- \[GUI] Display package from package registry
- \[GUI] Save / Load user selection into conf/helium.conf
- \[Registry] Helium package registry



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to