
数据分析数据可视化大数据后端前端任务调度【免费下载链接】zeppelinWeb-based notebook that enables>项目地址https://gitcode.com/gh_mirrors/zeppe/zeppelin点击查看免费下载Apache Zeppelin 内置一套可插拔的笔记本Notebook持久化机制通过zeppelin.notebook.storage配置项即可切换或组合多种存储后端。本文以官方文档docs/setup/storage/notebook_storage.md为骨架系统讲解本地 Git 版本库、本地 VFS、Hadoop 兼容文件系统、Amazon S3、Azure、Google Cloud Storage、阿里云 OSS、MongoDB 以及 GitHub 远程跟踪九种存储方案并给出每种方案的完整配置示例与源码级实现细节。读者学完后可以按需为 Zeppelin 配置单存储或多存储同步架构并理解每个配置项背后对应的实际行为。总体概览可插拔存储架构与配置入口Apache Zeppelin 的笔记本存储采用**可插拔pluggable**设计由配置项zeppelin.notebook.storage统一控制其值为存储实现类的完整类名Fully Qualified Class Name。在 ZeppelinConfiguration.java 中可以看到该配置项的默认值zeppelin.notebook.storage org.apache.zeppelin.notebook.repo.GitNotebookRepo即默认使用本地 Git 版本库存储。文档列出的开箱即用存储实现包括实现类存储位置特性GitNotebookRepo默认本地文件系统 本地 Git 仓库自带版本历史、可回滚VFSNotebookRepo本地文件系统notebook目录纯文件存储无版本控制FileSystemNotebookRepoHadoop 兼容文件系统HDFS、wasb、s3 等支持多 Zeppelin 实例共享笔记S3NotebookRepoAmazon S3可选 KMS/SSE 加密、Canned ACLAzureNotebookRepoAzure 文件共享依赖连接字符串鉴权GCSNotebookRepoGoogle Cloud Storage使用 ADC应用默认凭据OSSNotebookRepo阿里云 OSS支持版本回滚默认保留 30 个版本MongoNotebookRepoMongoDB支持副本集高可用、自动导入本地笔记GitHubNotebookRepo任意支持用户名密码鉴权的远程 Git 仓库基于GitNotebookRepo扩展自动 push/pull关键机制多个存储可以同时启用只要在配置值中提供逗号分隔的类名列表即可。例如property namezeppelin.notebook.storage/name valueorg.apache.zeppelin.notebook.repo.GitNotebookRepo,org.apache.zeppelin.notebook.repo.GCSNotebookRepo/value descriptionnotebook persistence layer implementation/description /property多个存储并存时Zeppelin 默认只保证前两个自动保持同步local 与 remote 组合是典型用法。这个多存储 同步机制由 NotebookRepoSync.java 实现它内部持有一个ListNotebookRepo并依据配置顺序加载实现类。另一个相关配置项是zeppelin.notebook.one.way.sync默认false参见 zeppelin-site.xml.template当存在多个存储时若设为trueZeppelin 会把第一个存储视为唯一数据源只做单向同步避免写放大或冲突。配置入口有两种zeppelin-site.xml位于$ZEPPELIN_HOME/conf/下由zeppelin-site.xml.template复制而来用于设置 XMLproperty形式的持久化配置zeppelin-env.sh同一目录下的环境变量脚本对应配置项会映射为ZEPPELIN_NOTEBOOK_*系列环境变量参见 zeppelin-env.sh.template。下文按存储类型逐一展开配置细节与源码印证。默认方案本地 Git 仓库GitNotebookRepoGitNotebookRepo是 Zeppelin 的默认笔记本存储它把整个 notebook 目录当作一个本地 Git 仓库来管理。在zeppelin-site.xml中显式启用property namezeppelin.notebook.storage/name valueorg.apache.zeppelin.notebook.repo.GitNotebookRepo/value descriptionnotebook persistence layer implementation/description /property从源码看GitNotebookRepo.java 继承自VFSNotebookRepo并实现NotebookRepoWithVersionControl接口初始化时会打开必要时创建notebook 目录下的.git仓库之后每次保存笔记、移动笔记/文件夹都会产生对应的 Git commit。例如move操作会依次执行git.rm()、git.add()与git.commit()从而保留可追溯的历史。由此可以推断该方案的定位优点笔记天然带版本历史可以回滚到任意一次保存点局限仓库只在本地无法天然支持多 Zeppelin 实例共享若要跨实例或备份需要配合远程仓库见 GitHub 小节。纯文件存储本地 VFS 与 Hadoop 兼容文件系统VFSNotebookRepo本地文件夹直存VFSNotebookRepo将笔记以.zpln文件形式直接保存到本地文件系统notebook目录由zeppelin.notebook.dir指定不做版本控制。VFSNotebookRepo.java 基于 Apache Commons VFS 实现支持本地路径与带 scheme 的 URI 路径目录不存在时会自动创建列出笔记时会递归遍历子目录并跳过以.开头的隐藏项。FileSystemNotebookRepoHadoop 兼容文件系统若要让多个 Zeppelin 实例共享同一份笔记应使用 Hadoop 兼容文件系统如 HDFS、Azure wasb、S3 等。文档明确说明该实现支持所有Hadoop 2.x版本。启用方式property namezeppelin.notebook.storage/name valueorg.apache.zeppelin.notebook.repo.FileSystemNotebookRepo/value descriptionhadoop compatible file system notebook persistence layer implementation/description /property此时zeppelin.notebook.dir的含义变为Hadoop 兼容文件系统上的路径。源码 FileSystemNotebookRepo.java 会基于该路径创建FileSystemStorage并确保目标目录存在。配套的运行时配置要求指定HADOOP_CONF_DIR在zeppelin-env.sh中导出该变量指向包含yarn-site.xml、core-site.xml等 Hadoop 配置的目录Zeppelin 才能定位正确的文件系统配置该变量同样用于 YARN client 模式参见 zeppelin-env.sh.templateexport HADOOP_CONF_DIR/path/to/hadoop/confKerberized 集群若 Hadoop 集群启用了 Kerberos 认证还需在zeppelin-site.xml中配置property namezeppelin.server.kerberos.keytab/name value/path/to/keytab/value /property property namezeppelin.server.kerberos.principal/name valuezeppelinYOUR.REALM/value /propertyAmazon S3 存储S3NotebookRepo基础配置与目录结构启用S3NotebookRepo后笔记在 S3 中的目录结构为s3://bucket_name/username/notebook-id/其中bucket_name由zeppelin.notebook.s3.bucket指定源码中bucketName zConf.getS3BucketName()见 S3NotebookRepo.javausername由zeppelin.notebook.s3.user指定根目录被拼装为user /notebook。方式一zeppelin-env.sh环境变量export ZEPPELIN_NOTEBOOK_S3_BUCKETbucket_name export ZEPPELIN_NOTEBOOK_S3_USERusername方式二zeppelin-site.xmlproperty namezeppelin.notebook.s3.bucket/name valuebucket_name/value descriptionbucket name for notebook storage/description /property property namezeppelin.notebook.s3.user/name valueusername/value descriptionuser name for s3 folder structure/description /property然后启用S3NotebookRepoproperty namezeppelin.notebook.storage/name valueorg.apache.zeppelin.notebook.repo.S3NotebookRepo/value descriptionnotebook persistence layer implementation/description /property同时注释掉默认的 Git 存储property namezeppelin.notebook.storage/name valueorg.apache.zeppelin.notebook.repo.GitNotebookRepo/value descriptionversioned notebook persistence layer implementation/description /property凭据获取链DefaultAWSCredentialsProviderChainS3NotebookRepo使用 AWS SDK 的DefaultAWSCredentialsProviderChain获取凭据源码中AWSCredentialsProvider credentialsProvider new DefaultAWSCredentialsProviderChain()见 S3NotebookRepo.java按以下顺序探测环境变量AWS_ACCESS_KEY_ID与AWS_SECRET_ACCESS_KEYJava System Propertiesaws.accessKeyId与aws.secretKey环境或容器提供的 Web Identity Token 凭据AWS CLI 使用的默认凭据配置文件~/.aws/credentials通过 Amazon EC2 元数据服务提供的实例配置文件凭据。S3 数据加密三选一机制源码 S3NotebookRepo.java 展示了客户端加密的优先级KMS Key ID 自定义 EncryptionMaterialsProvider 普通 S3三者按顺序择优选择客户端构造方式。① AWS KMS 加密密钥zeppelin-env.shexport ZEPPELIN_NOTEBOOK_S3_KMS_KEY_IDkms-key-id或zeppelin-site.xmlproperty namezeppelin.notebook.s3.kmsKeyID/name valueAWS-KMS-Key-UUID/value descriptionAWS KMS key ID used to encrypt notebook data in S3/description /property自定义 KMS 区域zeppelin-env.shexport ZEPPELIN_NOTEBOOK_S3_KMS_KEY_REGIONkms-key-region或zeppelin-site.xmlproperty namezeppelin.notebook.s3.kmsKeyRegion/name valuetarget-region/value descriptionAWS KMS key region in your AWS account/description /propertytarget-region的取值格式参见 AWS 文档 Region 列例如us-east-1。源码中会调用Regions.fromName(keyRegion)并把结果写入CryptoConfiguration.setAwsKmsRegion(...)见 S3NotebookRepo.java。② 自定义 EncryptionMaterialsProvider 类只要该实现类在 classpath 中、且能通过系统属性或其它机制自初始化即可使用export ZEPPELIN_NOTEBOOK_S3_EMPclass-name或zeppelin-site.xmlproperty namezeppelin.notebook.s3.encryptionMaterialsProvider/name valueprovider implementation class name/value descriptionCustom encryption materials provider used to encrypt notebook data in S3/description /property源码通过Class.forName(empClassname).newInstance()反射实例化并校验其实现了EncryptionMaterialsProvider接口见 S3NotebookRepo.java。③ 服务端加密SSEexport ZEPPELIN_NOTEBOOK_S3_SSEtrue或property namezeppelin.notebook.s3.sse/name valuetrue/value descriptionServer-side encryption enabled for notebooks/description /propertyS3 对象权限Canned ACL当向其它账号拥有的 bucket 写入对象时S3 默认不会授予 bucket 所有者对象权限。通过设置 Canned ACL 可以控制写入对象的权限常用取值为BucketOwnerFullControl其它可选值参见 AWSCannedAccessControlList文档export ZEPPELIN_NOTEBOOK_S3_CANNED_ACLBucketOwnerFullControl或property namezeppelin.notebook.s3.cannedAcl/name valueBucketOwnerFullControl/value descriptionSaves notebooks in S3 with the given Canned Access Control List./description /property源码在初始化时通过CannedAccessControlList.valueOf(...)解析该配置见 S3NotebookRepo.java。路径风格访问Path Style Access对于某些兼容 S3 协议的对象存储或需要以路径风格访问时启用export ZEPPELIN_NOTEBOOK_S3_PATH_STYLE_ACCESStrue或property namezeppelin.notebook.s3.pathStyleAccess/name valuetrue/value descriptionPath Style S3 bucket access enabled for notebook repo/description /property源码中通过S3ClientOptions.builder().setPathStyleAccess(...)生效见 S3NotebookRepo.java。其它可选 S3 配置zeppelin-site.xml.template中还提供了几个高级选项均以注释形式存在配置项默认值说明zeppelin.notebook.s3.endpoints3.amazonaws.comS3 endpoint可指向 S3 兼容服务zeppelin.notebook.s3.timeout120000S3 请求超时毫秒zeppelin.notebook.s3.signerOverride无覆盖 AWS 请求签名算法如S3SignerType其中signerOverride在 S3NotebookRepo.java 中被写入ClientConfiguration.setSignerOverride(...)。Azure 存储AzureNotebookRepo使用AzureNotebookRepo可将笔记存入 Azure 文件共享。首先在zeppelin-site.xml中配置连接字符串与共享名property namezeppelin.notebook.azure.connectionString/name valueDefaultEndpointsProtocolhttps;AccountNameaccountName;AccountKeyaccountKey/value descriptionAzure account credentials/description /property property namezeppelin.notebook.azure.share/name valuezeppelin/value descriptionshare name for notebook storage/description /property随后启用AzureNotebookRepo注释掉 Git 默认项property namezeppelin.notebook.storage/name valueorg.apache.zeppelin.notebook.repo.AzureNotebookRepo/value descriptionnotebook persistence layer implementation/description /property若希望本地 Git 存储与 Azure 存储同时使用改为逗号分隔的双存储配置property namezeppelin.notebook.storage/name valueorg.apache.zeppelin.notebook.repo.GitNotebookRepo, apache.zeppelin.notebook.repo.AzureNotebookRepo/value descriptionnotebook persistence layer implementation/description /property可选地还可以指定 Azure 目录结构中的用户名层级property namezeppelin.notebook.azure.user/name valueuser/value descriptionoptional user name for Azure folder structure/description /property实现类位于 AzureNotebookRepo.java属于独立的 notebookrepo 插件模块。Google Cloud Storage 存储GCSNotebookRepoGCSNotebookRepo使用Application Default CredentialsADC与 GCS 通信无需在配置中硬编码密钥。基础配置首先指定 GCS 存储路径property namezeppelin.notebook.gcs.dir/name value/value description A GCS path in the form gs://bucketname/path/to/dir. Notes are stored at {zeppelin.notebook.gcs.dir}/{notebook-name}_{notebook-id}.zpln /description /property笔记文件命名规则为{zeppelin.notebook.gcs.dir}/{notebook-name}_{notebook-id}.zpln。随后启用GCSNotebookRepoproperty namezeppelin.notebook.storage/name valueorg.apache.zeppelin.notebook.repo.GCSNotebookRepo/value descriptionnotebook persistence layer implementation/description /property并注释默认的GitNotebookRepo。若想同时使用本地 Git 存储与 GCSproperty namezeppelin.notebook.storage/name valueorg.apache.zeppelin.notebook.repo.GitNotebookRepo,org.apache.zeppelin.notebook.repo.GCSNotebookRepo/value descriptionnotebook persistence layer implementation/description /propertyGoogle Cloud API 认证注意在 Google App Engine、Google Cloud Shell 与 Google Compute Engine 上运行时若使用内置的默认服务账号以下步骤可以省略。方式一gcloud application-default 登录以运行 Zeppelin 守护进程的用户身份执行gcloud auth application-default login也可以通过--scopes限制访问范围例如只开放 Cloud Storage 与 BigQuery。方式二服务账号 JSON 密钥文件进入 Google Cloud Console 的 Service Accounts 页面点击CREATE SERVICE ACCOUNT至少授予Storage - Storage Object Admin角色——注意这与Storage Admin不同若同时使用 BigQuery Interpreter需额外添加Bigquery - Bigquery Data Viewer与BigQuery User等权限命名服务账号勾选 Furnish a new private key 下载.json密钥文件将文件移动到合适位置如/path/to/my/key.json并确保运行 Zeppelin 守护进程的用户至少可读。若希望该文件成为访问 Google 服务的默认凭据在zeppelin-env.sh中设置export GOOGLE_APPLICATION_CREDENTIALS/path/to/my/key.json若只想为 GCS 指定专用密钥不改变默认凭据在zeppelin-site.xml中设置property namezeppelin.notebook.google.credentialsJsonFilePath/name valuepath/to/key.json/value description Path to GCS credential key file for authentication with Google Storage. /description /property阿里云 OSS 存储OSSNotebookRepoOSSNotebookRepo将笔记存储在阿里云 OSS 中目录结构为oss://bucket_name/{noteboo_dir}/note_path在zeppelin-site.xml中配置以下 OSS 属性property namezeppelin.notebook.oss.bucket/name valuezeppelin/value descriptionbucket name for notebook storage/description /property property namezeppelin.notebook.oss.endpoint/name valuehttp://oss-cn-hangzhou.aliyuncs.com/value descriptionendpoint for oss bucket/description /property property namezeppelin.notebook.oss.accesskeyid/name value/value descriptionAccess key id for your OSS account/description /property property namezeppelin.notebook.oss.accesskeysecret/name value/value descriptionAccess key secret for your OSS account/description /property property namezeppelin.notebook.oss.version.max/name value30/value description Max num of note versions in OSSNoteBookRepo. Its not mandatory, the default value is 30. A value of 0 means that version control in OSSNoteBookRepo is disabled. /description /property其中zeppelin.notebook.oss.version.max控制 OSS 中保留的笔记版本数默认 30设为0表示关闭版本控制。accesskeyid/accesskeysecret与 OSS bucket 默认值zeppelin、endpoint 默认值http://oss-cn-hangzhou.aliyuncs.com均在 ZeppelinConfiguration.java 中有对应默认值定义。启用实现property namezeppelin.notebook.storage/name valueorg.apache.zeppelin.notebook.repo.OSSNotebookRepo/value descriptionnotebook persistence layer implementation/description /property实现类位于 OSSNotebookRepo.java通过RemoteStorageOperator抽象操作远程存储S3 兼容接口并配套 RevisionsInfo.java 管理版本信息。MongoDB 存储MongoNotebookRepo为什么选择 MongoDB文档给出两点核心理由高可用HA通过副本集replica set实现存储与服务器分离笔记数据与 Zeppelin 进程解耦便于独立扩缩容与运维。启用方式方法一编辑zeppelin-env.sh在$ZEPPELIN_HOME/conf/zeppelin-env.sh中加入export ZEPPELIN_NOTEBOOK_STORAGEorg.apache.zeppelin.notebook.repo.MongoNotebookRepo注意MongoDB 连接 URI 的默认值是mongodb://localhost。方法二编辑zeppelin-site.xml取消注释property namezeppelin.notebook.storage/name valueorg.apache.zeppelin.notebook.repo.MongoNotebookRepo/value descriptionnotebook persistence layer implementation/description /property并注释默认的 Git 存储property namezeppelin.notebook.storage/name valueorg.apache.zeppelin.notebook.repo.GitNotebookRepo/value descriptionversioned notebook persistence layer implementation/description /property可配置选项在zeppelin-env.sh中可配置环境变量对应 XML 配置项说明默认值ZEPPELIN_NOTEBOOK_MONGO_URIzeppelin.notebook.mongo.uriMongoDB 连接 URImongodb://localhostZEPPELIN_NOTEBOOK_MONGO_DATABASEzeppelin.notebook.mongo.database数据库名zeppelinZEPPELIN_NOTEBOOK_MONGO_COLLECTIONzeppelin.notebook.mongo.collection集合名notesZEPPELIN_NOTEBOOK_MONGO_AUTOIMPORTzeppelin.notebook.mongo.autoimport启动时是否自动导入本地笔记false这些默认值同样定义在 ZeppelinConfiguration.java 中。示例配置zeppelin-env.shexport ZEPPELIN_NOTEBOOK_MONGO_URImongodb://db1.example.com:27017 export ZEPPELIN_NOTEBOOK_MONGO_DATABASEmyfancy export ZEPPELIN_NOTEBOOK_MONGO_COLLECTIONnotebook export ZEPPELIN_NOTEBOOK_MONGO_AUTOIMPORTtrue自动导入本地笔记将ZEPPELIN_NOTEBOOK_MONGO_AUTOIMPORT设为true默认false后Zeppelin 守护进程启动时会自动导入本地笔记方便从本地文件系统迁移到 MongoDB。已在集合中存在的笔记 ID 不会被重复导入。实现类 MongoNotebookRepo.java 还配套实现了AutoLock/AutoReadWriteLock锁机制以在多线程访问 MongoDB 时保证读写的线程安全。GitHub 远程跟踪GitHubNotebookRepoGitHubNotebookRepo是GitNotebookRepo的子类把本地 Git 仓库与任意支持用户名密码token鉴权的远程 Git 仓库打通实现笔记的自动 pull/push。从 GitHubNotebookRepo.java 的注释可以确认其同步策略初始化时与每次 push 前从远程仓库 pull 更新到本地每次 commit保存笔记后将本地变更 push 到远程仓库。因此它不仅可以对接 GitHub也可以对接 GitLab、Gitee 等接受用户名密码鉴权的远程 Git 服务。在zeppelin-site.xml中启用以下属性property namezeppelin.notebook.git.remote.url/name value/value descriptionremote Git repository URL/description /property property namezeppelin.notebook.git.remote.username/name valuetoken/value descriptionremote Git repository username/description /property property namezeppelin.notebook.git.remote.access-token/name value/value descriptionremote Git repository password/description /property property namezeppelin.notebook.git.remote.origin/name valueorigin/value descriptionGit repository remote/description /property然后将存储切换为GitHubNotebookRepoproperty namezeppelin.notebook.storage/name valueorg.apache.zeppelin.notebook.repo.GitHubNotebookRepo/value /property关于 access tokenGitHub 的 Personal Access Token 需要在 GitHub 个人设置页面的 Tokens 部分创建文档原链接指向https://github.com/settings/tokens。通常username字段填token、access-token字段填入实际的 token 值。源码通过 jgit 的UsernamePasswordCredentialsProvider完成远程鉴权见 GitHubNotebookRepo.java。多存储并存与同步行为小结综合上述内容多存储配置存在两条关键规则逗号分隔类名zeppelin.notebook.storage可同时列出多个实现类默认情况下只有前两个会自动双向同步单向同步开关zeppelin.notebook.one.way.sync默认false决定是否把第一个存储作为唯一数据源仅在必要时开启以避免双向同步带来的冲突与冗余写入。常见的生产组合模式包括本地 Git 远程 GitHub本地享有版本历史远程提供容灾与多端访问本地 Git GCS/Azure/OSS本地开发便利云端持久化保障共享与备份仅 Hadoop 文件系统HDFS多 Zeppelin 实例共享同一份笔记适合集群化部署。所有实现类均实现了统一的NotebookRepo抽象接口并被NotebookRepoSync统一调度因此无论选择哪种存储笔记本的创建、保存、版本回滚等对外行为保持一致——这也是 Zeppelin 存储层可插拔设计的核心价值所在。如需进一步了解相关配置模板的完整内容可参考 zeppelin-site.xml.template 与 zeppelin-env.sh.template。赞分享数据分析数据可视化大数据后端前端任务调度【免费下载链接】zeppelinWeb-based notebook that enables>项目地址https://gitcode.com/gh_mirrors/zeppe/zeppelin点击查看免费下载相关推荐Quickwit 存储配置完全指南S3 / Azure / GCS / 本地文件与存储 URI 协议Quickwit 存储配置完全指南S3 / Azure / GCS / 本地文件与存储 URI 协议 本篇技术指南系统讲解 Quickwit 的存储层配置从搜索引擎可观测性日志分析链路追踪后端全文检索Deep Lake 存储选项与云存储认证完整指南本地 / AWS S3 / Azure / GCSDeep Lake 存储选项与云存储认证完整指南本地 / AWS S3 / Azure / GCS 导读 Deep LakeDeeplake作为面向 A数据库向量数据库数据湖人工智能RAGApache DolphinScheduler 资源中心存储配置指南从本地文件系统到 S3 / OSS / OBS 云存储Apache DolphinScheduler 资源中心存储配置指南从本地文件系统到 S3 / OSS / OBS 云存储 导读 Apache Dolphin任务调度大数据后端前端上一篇Label Studio如何重构数据标注工作流技术架构与工程实践深度解析下一篇Label Studio告别数据标注的混乱让AI训练数据管理变得简单创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考