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; |
|
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添加到readers和writers中,使其变为私有,并且对其他用户不可见,除非授予权限。 |
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 服务器。