Apache Zeppelin 的 Shell 解释器

概述

Zeppelin Shell 有两个解释器,默认的是 %sh 解释器。

Shell 解释器

Shell 解释器使用 Apache Commons Exec 来执行外部进程。 在 Zeppelin 笔记本中,你可以在段落的开头使用 %sh 来调用系统 shell 并运行命令。

终端解释器

终端解释器使用htermPty4J模拟终端操作。

注意: 目前每个命令都以运行Zeppelin服务器的用户身份运行。

配置

在Zeppelin下拉菜单的“Interpreters”菜单中,您可以设置Shell解释器的属性值。

名称 默认值 描述
shell.command.timeout.millisecs 60000 Shell命令超时时间(毫秒)
shell.working.directory.user.home false 如果设置为true,shell的工作目录将设置为用户主目录
zeppelin.shell.auth.type 支持的认证方法类型有 SIMPLE 和 KERBEROS
zeppelin.shell.principal 从keytab加载的主体名称
zeppelin.shell.keytab.location keytab文件的路径
zeppelin.shell.interpolation false 启用 ZeppelinContext 变量插入到段落文本中
zeppelin.terminal.ip.mapping Zeppelin服务器的内部和外部IP映射
zeppelin.concurrency.max 10 Shell解释器的最大并发数

示例

Shell 解释器

以下示例演示了在Zeppelin笔记本中Shell的基本用法。

如果您需要关于使用Shell解释器的Zeppelin解释器设置的更多信息,请先阅读什么是解释器设置?部分。

Kerberos 刷新间隔

要更改Kerberos票证续订的默认行为,可以在conf/zeppelin-env.sh中进行以下更改。

# Change Kerberos refresh interval (default value is 1d). Allowed postfix are ms, s, m, min, h, and d.
export KERBEROS_REFRESH_INTERVAL=4h
# Change kinit number retries (default value is 5), which means if the kinit command fails for 5 retries consecutively it will close the interpreter. 
export KINIT_FAIL_THRESHOLD=10

对象插值

shell解释器还支持将ZeppelinContext对象插入到段落文本中。 以下示例展示了这一功能的使用:

在Scala单元格中:

z.put("dataFileName", "members-list-003.parquet")
    // ...
val members = spark.read.parquet(z.get("dataFileName"))
    // ...

在后面的Shell单元格中:

%sh
rm -rf {dataFileName}

默认情况下,对象插值是禁用的,可以通过将属性zeppelin.shell.interpolation的值设置为true来启用(参见上面的配置)。 有关此功能的更多详细信息可以在Zeppelin-Context中找到。

终端解释器

以下示例演示了在Zeppelin笔记本中终端的基本用法。

%sh.terminal
input any char

zeppelin.terminal.ip.mapping

在笔记本中运行终端解释器时,笔记本的前端需要获取终端解释器所在服务器的IP地址以进行通信。

在公共云环境中,云主机有一个内部IP和一个外部访问IP,解释器在云主机中运行。这将导致笔记本前端无法正确连接到终端解释器,从而导致终端解释器无法使用。

解决方案:在终端解释器中设置内部IP和外部IP之间的映射,并通过终端解释器的外部IP连接笔记本的前端。

示例: {"internal-ip1":"external-ip1", "internal-ip2":"external-ip2"}