- 数据分析
- 数据可视化
- 大数据
- 后端
【免费下载链接】zeppelin
Web-based notebook that enables>项目地址:https://gitcode.com/gh_mirrors/zeppelin1/zeppelin
Apache Zeppelin 是支持 SQL、Scala、Python 等语言的数据驱动交互式笔记本平台。本文以官方 configuration.md 文档为骨架,系统讲解 Zeppelin 的三大配置来源与优先级关系、conf/zeppelin-env.sh与conf/zeppelin-site.xml中全部核心属性的含义与默认值,并完整演示 SSL 服务端加密、客户端证书认证、凭据持久化加密与 Jetty 密码混淆等安全配置的落地步骤。读完本文,你将能够独立完成 Zeppelin 服务器地址/端口、JVM 内存、Notebook 存储后端(本地 / S3 / Azure / Git)、解释器行为、Kubernetes 运行模式等全方位调优,并安全地以 HTTPS 对外提供服务。
配置来源与优先级:环境变量 > 系统属性 > 配置文件
Zeppelin 的配置可以来自多个来源,按优先级从高到低依次为:
- 环境变量:定义在
conf/zeppelin-env.sh(Windows 下为conf\zeppelin-env.cmd); - 系统属性(System Properties,通常通过
-DJVM 参数传入); - 配置文件:
conf/zeppelin-site.xml。
这一优先级关系不仅写在文档中,也在源码层面得到印证:zeppelin-interpreter/src/main/java/org/apache/zeppelin/conf/ZeppelinConfiguration.java的类注释明确声明了同样的三级优先级,而在其getBoolean/getInt/getLong等取值方法中,读取顺序正是先查EnvironmentConfiguration(环境变量),再查SystemConfiguration(系统属性),最后才回落到 XML 配置文件中的值或内置默认值。也就是说,同一属性如果在多个来源中同时出现,环境变量会覆盖系统属性,系统属性会覆盖zeppelin-site.xml,三者都未设置时使用代码内建默认值。
从启动脚本看,bin/common.sh会先确认ZEPPELIN_CONF_DIR(默认${ZEPPELIN_HOME}/conf),若该目录下存在zeppelin-env.sh则执行它以加载其中的环境变量,随后将ZEPPELIN_CONF_DIR加入类路径,使zeppelin-site.xml可被ZeppelinConfiguration通过ZeppelinLocationStrategy与ClasspathLocationStrategy组合定位并解析(见ZeppelinConfiguration.loadXMLConfig)。
配置文件准备
安装包内默认提供的是模板文件而非可编辑的配置,首次使用前需要从模板复制一份:
# 在 Zeppelin 安装目录下 cp conf/zeppelin-env.sh.template conf/zeppelin-env.sh cp conf/zeppelin-site.xml.template conf/zeppelin-site.xmlconf/zeppelin-env.sh.template:以# export ZEPPELIN_XXX注释形式列出全部可用环境变量,取消注释并填写值即可生效;conf/zeppelin-site.xml.template:以<property>形式给出所有 XML 配置项及其默认值,部分高级项(S3、Azure、Git、安全响应头等)默认被注释,按需取消注释后使用。
修改配置后需要重启 Zeppelin 服务器才能生效(见文末说明)。
服务监听、端口与 Web 应用配置
以下属性决定 Zeppelin 服务器进程的绑定地址、HTTP/HTTPS 端口、上下文路径与跨域来源:
| zeppelin-env.sh 变量 | zeppelin-site.xml 属性 | 默认值 | 说明 |
|---|---|---|---|
ZEPPELIN_ADDR | zeppelin.server.addr | 127.0.0.1 | Zeppelin 服务器绑定地址。若在 WSL 或 Windows 上无法通过浏览器访问,可改为0.0.0.0,但将机器暴露在公网会带来安全风险 |
ZEPPELIN_PORT | zeppelin.server.port | 8080 | Zeppelin 服务器端口。注意不要与 Zeppelin Web 应用开发端口(默认 9000)冲突 |
ZEPPELIN_SSL_PORT | zeppelin.server.ssl.port | 8443 | SSL 端口(当 ssl 环境变量/属性为 true 时使用) |
ZEPPELIN_SERVER_CONTEXT_PATH | zeppelin.server.context.path | / | Web 应用的上下文路径 |
ZEPPELIN_ALLOWED_ORIGINS | zeppelin.server.allowed.origins | * | 允许的 REST 与 WebSocket 来源,逗号分隔,例如http://localhost:8080 |
ZEPPELIN_WAR_TEMPDIR | zeppelin.war.tempdir | webapps | Jetty 临时目录位置 |
ZEPPELIN_SERVER_DEFAULT_DIR_ALLOWED | zeppelin.server.default.dir.allowed | false | 是否允许服务器启用目录列表 |
源码层面,ZeppelinConfiguration.ConfVars枚举定义了这些属性的内建默认值:ZEPPELIN_ADDR("zeppelin.server.addr", "127.0.0.1")、ZEPPELIN_PORT("zeppelin.server.port", 8080)、ZEPPELIN_SSL_PORT("zeppelin.server.ssl.port", 8443)、ZEPPELIN_SERVER_CONTEXT_PATH("zeppelin.server.context.path", "/");对应的getServerAddress()、getServerPort()、getServerSslPort()、useSsl()等方法则被服务器启动逻辑直接使用(printShortInfo()会在启动日志中打印 Host、Port/SSL Port 与 Context Path)。zeppelin.site.xml.template中还提示:绑定地址设为0.0.0.0虽可解决 WSL/Windows 下的浏览器访问问题,但会带来安全风险。
ZEPPELIN_ALLOWED_ORIGINS用于 REST 与 WebSocket 的跨域控制:保持*意味着任意来源都可以发起请求,模板中的描述明确提醒这存在安全漏洞(对应 ZEPPELIN-173),生产环境建议显式列出允许的来源列表。
JVM 与进程管理配置
以下属性仅存在于zeppelin-env.sh环境变量中(对应 XML 属性为 N/A):
| zeppelin-env.sh 变量 | zeppelin-site.xml 属性 | 默认值 | 说明 |
|---|---|---|---|
ZEPPELIN_MEM | N/A | -Xmx1024m -XX:MaxMetaspaceSize=512m | Zeppelin 服务器 JVM 内存选项 |
ZEPPELIN_INTP_MEM | N/A | ZEPPELIN_MEM | 解释器进程的 JVM 内存选项 |
ZEPPELIN_JAVA_OPTS | N/A | (空) | 额外的 JVM 选项,例如-Dspark.executor.memory=8g -Dspark.cores.max=16 |
ZEPPELIN_JMX_ENABLE | zeppelin.jmx.enable | false | 设为true启用 JMX |
ZEPPELIN_JMX_PORT | zeppelin.jmx.port | 9996 | JMX 使用的端口号 |
zeppelin-env.sh.template中给出的内存示例为-Xms1024m -Xmx1024m -XX:MaxMetaspaceSize=512m;ZEPPELIN_INTP_MEM默认继承ZEPPELIN_MEM,用于为独立启动的解释器进程分配堆内存。JMX 相关配置的默认值同样在ConfVars枚举中定义(zeppelin.jmx.enable为 false、zeppelin.jmx.port为 9996),启用后可通过 JMX 端口对 Zeppelin 服务器进程进行监控。
凭据持久化与加密配置
| zeppelin-env.sh 变量 | zeppelin-site.xml 属性 | 默认值 | 说明 |
|---|---|---|---|
ZEPPELIN_CREDENTIALS_PERSIST | zeppelin.credentials.persist | true | 将凭据持久化到 JSON 文件(credentials.json) |
ZEPPELIN_CREDENTIALS_ENCRYPT_KEY | zeppelin.credentials.encryptKey | (空) | 若提供,则对 credentials.json 中的密码进行加密(否则以明文存储) |
这两项配置与"存储用户凭据"章节紧密相关,详细用法见下文对应小节;其默认值persist=true、encryptKey=null同样定义在ConfVars枚举中。
Notebook 协作、版本控制与展示配置
| zeppelin-env.sh 变量 | zeppelin-site.xml 属性 | 默认值 | 说明 |
|---|---|---|---|
ZEPPELIN_NOTEBOOK_COLLABORATIVE_MODE_ENABLE | zeppelin.notebook.collaborative.mode.enable | true | 启用基本的协作编辑能力;单用户使用 Notebook 时不影响操作逻辑 |
ZEPPELIN_NOTEBOOK_VERSIONED_MODE_ENABLE | zeppelin.notebook.versioned.mode.enable | true | 启用/禁用 Notebook 的版本控制支持 |
ZEPPELIN_NOTEBOOK_HOMESCREEN | zeppelin.notebook.homescreen | (空) | 在 Zeppelin 首页展示的 Notebook ID,例如2A94M5J1Z;留空则显示默认首页 |
ZEPPELIN_NOTEBOOK_HOMESCREEN_HIDE | zeppelin.notebook.homescreen.hide | false | 设为true时,将ZEPPELIN_NOTEBOOK_HOMESCREEN指定的 Notebook 从首页列表中隐藏。更多信息参见 Customize your Zeppelin homepage |
ZEPPELIN_NOTEBOOK_PUBLIC | zeppelin.notebook.public | true | 新建/导入 Notebook 时默认设为公开(仅设置owners);若为false,则还会把user加入readers与writers,使 Notebook 变为私有,其他用户除非被授权否则不可见 |
ZEPPELIN_NOTEBOOK_CRON_ENABLE | zeppelin.notebook.cron.enable | false | 启用/禁用 Notebook 的 Cron 定时调度支持 |
ZEPPELIN_NOTEBOOK_CRON_FOLDERS | zeppelin.notebook.cron.folders | (空) | 允许使用 Cron 的文件夹列表(逗号分隔) |
ZEPPELIN_NOTE_CACHE_THRESHOLD | zeppelin.note.cache.threshold | 50 | 触发缓存淘汰前的 Notebook 缓存数量阈值 |
协作模式与版本控制默认均为开启状态,二者在ConfVars枚举中分别对应zeppelin.notebook.collaborative.mode.enable与zeppelin.notebook.versioned.mode.enable。Cron 调度的详细使用方式可参考 cron_scheduler.md;Notebook 的权限体系(owners/readers/writers)可在 notebook_authorization.md 中进一步了解。
Notebook 存储配置:本地、S3、Azure 与多存储同步
| zeppelin-env.sh 变量 | zeppelin-site.xml 属性 | 默认值 | 说明 |
|---|---|---|---|
ZEPPELIN_NOTEBOOK_DIR | zeppelin.notebook.dir | notebook | Notebook 目录的根目录(本地文件系统) |
ZEPPELIN_NOTEBOOK_STORAGE | zeppelin.notebook.storage | org.apache.zeppelin.notebook.repo.GitNotebookRepo | 逗号分隔的 Notebook 存储位置列表(可配置多个存储后端) |
ZEPPELIN_NOTEBOOK_ONE_WAY_SYNC | zeppelin.notebook.one.way.sync | false | 存在多个 Notebook 存储位置时,是否将第一个视为唯一数据源(单向同步) |
S3 存储
| zeppelin-env.sh 变量 | zeppelin-site.xml 属性 | 默认值 | 说明 |
|---|---|---|---|
ZEPPELIN_NOTEBOOK_S3_BUCKET | zeppelin.notebook.s3.bucket | zeppelin | Notebook 文件保存到的 S3 Bucket |
ZEPPELIN_NOTEBOOK_S3_USER | zeppelin.notebook.s3.user | user | S3 Bucket 中的用户名,目录结构形如bucket/user/notebook/2A94M5J1Z/note.json |
ZEPPELIN_NOTEBOOK_S3_ENDPOINT | zeppelin.notebook.s3.endpoint | s3.amazonaws.com | Bucket 的 Endpoint |
| N/A | zeppelin.notebook.s3.timeout | 120000 | Bucket Endpoint 请求超时时间(毫秒) |
ZEPPELIN_NOTEBOOK_S3_KMS_KEY_ID | zeppelin.notebook.s3.kmsKeyID | (空) | 用于加密 S3 中数据的 AWS KMS Key ID(可选) |
ZEPPELIN_NOTEBOOK_S3_EMP | zeppelin.notebook.s3.encryptionMaterialsProvider | (空) | 自定义 S3 加密材料提供者实现类名,用于加密 S3 中的数据(可选) |
ZEPPELIN_NOTEBOOK_S3_SSE | zeppelin.notebook.s3.sse | false | 启用服务端加密保存 Notebook 到 S3 |
ZEPPELIN_NOTEBOOK_S3_CANNED_ACL | zeppelin.notebook.s3.cannedAcl | (空) | 以指定的 Canned ACL 保存 Notebook 到 S3,决定 S3 权限 |
ZEPPELIN_NOTEBOOK_S3_PATH_STYLE_ACCESS | zeppelin.notebook.s3.pathStyleAccess | false | 使用 path style 访问 S3 Bucket |
ZEPPELIN_NOTEBOOK_S3_SIGNEROVERRIDE | zeppelin.notebook.s3.signerOverride | (空) | 可选:覆盖控制用于签署 AWS 请求的签名算法 |
zeppelin-site.xml.template中对 S3 相关配置给出了更完整的注解:存储目录结构为s3://{bucket}/{username}/{notebook-id}/note.json;zeppelin.notebook.s3.timeout默认 120000 毫秒;kmsKeyID需要配合具有该密钥使用权限的 EMR 集群 EC2 角色;signerOverride在对接仅支持 AWS 签名 V2 的兼容 API(如 Ceph)时设置为S3SignerType。此外模板中还提供了阿里云 OSS、Google Cloud Storage(GCS)与 MongoDB 等存储后端的示例配置,实际可用的存储实现类包括S3NotebookRepo、GCSNotebookRepo、OSSNotebookRepo、AzureNotebookRepo、MongoNotebookRepo、VFSNotebookRepo、FileSystemNotebookRepo与默认的GitNotebookRepo,详见 notebook_storage.md。
Azure 存储
| zeppelin-env.sh 变量 | zeppelin-site.xml 属性 | 默认值 | 说明 |
|---|---|---|---|
ZEPPELIN_NOTEBOOK_AZURE_CONNECTION_STRING | zeppelin.notebook.azure.connectionString | (空) | Azure 存储账户连接字符串,例如DefaultEndpointsProtocol=https;AccountName=<accountName>;AccountKey=<accountKey> |
ZEPPELIN_NOTEBOOK_AZURE_SHARE | zeppelin.notebook.azure.share | zeppelin | Notebook 文件保存到的 Azure Share |
ZEPPELIN_NOTEBOOK_AZURE_USER | zeppelin.notebook.azure.user | user | Azure 文件共享中的可选用户名,目录结构形如share/user/notebook/2A94M5J1Z/note.json |
Git 远程存储
| zeppelin-env.sh 变量 | zeppelin-site.xml 属性 | 默认值 | 说明 |
|---|---|---|---|
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 API,则该值作为密码使用 |
ZEPPELIN_NOTEBOOK_GIT_REMOTE_ORIGIN | zeppelin.notebook.git.remote.origin | token | GitHub 远程仓库名,默认应为origin |
注意:上表最后一行的默认值token来自官方文档表格,而从源码ConfVars枚举(ZeppelinConfiguration.java)看,zeppelin.notebook.git.remote.origin的代码内建默认值实际为"origin"(远程仓库名),GitHub Access Token 的具体生成与配置方法见文末专门小节。
解释器相关配置
| zeppelin-env.sh 变量 | zeppelin-site.xml 属性 | 默认值 | 说明 |
|---|---|---|---|
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.interpreter.connect.timeout的代码默认值是600000L(毫秒),且ZeppelinConfiguration.getTime()支持1s、2m、3h这类带时间单位的写法并自动换算为毫秒;zeppelin.interpreter.output.limit内建默认值为1024 * 100,即 102400 字节。模板中还提供了zeppelin.interpreter.include/zeppelin.interpreter.exclude(二者只能选其一,不能同时指定)用于过滤启用的解释器集合,以及解释器生命周期管理(TimeoutLifecycleManager及其检查间隔、超时阈值)等高级配置项。
Helium 依赖加载器配置
Helium 是 Zeppelin 的插件生态(可视化、Spell 等),其依赖下载依赖以下远程源:
| zeppelin-env.sh 变量 | zeppelin-site.xml 属性 | 默认值 | 说明 |
|---|---|---|---|
ZEPPELIN_HELIUM_NODE_INSTALLER_URL | zeppelin.helium.node.installer.url | https://nodejs.org/dist/ | Helium 依赖加载器使用的远程 Node 安装源 |
ZEPPELIN_HELIUM_NPM_INSTALLER_URL | zeppelin.helium.npm.installer.url | http://registry.npmjs.org/ | Helium 依赖加载器使用的远程 Npm 安装源 |
ZEPPELIN_HELIUM_YARNPKG_INSTALLER_URL | zeppelin.helium.yarnpkg.installer.url | https://github.com/yarnpkg/yarn/releases/download/ | Helium 依赖加载器使用的远程 Yarn 包安装源 |
在需要离线安装、内网部署或使用私有镜像源的环境下,可将这些 URL 替换为内网镜像地址。ConfVars枚举中ZEPPELIN_HELIUM_REGISTRY("zeppelin.helium.registry", "helium")指向 Helium Registry 位置(默认内置helium,也可在模板中配置为外部 Registry URL)。
WebSocket 与消息大小配置
| zeppelin-env.sh 变量 | zeppelin-site.xml 属性 | 默认值 | 说明 |
|---|---|---|---|
ZEPPELIN_WEBSOCKET_MAX_TEXT_MESSAGE_SIZE | zeppelin.websocket.max.text.message.size | 1024000 | WebSocket 可接收的最大文本消息大小(字符数) |
值得注意的差异:官方文档表格给出的默认值为1024000,而 zeppelin-site.xml.template 与源码ConfVars枚举中的内建默认值均为10240000(约 1 千万字符)。WebSocket 是 Zeppelin 前端与服务器之间实时通信(段落执行结果推送、协作编辑等)的核心通道,该值过小会导致大结果集被截断,请按实际段落输出规模调整。
运行模式与 Kubernetes 配置
| zeppelin-env.sh 变量 | zeppelin-site.xml 属性 | 默认值 | 说明 |
|---|---|---|---|
ZEPPELIN_RUN_MODE | zeppelin.run.mode | auto | 运行模式:auto自动探测环境;local将解释器作为本地进程运行;k8s在 Kubernetes 集群上运行解释器 |
ZEPPELIN_K8S_PORTFORWARD | zeppelin.k8s.portforward | false | 对解释器 RPC 端口做端口转发。仅在本地开发且zeppelin.k8s.mode为on时设为true,生产环境切勿开启 |
ZEPPELIN_K8S_CONTAINER_IMAGE | zeppelin.k8s.container.image | apache/zeppelin:<版本号> | 解释器使用的 Docker 镜像 |
ZEPPELIN_K8S_SPARK_CONTAINER_IMAGE | zeppelin.k8s.spark.container.image | apache/spark:latest | Spark Executor 使用的 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 时启用/禁用超时处理;注意可能导致无限循环 |
源码ConfVars中还定义了ZEPPELIN_RUN_MODE("zeppelin.run.mode", "auto"),其RUN_MODE枚举为LOCAL、K8S、DOCKER三种取值(文档表格中仅列出 auto/local/k8s,zeppelin-site.xml.template的取值描述为'auto|local|k8s|docker'),并额外提供zeppelin.k8s.namespace(默认default)等命名空间配置。zeppelin.k8s.container.image的代码默认值由当前 Zeppelin 版本动态拼接生成。仓库中 k8s 目录提供了解释器与服务器的 YAML 样例,Kubernetes 部署的整体流程可参考 kubernetes.md。
监控与其他功能开关
| zeppelin-env.sh 变量 | zeppelin-site.xml 属性 | 默认值 | 说明 |
|---|---|---|---|
ZEPPELIN_METRIC_ENABLE_PROMETHEUS | zeppelin.metric.enable.prometheus | false | 启用/禁用/metric端点上的 Prometheus 指标输出 |
此外,zeppelin-site.xml.template中还有若干未列入官方表格但值得关注的功能开关:zeppelin.jobmanager.enable(默认 false,禁用 Job 页可显著节省内存并提升性能)、zeppelin.search.index.rebuild/zeppelin.search.use.disk/zeppelin.search.index.path(搜索索引是否重建、是否落盘及索引路径)、zeppelin.spark.only_yarn_cluster、zeppelin.note.file.exclude.fields(从 note 文件中排除的字段,如Paragraph.results)等,可按需在配置文件中启用。
SSL 配置
启用 SSL 需要两方面的配置:一是生成证书并更新必要的配置以启用服务端 SSL 和/或客户端证书认证,二是确保密钥库(keystore)与信任库(truststore)的路径和密码正确。
创建与配置证书
密钥库(keystore)在服务器端保存私钥与证书;信任库(truststore)保存受信任的客户端证书。生成证书与密钥库的方法可参考 Jetty 官方"Configure SSL"Howto 文档(以及 StackOverflow 上关于 Jetty SSL 配置的高票回答中的精简示例),基本步骤是使用keytool生成自签名或由 CA 签发的证书并导入密钥库。
生成后,请确保两个库的路径与密码在下列字段中正确配置。密码可以使用 Jetty Password 工具进行混淆(见下文)。在 Maven 拉取全部依赖完成 Zeppelin 构建后,Jetty 相关 jar 中即包含 Password 工具,可在 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
在zeppelin-site.xml中配置以下属性以启用服务端 SSL:
<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>源码中的路径解析规则(ZeppelinConfiguration.getKeyStorePath()/getTrustStorePath())值得注意:如果配置的路径以/开头或属于 Windows 路径,则按绝对路径直接使用;否则按相对于配置目录(getConfDir())的路径拼接解析。而zeppelin.ssl.key.manager.password与zeppelin.ssl.truststore.password在未显式配置时,会分别回落到密钥库密码(见getKeyManagerPassword()与getTrustStorePassword())。
启用客户端证书认证
在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>源码getTrustStorePath()的实现与描述一致:未配置时默认取密钥库路径;getTrustStoreType()未配置时默认取密钥库类型。这样只需正确维护密钥库的路径、类型与密码,即可让信任库相关配置尽量少。
PEM 证书支持
除了 JKS/PKCS12 密钥库方式,Zeppelin 还支持 PEM 格式的证书配置(ConfVars中同样定义了这些属性的默认值,zeppelin-site.xml.template中以注释形式给出):
| zeppelin-env.sh 变量 | zeppelin-site.xml 属性 | 说明 |
|---|---|---|
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 时都要重新输入凭据,可以通过ZEPPELIN_CREDENTIALS_PERSIST配置持久化用户凭据(写入credentials.json)。
请注意:默认情况下密码以明文存储。要加密密码,请使用ZEPPELIN_CREDENTIALS_ENCRYPT_KEY配置变量,它将使用AES-128算法对密码进行加密。可以使用任意方式生成合适的加密密钥,例如用 openssl:
openssl enc -aes-128-cbc -k secret -P -md sha1重要安全提示:不建议将加密密钥存储在配置文件中。根据环境的安全需求,可考虑使用凭据服务器、将
ZEPPELIN_CREDENTIALS_ENCRYPT_KEY设置为操作系统环境变量,或采用其他任何不将加密密钥与加密内容(credentials.json文件)放在一起的方案。
使用 Jetty Password 工具混淆密码
安全最佳实践不建议在配置中使用明文密码,Jetty 提供了 Password 工具来帮助混淆访问 KeyStore 与 TrustStore 所使用的密码。工具文档可在 Jetty 官方文档的"Configuring Security & Secure Passwords"章节找到。构建产物中的 jar 位于$ZEPPELIN_HOME/zeppelin-server/target/lib/,使用方式如下(版本号以实际构建产物为准):
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工具会同时输出 OBF(混淆)与 MD5 两种形式,将配置更新为混淆后的密码:
<property> <name>zeppelin.ssl.keystore.password</name> <value>OBF:1v2j1uum1xtv1zej1zer1xtn1uvk1v1v</value> <description>Keystore password. Can be obfuscated by the Jetty Password tool</description> </property>同理,密钥库密码、Key Manager 密码与信任库密码均可使用OBF:前缀的混淆值。
创建 GitHub Access Token
当使用 GitHub 跟踪 Notebook(即采用GitNotebookRepo并配置了zeppelin.notebook.git.remote.url)时,可以使用 GitHub API 进行认证。访问 GitHub 账户设置中的 Personal Access Tokens 页面创建访问令牌,将生成的值填入zeppelin.notebook.git.remote.access-token属性:
<property> <name>zeppelin.notebook.git.remote.url</name> <value>git@github.com:your-org/your-notebook-repo.git</value> <description>remote Git repository URL</description> </property> <property> <name>zeppelin.notebook.git.remote.access-token</name> <value>your_github_access_token</value> <description>remote Git repository password</description> </property>zeppelin.notebook.git.remote.username保持默认的token即可(表示使用 GitHub API 的 token 认证模式);若采用用户名/密码组合而非 GitHub API,则该值作为密码使用。上述属性的默认值均定义在 ZeppelinConfiguration.java 的ConfVars枚举中。
生效与验证
更新上述任一配置后,必须重启 Zeppelin 服务器才能生效。重启后可通过以下方式验证:
- 观察启动日志:
ZeppelinConfiguration.printShortInfo()会打印Server Host、Server Port(启用 SSL 时打印Server SSL Port)与Context Path; - 启用 SSL 后使用
https://<host>:8443/访问 Web 界面,并确认浏览器无证书告警(受信任 CA 场景)或已手动添加例外(自签名场景); - 启用 Prometheus 指标后访问
/metric端点确认指标输出; - 修改 Notebook 存储后端后新建 Notebook,确认 note 文件按预期写入目标存储(本地
notebook/目录、S3 Bucket 或 Azure Share)。
相关配置模板与源码可继续查阅:conf/zeppelin-env.sh.template、conf/zeppelin-site.xml.template、ZeppelinConfiguration.java 以及启动脚本 bin/common.sh。
- 数据分析
- 数据可视化
- 大数据
- 后端
【免费下载链接】zeppelin
Web-based notebook that enables>项目地址:https://gitcode.com/gh_mirrors/zeppelin1/zeppelin
相关推荐
Apache Zeppelin 配置指南:zeppelin-site.xml 属性体系与 SSL/凭据安全配置
Apache Zeppelin 配置指南:zeppelin site.xml 属性体系与 SSL/凭据安全配置 本指南完整梳理 Apache Zeppelin
数据分析数据可视化大数据后端前端任务调度svg-captcha 版本更新解析:从1.0到1.4.0的重要特性演变
svg captcha 版本更新解析:从1.0到1.4.0的重要特性演变 svg captcha 是一款基于 Node.js 的 SVG 验证码生成工具,能够帮
Apache Zeppelin Livy 解释器完全指南:架构、配置与集成测试
Apache Zeppelin Livy 解释器完全指南:架构、配置与集成测试 导读 本文以 livy/README.md https://link.gitco
后端前端大数据数据分析