原文链接 : http://zeppelin.apache.org/docs/0.7.2/development/writingzeppelinapplication.html
译文链接 : http://cwiki.apachecn.org/pages/viewpage.action?pageId=10031114
什么是 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 artifact 的位置。 “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>"