编写新应用程序

什么是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>"