# 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) )