编写新应用程序
什么是Apache Zeppelin应用程序
Apache Zeppelin 应用程序是一个运行在解释器进程上的包,并在笔记本中显示其输出。虽然应用程序运行在解释器进程上,但它能够通过 ResourcePool 访问解释器提供的资源。输出始终由 AngularDisplaySystem 渲染。因此,应用程序提供了创建交互式图形应用程序的所有可能性,这些应用程序使用任何解释器的数据和处理能力。
创建你自己的应用程序
编写应用程序意味着扩展org.apache.zeppelin.helium.Application。您可以使用您喜欢的IDE和语言,同时将Java类文件打包成jar。Application类看起来像
/**
* 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目录下的示例应用程序。
开发模式
在开发模式下,您可以在IDE中像普通的Java应用程序一样运行您的应用程序,并在Zeppelin笔记本中查看结果。
org.apache.zeppelin.helium.ZeppelinApplicationDevServer 可以在开发模式下运行 Zeppelin 应用程序。
// 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 笔记本中,运行 %dev run 将连接到在开发模式下运行的应用程序。
包文件
包文件是一个提供应用程序信息的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>"
}
名称
名称是一个字符串,格式为[group].[name]。
[group]和[name]只允许使用[A-Za-z0-9_]。
组通常是创建此应用程序的组织的名称。
描述
关于应用程序的简短描述
工件
jar 文件的位置。
"groupId:artifactId:version" 将从 maven 仓库加载文件。
如果 jar 存在于本地文件系统中,可以使用绝对/相对路径。
例如。
当工件存在于Maven仓库中时
artifact: "org.apache.zeppelin:zeppelin-examples:0.6.0"
当工件存在于本地文件系统中时
artifact: "zeppelin-example/target/zeppelin-example-0.6.0.jar"
className
入口点。扩展org.apache.zeppelin.helium.Application的类
资源
二维数组,通过名称或className定义所需的资源。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
...
]
图标
用于应用程序按钮的图标。此字段中的字符串将作为HTML标签呈现。
例如。
icon: "<i class='fa fa-clock-o'></i>"