65.md 10.1 KB
Newer Older
W
mkdocs  
wizardforcel 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214
# Contibute ( 贡献 )

原文链接 : [http://zeppelin.apache.org/docs/0.7.2/development/writingzeppelininterpreter.html](http://zeppelin.apache.org/docs/0.7.2/development/writingzeppelininterpreter.html)

译文链接 : [http://www.apache.wiki/pages/viewpage.action?pageId=10030728](http://www.apache.wiki/pages/viewpage.action?pageId=10030728)

贡献者 : [小瑶](/display/~chenyao) [ApacheCN](/display/~apachecn) [Apache中文网](/display/~apachechina)

## 什么是 Apache Zeppelin Interpreter

**Apache Zeppelin Interpreter** 是一种语言后端。例如,在 **Zeppelin** 中使用 **scala** 代码,您需要一个 **scala** 解释器。每个解释器都属于一个解释器组。相同的解释器中的解释器可以互相引用。例如,**SparkSqlInterpreter** 可以引用 **SparkInterpreter** ,以便在它们在同一个组中时从其获取**SparkContext**

![](img/a3333ba03afd1a4eb362340a3beb10da.jpg)

[**InterpreterSetting**](https://github.com/apache/zeppelin/blob/master/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java) 是给定的** [InterpreterGroup](https://github.com/apache/zeppelin/blob/master/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/InterpreterGroup.java)** 和一个启动/停止解释器的单元的配置。同一个 **InterpreterSetting** 中的所有解释器都在单独的 **JVM** 进程中启动。解释器通过 [**Thrift**](https://github.com/apache/zeppelin/blob/master/zeppelin-interpreter/src/main/thrift/RemoteInterpreterService.thrift)**Zeppelin engine** 通信。

在创建新的解释器时,您可以在 “解释器设置” 菜单中看到“每个音符”模式的“单独的解释器(范围/隔离)”,每个音符将创建新的解释器实例。但是它们在同一个 **InterpreterSettings** 中仍然运行在同一个 **JVM** 上。

## 制作你自己的 Interpreter

创建一个新的 **interpreter** 是非常简单的。只需扩展 [**org.apache.zeppelin.interpreter**](https://github.com/apache/zeppelin/blob/master/zeppelin-interpreter/src/main/java/org/apache/zeppelin/interpreter/Interpreter.java) 抽象类并实现一些方法。您可以在构建系统中包含 **org.apache.zeppelin:zeppelin-interpreter:[VERSION] artifact**。您应该将您的 jar 放在您的解释器目录下,并具有特定的目录名称。 **Zeppelin** 服务器递归地读取解释器目录,并初始化包括您自己的解释器在内的 **interpreter**

有三个位置可以存储您的 **interpreter group****name** 和 其他信息。 **Zeppelin** 服务器尝试找到以下位置。接下来, **Zeppelin** 尝试在您的解释器 **jar** 中找到 **interpreter-setting.json**

```
{ZEPPELIN_INTERPRETER_DIR}/{YOUR_OWN_INTERPRETER_DIR}/interpreter-setting.json
```

以下是您自己的 **interpreter** 上的 **interpreter-setting.json** 的例子。

```
[
  {
    "group": "your-group",
    "name": "your-name",
    "className": "your.own.interpreter.class",
    "properties": {
      "properties1": {
        "envName": null,
        "propertyName": "property.1.name",
        "defaultValue": "propertyDefaultValue",
        "description": "Property description"
      },
      "properties2": {
        "envName": PROPERTIES_2,
        "propertyName": null,
        "defaultValue": "property2DefaultValue",
        "description": "Property 2 description"
      }, ...
    },
    "editor": {
      "language": "your-syntax-highlight-language",
      "editOnDblClick": false
    }
  },
  {
    ...
  }
]
```

最后, **Zeppelin** 使用以下静态初始化:

```
static {
  Interpreter.register("MyInterpreterName", MyClassName.class.getName());
}
```

**静态初始化已被弃用,直到 0.6.0 才会被支持。**

在解释器配置过程中,名称将会稍后出现在解释器名称选项框中。解释器的名字是您以后写的,以确定应使用此解释器解释的段落。

```
%MyInterpreterName
some interpreter specific code...
```

## Editor setting for Interpreter ( 解释器的编辑器设置 )

您可以将编辑器对象添加到 **interpreter-setting.json** 文件中以指定段落编辑器设置。

### Language ( 语言 )

如果解释器使用特定的编程语言(如 Scala , Python , SQL ),则通常建议将语法突出显示添加到注释段落编辑器中。

要查看支持的语言列表,请参阅 **zeppelin-web / bower_components / ace-builds / src-noconflict** 或 [**github.com/ajaxorg/ace-builds**](https://github.com/ajaxorg/ace-builds/tree/master/src-noconflict) 下的 **model - *.js** 文件。

如果要添加一组新的语法高亮:

1.**model-*.js** 文件添加到 **zeppelin-web / bower.json** (当内置时, **zeppelin-web / src / index.html** 将自动更改)。

将语言字段添加到编辑对象。请注意,如果您不指定语言字段,则您的解释器将使用纯文本模式进行语法突出显示。假设您要将语言设置为 **java** ,然后添加:

```
"editor": {
  "language": "java"
}
```

### Edit on double click ( 双击编辑 )

如果您的解释器使用标记语言(如 **markdown****HTML** ),请将 **editOnDblClick** 设置为 **true** ,以便文本编辑器在对话框上双击并在段落运行中关闭。否则将其设置为 **false**

```
"editor": {
  "editOnDblClick": false
}
```

## Install your interpreter binary ( 安装你的解释器二进制文件 )

一旦您构建了您的解释器,您可以将其放在解释器目录下,并具有所有的依赖关系。

```
[ZEPPELIN_HOME]/interpreter/[INTERPRETER_NAME]/
```

## Configure your interpreter ( 配置您的解释器 )

要配置您的解释器,您需要遵循以下步骤:

1.  将解释器类名添加到 **conf / zeppelin-site.xml** 中的 **zeppelin.interpreters** 属性。属性值以逗号分隔 **[INTERPRETER_CLASS_NAME]** 。例如,

    ```
    <property>
    <name>zeppelin.interpreters</name>
    <value>org.apache.zeppelin.spark.SparkInterpreter,org.apache.zeppelin.spark.PySparkInterpreter,org.apache.zeppelin.spark.SparkSqlInterpreter,org.apache.zeppelin.spark.DepInterpreter,org.apache.zeppelin.markdown.Markdown,org.apache.zeppelin.shell.ShellInterpreter,org.apache.zeppelin.hive.HiveInterpreter,com.me.MyNewInterpreter</value>
    </property>
    ```

2.  将您的解释器添加到当没有 **zeppelin-site.xml** 时使用的默认配置。
3.  通过运行 **./bin/zeppelin-daemon.sh** 启动 **Zeppelin**

在解释器页面中,单击+创建按钮并配置您的解释器属性。现在你已经完成并准备好使用你的解释器。

注意

使用 **zeppelin** 发布的解释器有一个默认配置,当没有 **conf / zeppelin-site.xml** 时使用。

## Use your interpreter ( 使用你的解释器 )

### 0.5.0

**[NOTE]** 的指令中,**%[INTERPRETER_NAME]** 指令会调用您的解释器。请注意,**zeppelin.interpreters** 中的第一个解释器配置将是默认配置。

例如:

```
%myintp

val a = "My interpreter"
println(a)
```

### 0.6.0 and later

在一个注释的内部,**%INTERPRETER_GROUP].[INTERPRETER_NAME]** 指令将会调用您的解释器。

您可以省略 **[INTERPRETER_GROUP]****[INTERPRETER_NAME]** 。如果您忽略 **[INTERPRETER_NAME]** ,则会在 **[INTERPRETER_GROUP]** 中选择第一个可用的解释器。同样,如果您跳过 **[INTERPRETER_GROUP]** ,则会从默认解释器组中选择 **[INTERPRETER_NAME]**

例如,如果 **mygrp group** 中有两个解释器 **myintp1****myintp2** ,可以像 **myintp1** 一样调用:

```
%mygrp.myintp1

codes for myintp1
```

你可以像 **myintp2** 一样调用

```
%mygrp.myintp2

codes for myintp2
```

如果省略您的解释器名称,它将在 **group ( myintp1 )** 中选择第一个可用的解释器。

```
%mygrp

codes for myintp1
```

当您的 **interpreter group** 被选为 默认组 时,您只能省略您的 **interpreter group** 。

```
%myintp2

codes for myintp2
```

## Examples ( 示例 )

查看一些与 **Zeppelin** 发布的 **interpreters**

*   [spark](https://github.com/apache/zeppelin/tree/master/spark)
*   [markdown](https://github.com/apache/zeppelin/tree/master/markdown)
*   [shell](https://github.com/apache/zeppelin/tree/master/shell)
*   [jdbc](https://github.com/apache/zeppelin/tree/master/jdbc)

## Contributing a new Interpreter to Zeppelin releases ( 为 Zeppelin 发行新的解释器 )

我们欢迎对新的解释器的贡献。请按照以下几个步骤进行:

*   首先,在 [这里](https://zeppelin.apache.org/contribution/contributions.html) 查看一般性贡献指南。
*   按照上述 [“解释器自己的解释器部分”](/pages/viewpage.action?pageId=10030728)[“编辑器设置”](/pages/viewpage.action?pageId=10030728) 中的步骤进行。
*   添加您的解释器,如上面的 [配置您的解释器部分](/pages/viewpage.action?pageId=10030728) ;还将其添加到示例模板 **[zeppelin-site.xml.template](https://github.com/apache/zeppelin/blob/master/conf/zeppelin-site.xml.template)** 中。
*   添加测试!他们由 [Travis](https://travis-ci.org/apache/zeppelin) 经营所有变化,重要的是他们是独立的。
*   将您的解释器作为 **pom.xml** 中的模块。
*   添加有关如何在 **docs / interpreter /** 下使用解释器的文档。以 **Markdown** 风格[为例](https://github.com/apache/zeppelin/blob/master/docs/interpreter/elasticsearch.md)。确保您列出配置设置,并提供在 **Markdown** 的代码框中使用解释器的工作示例。根据需要链接到图片(图片应转到 **docs / assets / themes / zeppelin / img / docs-img /** )。并在导航菜单(**docs / _includes / themes / zeppelin / _navigation.html**)中添加您的文档的链接。
*   最重要的是,确保所有依赖关系的传递关闭的许可证在 [许可证文件](https://github.com/apache/zeppelin/blob/master/zeppelin-distribution/src/bin_license/LICENSE) 中列出。
*   提交您的更改,并在 [**GitHub** 上的项目 **Mirror**](https://github.com/apache/zeppelin) 上打开一个[ **Pull** 请求](https://github.com/apache/zeppelin/pulls);检查以确保 **Travis CI** 构建正在通过。