# Writing a new Application (Experimental) ( 寫一個新的應用程序( 實驗 ) )
原文鏈接 : [http://zeppelin.apache.org/docs/0.7.2/development/writingzeppelinapplication.html](http://zeppelin.apache.org/docs/0.7.2/development/writingzeppelinapplication.html)
譯文鏈接 : [http://www.apache.wiki/pages/viewpage.action?pageId=10031114](http://www.apache.wiki/pages/viewpage.action?pageId=10031114)
貢獻者 : [小瑤](/display/~chenyao) [ApacheCN](/display/~apachecn) [Apache中文網](/display/~apachechina)
## 什么是 Apache Zeppelin Application ?
**Apache Zeppelin Application** 是一個運行于解釋器進程的軟件包,并將其顯示在筆記本計算機的內部。當應用程序運行在解釋器進程時,它能夠通過 **ResourcePool** 訪問解釋器提供的資源。輸出始終由 **AngularDisplaySystem** 呈現。因此,應用程序提供使用任何解釋器的數據和處理能力的交互式圖形應用程序的所有可能性。
## Make your own Application ( 創建你自己的 Application )
寫入應用程序意味著擴展 **org.apache.zeppelin.helium.Application** 。當 **Java** 類文件打包到 **jar** 中時,您可以使用自己喜歡的 **IDE** 和語言。應用程序類看起來像
```
/**
* Constructor. Invoked when application is loaded
*/
public Application(ApplicationContext context);
/**
* Invoked when there're (possible) updates in required resource set.
* i.e. invoked after application load and after paragraph finishes.
*/
public abstract void run(ResourceSet args);
/**
* Invoked before application unload.
* Application is automatically unloaded with paragraph/notebook removal
*/
public abstract void unload();
```
您可以檢查 **./zeppelin-examples** 目錄下的示例應用程序。
## Development mode ( 開發模式 )
在開發模式下,您可以將 **Application** 作為普通的 **Java** 應用程序在 **IDE** 中運行,并查看 **Zeppelin notebook** 中的結果。
**org.apache.zeppelin.helium.ZeppelinApplicationDevServer** 可以在開發模式下運行 **Zeppelin Application** 。
```
// entry point for development mode
public static void main(String[] args) throws Exception {
// add resources for development mode
LocalResourcePool pool = new LocalResourcePool("dev");
pool.put("date", new Date());
// run application in devlopment mode with given resource
// in this case, Clock.class.getName() will be the application class name
org.apache.zeppelin.helium.ZeppelinApplicationDevServer devServer = new org.apache.zeppelin.helium.ZeppelinApplicationDevServer(
Clock.class.getName(), pool.getAll());
// start development mode
devServer.start();
devServer.join();
}
```
在 **Zeppelin notebook** 中,運行 **%dev run** 將連接到在開發模式下運行的應用程序。
## Package file ( 包文件 )
軟件包文件是一個 **json** 文件,提供有關應用程序的信息。 **Json** 文件包含以下信息
```
{
name : "[organization].[name]",
description : "Description",
artifact : "groupId:artifactId:version",
className : "your.package.name.YourApplicationClass",
resources : [
["resource.name", ":resource.class.name"],
["alternative.resource.name", ":alternative.class.name"]
],
icon : "<i class="icon"></i>"
}
```
### name ( 名稱 )
**Name** 是 **[group] ?[name]** 格式的字符串。 **[group]** 和 **[name]** 只允許 **[A-Za-z0-9_]** 。組通常是創建此應用程序的組織的名稱。
### description ( 描述 )
有關應用程序的簡短描述。
### artifact
**jar artifac**t 的位置。 **“groupId:artifactId:version”** 將從 **maven** 倉庫加載工件。如果本地文件系統中存在 **jar** ,則可以使用 **absolute / relative** 。
例如
當 **artifact** 存在于 **Maven** 存儲庫中時
```
artifact: "org.apache.zeppelin:zeppelin-examples:0.6.0"
```
當 **artifact** 存在于本地文件系統中時
```
artifact: "zeppelin-example/target/zeppelin-example-0.6.0.jar"
```
### className ( 類名 )
入口點。擴展 **org.apache.zeppelin.helium.Application** 的類。
### resources ( 資源 )
二維數組,按名稱或類名定義所需的資源。 **Helium** 應用程序啟動器將比較 **ResourcePool** 中的資源與該字段中的信息,并在 **ResourcePool** 中提供所有必需資源時才建議應用程序。
資源名稱是一個字符串,它將與 **ResourcePool** 中的對象名稱進行比較。 **className** 是一個前綴為“:”的字符串,它將與 **ResourcePool** 中對象的 **className** 進行比較。
應用程序可能需要兩個或更多資源。所需的資源可以在json數組中列出。例如,如果應用程序需要對象 “**name1**” , “**name2**” 和 “**className1**” 類型的對象運行,則資源字段可以是
```
resources: [
[ "name1", "name2", ":className1", ...]
]
```
如果應用程序可以處理所需資源的替代組合,則可以列出替代集合。
```
resources: [
[ "name", ":className"],
[ "altName", ":altClassName1"],
...
]
```
更容易理解這個方案
```
resources: [
[ 'resource' AND 'resource' AND ... ] OR
[ 'resource' AND 'resource' AND ... ] OR
...
]
```
### icon ( 圖標 )
在應用程序按鈕上使用的圖標。此字段中的字符串將被呈現為 **HTML** 標記。
例如
```
icon: "<i class='fa fa-clock-o'></i>"
```
- 快速入門
- 什么是Apache Zeppelin?
- 安裝
- 配置
- 探索Apache Zeppelin UI
- 教程
- 動態表單
- 發表你的段落
- 自定義Zeppelin主頁
- 升級Zeppelin版本
- 從源碼編譯
- 使用Flink和Spark Clusters安裝Zeppelin教程
- 解釋器
- 概述
- 解釋器安裝
- 解釋器依賴管理
- 解釋器的模擬用戶
- 解釋員執行Hook(實驗)
- Alluxio 解釋器
- Beam 解釋器
- BigQuery 解釋器
- Cassandra CQL 解釋器
- Elasticsearch 解釋器
- Flink 解釋器
- Geode/Gemfire OQL 解釋器
- HBase Shell 解釋器
- HDFS文件系統 解釋器
- Hive 解釋器
- Ignite 解釋器
- JDBC通用 解釋器
- Kylin 解釋器
- Lens 解釋器
- Livy 解釋器
- Markdown 解釋器
- Pig 解釋器
- PostgreSQL, HAWQ 解釋器
- Python 2&3解釋器
- R 解釋器
- Scalding 解釋器
- Scio 解釋器
- Shell 解釋器
- Spark 解釋器
- 系統顯示
- 系統基本顯示
- 后端Angular API
- 前端Angular API
- 更多
- 筆記本存儲
- REST API
- 解釋器 API
- 筆記本 API
- 筆記本資源 API
- 配置 API
- 憑據 API
- Helium API
- Security ( 安全 )
- Shiro 授權
- 筆記本 授權
- 數據源 授權
- Helium 授權
- Advanced ( 高級 )
- Zeppelin on Vagrant VM ( Zeppelin 在 Vagrant 虛擬機上 )
- Zeppelin on Spark Cluster Mode( Spark 集群模式下的 Zeppelin )
- Zeppelin on CDH ( Zeppelin 在 CDH 上 )
- Contibute ( 貢獻 )
- Writing a New Interpreter ( 寫一個新的解釋器 )
- Writing a new Visualization (Experimental) ( 編寫新的可視化(實驗) )
- Writing a new Application (Experimental) ( 寫一個新的應用程序( 實驗 ) )
- Contributing to Apache Zeppelin ( Code ) ( 向 Apache Zeppelin 貢獻( 代碼 ) )
- Contributing to Apache Zeppelin ( Website ) ( 向 Apache Zeppelin 貢獻(website) )