Apache Zeppelin 配置

Zeppelin 属性

Zeppelin可以通过多种来源进行配置。

按优先级降序排列的源: - 环境变量可以在conf/zeppelin-env.sh中定义(Windows系统为conf\zeppelin-env.cmd)。 - 系统属性 - 配置文件可以在conf/zeppelin-site.xml中定义

将鼠标悬停在每个属性上并点击 ,然后你可以获取该属性的链接。

zeppelin-env.sh zeppelin-site.xml 默认值 描述
ZEPPELIN_ADDR
zeppelin.server.addr
127.0.0.1 Zeppelin 服务器绑定地址
ZEPPELIN_PORT
zeppelin.server.port
8080 Zeppelin 服务器端口 注意:请确保您没有使用与 Zeppelin web application development port (默认: 9000) 相同的端口。
ZEPPELIN_SSL_PORT
zeppelin.server.ssl.port
8443 Zeppelin 服务器 ssl 端口(当 ssl 环境/属性设置为 true 时使用)
ZEPPELIN_JMX_ENABLE
zeppelin.jmx.enable
false 通过定义“true”启用JMX
ZEPPELIN_JMX_PORT
zeppelin.jmx.port
9996 JMX使用的端口号
ZEPPELIN_MEM
N/A -Xmx1024m -XX:MaxMetaspaceSize=512m JVM 内存选项
ZEPPELIN_INTP_MEM
N/A ZEPPELIN_MEM 解释器进程的JVM内存选项
ZEPPELIN_JAVA_OPTS
N/A JVM 选项
ZEPPELIN_ALLOWED_ORIGINS
zeppelin.server.allowed.origins
* 启用一种方式,用于指定REST和websockets允许的来源列表,以逗号分隔。
例如:http://localhost:8080
ZEPPELIN_CREDENTIALS_PERSIST
zeppelin.credentials.persist
true 将凭据持久化到JSON文件(credentials.json)
ZEPPELIN_CREDENTIALS_ENCRYPT_KEY
zeppelin.credentials.encryptKey
如果提供,将加密credentials.json文件中的密码(否则密码将以明文存储)
ZEPPELIN_SERVER_CONTEXT_PATH
zeppelin.server.context.path
/ Web应用程序的上下文路径
ZEPPELIN_NOTEBOOK_COLLABORATIVE_MODE_ENABLE
zeppelin.notebook.collaborative.mode.enable
true 启用基本的协作编辑功能。如果笔记由一个人使用,不会改变操作的逻辑。
ZEPPELIN_SSL
zeppelin.ssl
false
ZEPPELIN_SSL_CLIENT_AUTH
zeppelin.ssl.client.auth
false
ZEPPELIN_SSL_KEYSTORE_PATH
zeppelin.ssl.keystore.path
密钥库
ZEPPELIN_SSL_KEYSTORE_TYPE
zeppelin.ssl.keystore.type
JKS
ZEPPELIN_SSL_KEYSTORE_PASSWORD
zeppelin.ssl.keystore.password
ZEPPELIN_SSL_KEY_MANAGER_PASSWORD
zeppelin.ssl.key.manager.password
ZEPPELIN_SSL_TRUSTSTORE_PATH
zeppelin.ssl.truststore.path
ZEPPELIN_SSL_TRUSTSTORE_TYPE
zeppelin.ssl.truststore.type
ZEPPELIN_SSL_TRUSTSTORE_PASSWORD
zeppelin.ssl.truststore.password
ZEPPELIN_SSL_PEM_KEY
zeppelin.ssl.pem.key
该指令指向服务器的PEM编码的私钥文件。
ZEPPELIN_SSL_PEM_KEY_PASSWORD
zeppelin.ssl.pem.key.password
PEM编码的私钥的密码。
ZEPPELIN_SSL_PEM_CERT
zeppelin.ssl.pem.cert
该指令指向一个包含PEM格式证书数据的文件。
ZEPPELIN_SSL_PEM_CA
zeppelin.ssl.pem.ca
此指令设置了一个包含您所处理的认证机构(CA)证书的一体化文件。这些证书用于客户端认证。此类文件只是各种PEM编码的证书文件的简单串联。
ZEPPELIN_NOTEBOOK_HOMESCREEN
zeppelin.notebook.homescreen
在Apache Zeppelin主屏幕上显示笔记ID
例如 2A94M5J1Z
ZEPPELIN_NOTEBOOK_HOMESCREEN_HIDE
zeppelin.notebook.homescreen.hide
false 在Apache Zeppelin主屏幕上隐藏由ZEPPELIN_NOTEBOOK_HOMESCREEN设置的笔记ID。
更多信息,请阅读自定义您的Zeppelin主页
ZEPPELIN_WAR_TEMPDIR
zeppelin.war.tempdir
webapps jetty临时目录的位置
ZEPPELIN_NOTEBOOK_DIR
zeppelin.notebook.dir
notebook 保存笔记本目录的根目录
ZEPPELIN_NOTEBOOK_S3_BUCKET
zeppelin.notebook.s3.bucket
zeppelin 保存笔记本文件的S3存储桶
ZEPPELIN_NOTEBOOK_S3_USER
zeppelin.notebook.s3.user
user S3 存储桶的用户名
例如 bucket/user/notebook/2A94M5J1Z/note.json
ZEPPELIN_NOTEBOOK_S3_ENDPOINT
zeppelin.notebook.s3.endpoint
s3.amazonaws.com 存储桶的端点
N/A
zeppelin.notebook.s3.timeout
120000 存储桶端点请求超时时间(毫秒)
ZEPPELIN_NOTEBOOK_S3_KMS_KEY_ID
zeppelin.notebook.s3.kmsKeyID
用于在S3中加密数据的AWS KMS密钥ID(可选)
ZEPPELIN_NOTEBOOK_S3_EMP
zeppelin.notebook.s3.encryptionMaterialsProvider
用于加密S3中数据的自定义S3加密材料提供程序实现的类名(可选)
ZEPPELIN_NOTEBOOK_S3_SSE
zeppelin.notebook.s3.sse
false 将笔记本保存到S3并启用服务器端加密
ZEPPELIN_NOTEBOOK_S3_CANNED_ACL
zeppelin.notebook.s3.cannedAcl
将笔记本保存到S3时使用给定的[Canned ACL](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/CannedAccessControlList.html),该ACL决定了S3的权限。
ZEPPELIN_NOTEBOOK_S3_PATH_STYLE_ACCESS
zeppelin.notebook.s3.pathStyleAccess
false 使用路径样式访问S3存储桶
ZEPPELIN_NOTEBOOK_S3_SIGNEROVERRIDE
zeppelin.notebook.s3.signerOverride
可选覆盖,用于控制应使用哪种签名算法来签署AWS请求
ZEPPELIN_NOTEBOOK_AZURE_CONNECTION_STRING
zeppelin.notebook.azure.connectionString
Azure存储账户连接字符串
例如:
DefaultEndpointsProtocol=https;
AccountName=;
AccountKey=
ZEPPELIN_NOTEBOOK_AZURE_SHARE
zeppelin.notebook.azure.share
zeppelin Azure Share 用于保存笔记本文件的位置
ZEPPELIN_NOTEBOOK_AZURE_USER
zeppelin.notebook.azure.user
user Azure文件共享的可选用户名
例如 share/user/notebook/2A94M5J1Z/note.json
ZEPPELIN_NOTEBOOK_STORAGE
zeppelin.notebook.storage
org.apache.zeppelin.notebook.repo.GitNotebookRepo 逗号分隔的笔记本存储位置列表
ZEPPELIN_NOTEBOOK_ONE_WAY_SYNC
zeppelin.notebook.one.way.sync
false 如果有多个笔记本存储位置,我们是否应该将第一个视为唯一的真实来源?
ZEPPELIN_NOTEBOOK_PUBLIC
zeppelin.notebook.public
true 默认情况下,创建/导入时使笔记本公开(仅设置owners)。如果设置为false,则会将user添加到readerswriters中,使其变为私有,并且对其他用户不可见,除非授予权限。
ZEPPELIN_INTERPRETER_DIR
zeppelin.interpreter.dir
interpreter 解释器目录
ZEPPELIN_INTERPRETER_DEP_MVNREPO
zeppelin.interpreter.dep.mvnRepo
https://repo1.maven.org/maven2/,https://repo2.maven.org/maven2/ 用于解释器额外依赖加载的远程主要仓库
ZEPPELIN_INTERPRETER_OUTPUT_LIMIT
zeppelin.interpreter.output.limit
102400 来自解释器的输出消息超过限制将被截断
ZEPPELIN_INTERPRETER_CONNECT_TIMEOUT
zeppelin.interpreter.connect.timeout
600s 解释器进程连接超时。默认时间单位为毫秒
ZEPPELIN_DEP_LOCALREPO
zeppelin.dep.localrepo
local-repo 依赖加载器的本地仓库。
例如:npm的可视化模块。
ZEPPELIN_HELIUM_NODE_INSTALLER_URL
zeppelin.helium.node.installer.url
https://nodejs.org/dist/ 用于Helium依赖加载器的远程Node安装程序URL
ZEPPELIN_HELIUM_NPM_INSTALLER_URL
zeppelin.helium.npm.installer.url
http://registry.npmjs.org/ Helium依赖加载器的远程Npm安装程序URL
ZEPPELIN_HELIUM_YARNPKG_INSTALLER_URL
zeppelin.helium.yarnpkg.installer.url
https://github.com/yarnpkg/yarn/releases/download/ Helium依赖加载器的远程Yarn包安装程序URL
ZEPPELIN_WEBSOCKET_MAX_TEXT_MESSAGE_SIZE
zeppelin.websocket.max.text.message.size
1024000 websocket可以接收的最大文本消息的大小(以字符为单位)。
ZEPPELIN_SERVER_DEFAULT_DIR_ALLOWED
zeppelin.server.default.dir.allowed
false 启用服务器上的目录列表。
ZEPPELIN_NOTEBOOK_GIT_REMOTE_URL
zeppelin.notebook.git.remote.url
GitHub 仓库的 URL。它可以是 HTTP URL 或 SSH URL。例如 git@github.com:apache/zeppelin.git
ZEPPELIN_NOTEBOOK_GIT_REMOTE_USERNAME
zeppelin.notebook.git.remote.username
token GitHub 用户名。默认情况下为 `token` 以使用 GitHub 的 API
ZEPPELIN_NOTEBOOK_GIT_REMOTE_ACCESS_TOKEN
zeppelin.notebook.git.remote.access-token
token 用于GitHub API的GitHub访问令牌。如果使用用户名/密码组合而不是GitHub API,则此值为密码
ZEPPELIN_NOTEBOOK_GIT_REMOTE_ORIGIN
zeppelin.notebook.git.remote.origin
token GitHub 远程名称。默认是 `origin`
ZEPPELIN_RUN_MODE
zeppelin.run.mode
auto 运行模式。'auto|local|k8s'。'auto' 自动检测环境。'local' 以本地进程运行解释器。k8s 在 Kubernetes 集群上运行解释器
ZEPPELIN_K8S_PORTFORWARD
zeppelin.k8s.portforward
false 端口转发到解释器rpc端口。仅在本地开发时,当zeppelin.k8s.mode为'on'时设置为'true'。不要在生产环境中使用'true'
ZEPPELIN_K8S_CONTAINER_IMAGE
zeppelin.k8s.container.image
apache/zeppelin:0.11.2 解释器的Docker镜像
ZEPPELIN_K8S_SPARK_CONTAINER_IMAGE
zeppelin.k8s.spark.container.image
apache/spark:latest Spark执行器的Docker镜像
ZEPPELIN_K8S_TEMPLATE_DIR
zeppelin.k8s.template.dir
k8s Kubernetes yaml 规范文件
ZEPPELIN_K8S_SERVICE_NAME
zeppelin.k8s.service.name
zeppelin-server Zeppelin 服务器服务资源的名称
ZEPPELIN_K8S_TIMEOUT_DURING_PENDING
zeppelin.k8s.timeout.during.pending
true 用于在启动解释器Pod时启用/禁用超时处理的值。注意:这可能导致无限循环
ZEPPELIN_METRIC_ENABLE_PROMETHEUS
zeppelin.metric.enable.prometheus
false 用于在/metric上启用/禁用Prometheus指标端点的值
ZEPPELIN_NOTEBOOK_CRON_ENABLE
zeppelin.notebook.cron.enable
false 用于启用/禁用笔记中的Cron支持的值
ZEPPELIN_NOTEBOOK_CRON_FOLDERS
zeppelin.notebook.cron.folders
逗号分隔的文件夹列表,允许在其中执行cron
ZEPPELIN_NOTE_CACHE_THRESHOLD
zeppelin.note.cache.threshold
50 缓存中笔记数量达到此阈值时,将发生驱逐。
ZEPPELIN_NOTEBOOK_VERSIONED_MODE_ENABLE
zeppelin.notebook.versioned.mode.enable
true 用于启用/禁用笔记中的版本控制支持的值。

SSL 配置

启用SSL需要进行一些配置更改。首先,您需要创建证书,然后更新必要的配置以启用服务器端SSL和/或客户端证书认证。

创建和配置证书

关于如何生成证书和密钥库的信息可以在这里找到。

可以在StackOverflow帖子的顶部答案中找到简化的示例。

密钥库保存服务器端的私钥和证书。信任库保存受信任的客户端证书。请确保在下面的密码字段中正确配置了这两个库的路径和密码。它们可以使用Jetty密码工具进行混淆。在Maven拉取所有依赖项以构建Zeppelin后,其中一个Jetty jar包含密码工具。从Zeppelin主构建目录中使用适当的版本、用户和密码调用此命令。

java -cp ./zeppelin-server/target/lib/jetty-all-server-<version>.jar \
org.eclipse.jetty.util.security.Password <user> <password>

如果您使用的是自签名证书、由不受信任的CA签名的证书,或者启用了客户端认证,那么客户端必须让浏览器为正常的HTTPS端口和WebSocket端口创建例外。这可以通过在浏览器中尝试建立到这两个端口的HTTPS连接来完成(例如,如果端口是443和8443,则访问https://127.0.0.1:443和https://127.0.0.1:8443)。如果服务器证书由受信任的CA签名并且客户端认证已禁用,则可以跳过此步骤。

配置服务器端SSL

为了启用服务器端SSL,需要在zeppelin-site.xml中更新以下属性。

<property>
  <name>zeppelin.server.ssl.port</name>
  <value>8443</value>
  <description>Server ssl port. (used when ssl property is set to true)</description>
</property>

<property>
  <name>zeppelin.ssl</name>
  <value>true</value>
  <description>Should SSL be used by the servers?</description>
</property>

<property>
  <name>zeppelin.ssl.keystore.path</name>
  <value>keystore</value>
  <description>Path to keystore relative to Zeppelin configuration directory</description>
</property>

<property>
  <name>zeppelin.ssl.keystore.type</name>
  <value>JKS</value>
  <description>The format of the given keystore (e.g. JKS or PKCS12)</description>
</property>

<property>
  <name>zeppelin.ssl.keystore.password</name>
  <value>change me</value>
  <description>Keystore password. Can be obfuscated by the Jetty Password tool</description>
</property>

<property>
  <name>zeppelin.ssl.key.manager.password</name>
  <value>change me</value>
  <description>Key Manager password. Defaults to keystore password. Can be obfuscated.</description>
</property>

启用客户端证书认证

为了启用客户端证书认证,需要在zeppelin-site.xml中更新以下属性。

<property>
  <name>zeppelin.server.ssl.port</name>
  <value>8443</value>
  <description>Server ssl port. (used when ssl property is set to true)</description>
</property>

<property>
  <name>zeppelin.ssl.client.auth</name>
  <value>true</value>
  <description>Should client authentication be used for SSL connections?</description>
</property>

<property>
  <name>zeppelin.ssl.truststore.path</name>
  <value>truststore</value>
  <description>Path to truststore relative to Zeppelin configuration directory. Defaults to the keystore path</description>
</property>

<property>
  <name>zeppelin.ssl.truststore.type</name>
  <value>JKS</value>
  <description>The format of the given truststore (e.g. JKS or PKCS12). Defaults to the same type as the keystore type</description>
</property>

<property>
  <name>zeppelin.ssl.truststore.password</name>
  <value>change me</value>
  <description>Truststore password. Can be obfuscated by the Jetty Password tool. Defaults to the keystore password</description>
</property>

存储用户凭证

为了避免每次重启/重新部署Zeppelin时都需要重新输入凭据,您可以存储用户凭据。Zeppelin通过ZEPPELINCREDENTIALSPERSIST配置支持此功能。

请注意,密码默认将以明文形式存储。要加密密码,请使用ZEPPELINCREDENTIALSENCRYPT_KEY配置变量。这将使用AES-128算法对密码进行加密。

你可以以任何你喜欢的方式生成一个合适的加密密钥 - 例如,通过使用openssl工具:

openssl enc -aes-128-cbc -k secret -P -md sha1

重要:不建议将加密密钥存储在配置文件中。根据您的环境安全需求,您可能需要考虑使用凭据服务器,将ZEPPELINCREDENTIALSENCRYPT_KEY存储为操作系统环境变量,或任何其他不会将加密密钥和加密内容(credentials.json文件)放在一起的方法。

使用Jetty密码工具混淆密码

安全最佳实践建议不要使用明文密码,Jetty 提供了一个密码工具来帮助混淆用于访问 KeyStore 和 TrustStore 的密码。

密码工具的文档可以在这里找到。

使用工具后:

java -cp $ZEPPELIN_HOME/zeppelin-server/target/lib/jetty-util-9.2.15.v20160210.jar \
         org.eclipse.jetty.util.security.Password  \
         password

2016-12-15 10:46:47.931:INFO::main: Logging initialized @101ms
password
OBF:1v2j1uum1xtv1zej1zer1xtn1uvk1v1v
MD5:5f4dcc3b5aa765d61d8327deb882cf99

使用混淆的密码更新您的配置:

<property>
  <name>zeppelin.ssl.keystore.password</name>
  <value>OBF:1v2j1uum1xtv1zej1zer1xtn1uvk1v1v</value>
  <description>Keystore password. Can be obfuscated by the Jetty Password tool</description>
</property>

创建GitHub访问令牌

使用GitHub跟踪笔记本时,可以使用GitHub的API进行身份验证。要创建访问令牌,请使用以下链接 https://github.com/settings/tokens。 生成的访问令牌的值设置在zeppelin.notebook.git.remote.access-token属性中。

注意: 更新这些配置后,需要重新启动 Zeppelin 服务器。