Apache Zeppelin 的 Shell 解释器
概述
Zeppelin Shell 有两个解释器,默认的是 %sh 解释器。
Shell 解释器
Shell 解释器使用 Apache Commons Exec 来执行外部进程。
在 Zeppelin 笔记本中,你可以在段落的开头使用 %sh 来调用系统 shell 并运行命令。
终端解释器
注意: 目前每个命令都以运行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"}