新闻详情

新闻详情

首页 / 资讯中心 / 详情

Apache Druid 深度存储扩展:基于 Rackspace Cloud Files 的完整接入与配置指南

发布时间:2026/11/12 22:49:48来源:尧图网络
Apache Druid 深度存储扩展:基于 Rackspace Cloud Files 的完整接入与配置指南
数据库OLAP大数据后端【免费下载链接】druidApache Druid: a high performance real-time analytics database.项目地址https://gitcode.com/gh_mirrors/druid6/druid点击查看免费下载本文基于 Apache Druid 官方文档与仓库源码系统讲解如何将 Rackspace Cloud Files 对象存储接入 Druid 作为深度存储Deep Storage。你将掌握druid-cloudfiles-extensions扩展的加载方式、全部 10 个配置参数的含义与默认值、Segment 推送与拉取的底层实现原理以及如何通过源码与测试验证配置的正确性从而在生产集群中稳定落地 Cloud Files 存储方案。一、扩展概述与适用场景Rackspace Cloud Files 是 Rackspace 提供的对象存储服务。在 Druid 的架构中深度存储负责永久保存已索引的 Segment 文件是 Historical 节点加载数据、实现无状态扩容与数据冗余的关键组件详见 深度存储设计。当集群运行在 Rackspace 基础设施上、或已有 Cloud Files 存储资产时即可通过社区贡献扩展druid-cloudfiles-extensions将 Segment 推送至 Cloud Files并在需要时拉取回来。该扩展位于仓库的 extensions-contrib/cloudfiles-extensions 目录其 Maven 坐标为org.apache.druid.extensions.contrib:druid-cloudfiles-extensions见 pom.xml。底层依赖 Apache jclouds 2.6.0 的 Rackspace Cloud Files 驱动US/UK 两个 provider 均被打包见 pom.xml通过 jclouds 统一的对象存储 API 与 Cloud Files 交互。说明该扩展属于extensions-contrib社区贡献层级与extensions-core中的官方核心扩展如 hdfs-storage、s3-extensions相比其支持与维护力度由社区贡献者决定接入生产环境前建议先做充分验证。二、加载扩展druid.extensions.loadList 配置使用该扩展的第一步是让 Druid 进程在启动时加载它。官方文档要求将druid-cloudfiles-extensions加入扩展加载列表加载扩展的通用方式。在common.runtime.properties或通过-D启动参数中配置druid.extensions.loadList[druid-cloudfiles-extensions]Druid 的扩展机制会扫描druid.extensions.directory默认extensions目录与druid.extensions.hadoopDependenciesDir默认hadoop-dependencies目录中解压好的扩展包并根据loadList决定加载哪些扩展见 extensions.md 中的示例。因此你还需要把构建好的扩展分发到每个 Druid 节点的扩展目录中。从源码看扩展的加载入口是 CloudFilesStorageDruidModule.java它实现了DruidModule接口在configure()中完成两件事将druid.storage前缀的配置绑定到CloudFilesDataSegmentPusherConfig对应region、container、basePath、operationMaxRetries将druid.cloudfiles前缀的配置绑定到CloudFilesAccountConfig对应userName、apiKey、provider、useServiceNet。同时通过Binders.dataSegmentPusherBinder(binder).addBinding(SCHEME)将 schemecloudfiles注册到 Druid 的 DataSegmentPusher 绑定器使druid.storage.typecloudfiles能正确路由到本扩展的推送实现。三、深度存储完整配置清单启用扩展后需要在配置文件中设置深度存储相关属性。下表完整列出官方文档给出的全部配置项、取值范围与默认值属性可选值说明默认值druid.storage.typecloudfiles指定深度存储类型为 Cloud Files。必须设置druid.storage.regionRackspace Cloud Files 所在区域region。必须设置druid.storage.containerRackspace Cloud Files 容器container名称即对象存储桶。必须设置druid.storage.basePath容器内使用的基准路径base pathSegment 对象将存放在该前缀之下。必须设置druid.storage.operationMaxRetriesRackspace 操作在放弃前最多尝试的次数。10druid.cloudfiles.userNameRackspace Cloud 用户名。必须设置druid.cloudfiles.apiKeyRackspace Cloud API 密钥。必须设置druid.cloudfiles.providerrackspace-cloudfiles-us、rackspace-cloudfiles-uk依据区域选择的 provider 名称。必须设置druid.cloudfiles.useServiceNettrue、false是否使用 Rackspace 内部服务网络service net访问 Cloud Files。true3.1 一份可直接套用的完整配置示例结合上表与源码中的属性绑定方式CloudFilesAccountConfig.java、CloudFilesDataSegmentPusherConfig.java一个完整的common.runtime.properties片段如下# 扩展加载 druid.extensions.loadList[druid-cloudfiles-extensions] # 深度存储类型与位置 druid.storage.typecloudfiles druid.storage.regionDFW druid.storage.containermy-druid-segments druid.storage.basePathdruid/segments druid.storage.operationMaxRetries10 # Cloud Files 账号认证与网络 druid.cloudfiles.userNamemy-rackspace-username druid.cloudfiles.apiKeymy-rackspace-api-key druid.cloudfiles.providerrackspace-cloudfiles-us druid.cloudfiles.useServiceNettrue3.2 参数细节与底层含义必填参数的校验。从源码可以看到region、container、basePath三个属性在 getter 中通过Preconditions.checkNotNull强制非空CloudFilesDataSegmentPusherConfig.javaprovider、userName、apiKey则通过NotNull注解在启动时校验CloudFilesAccountConfig.java。任一必填项缺失Druid 都会在启动阶段直接失败而不是运行期才暴露问题。druid.cloudfiles.provider与区域的关系。provider 取值只有两个rackspace-cloudfiles-us美国区域与rackspace-cloudfiles-uk英国区域。从 CloudFilesStorageDruidModule.java 可以看到模块启动时会向 jclouds 的ProviderRegistry注册这两个 provider然后根据配置的 provider 名构建CloudFilesApi。需要注意druid.storage.region与provider是两个独立维度——region决定对象落在哪个区域端点provider决定使用哪套认证与目录服务Keystone元数据二者需要相互匹配。druid.cloudfiles.useServiceNet的默认值。官方文档与源码默认值均为trueCloudFilesAccountConfig.java。当为true时模块会额外注入 jclouds 的InternalUrlModule让 API 走 Rackspace 内部服务网络为false时仅使用公共网络CloudFilesStorageDruidModule.java。建议当 Druid 集群与 Rackspace Cloud Files 部署在同一数据中心内时保持true可避免公网流量费用并降低延迟跨数据中心或公网访问时改为false。druid.storage.operationMaxRetries。默认10控制每次 Cloud Files 操作失败后的重试上限。该参数在 CloudFilesUtils.java 中被传入 Druid 的通用重试工具RetryUtils.retry只对可恢复的 IO 异常IOException及其 cause 链中的 IO 异常进行重试CLOUDFILESRETRY 谓词非 IO 类错误不会盲目重试。druid.storage.basePath的路径拼接规则。从 CloudFilesUtils.buildCloudFilesPath 可以看出最终对象路径由basePath / 存储目录名构成。同时注意其中的一个实现细节当basePath非空且以/结尾时末尾的/会被截掉取lastIndexOf(/)之前的部分。因此建议basePath写成不带尾部斜杠的形式如druid/segments避免路径中出现双斜杠。四、Segment 推送与拉取的源码级原理理解扩展的完整数据流有助于定位问题与评估风险。整个扩展围绕 Druid 的两大接口展开DataSegmentPusher索引任务产出 Segment 后推送与LoadSpecHistorical 节点按需拉取。4.1 推送侧CloudFilesDataSegmentPusher索引服务Peon / Indexer在完成 Segment 构建后会调用实现了 DataSegmentPusher 接口的推送器。本扩展的实现是 CloudFilesDataSegmentPusher.java其pushToPath流程如下将 Segment 目录用CompressionUtils.zip压缩为临时index.zip通过CloudFilesObjectApiProxy.put把 zip 上传到basePath/存储目录名/index.zip将 Segment 描述符descriptorJSON 序列化后上传到同一路径下组装返回新的DataSegment更新 size、写入loadSpectype 为cloudfiles含 region/container/path、写入二进制版本号整个过程包裹在retryCloudFilesOperation中失败按operationMaxRetries重试最后无论成败都会清理本地临时文件。其中makeLoadSpec生成的 loadSpec 结构CloudFilesDataSegmentPusher.java为{ type: cloudfiles, region: region, container: container, path: 对象路径 }该 loadSpec 会写入元数据存储metadata store成为后续 Historical 节点拉取该 Segment 的依据。4.2 拉取侧CloudFilesLoadSpec 与 CloudFilesDataSegmentPullerHistorical 节点根据 Segment 元数据中的 loadSpec 反序列化得到 CloudFilesLoadSpec.java。它通过JsonTypeName(cloudfiles)与推送侧 scheme 对应并在构造时通过JacksonInject注入CloudFilesDataSegmentPuller。loadSegment(file)会调用 puller 的getSegmentFiles完成以下工作CloudFilesDataSegmentPuller.java用 region/container 构建CloudFilesObjectApiProxy包装为CloudFilesByteSource字节源通过CompressionUtils.unzip将远端 zip 解压到本地 Segment 目录解压过程中若发生 IO 异常会按CLOUDFILESRETRY谓词重试CloudFilesUtils.CLOUDFILESRETRY失败时清理输出目录并抛出SegmentLoadingException成功则返回拷贝结果。值得注意的细节是 CloudFilesByteSource.java 支持从指定偏移量开始读取openStream(long start)通过 jcloudsGetOptions.startAt实现这为解压过程的随机读取访问提供了支持对象读取在CloudFilesObjectApiProxy.get中实现CloudFilesObjectApiProxy.java。4.3 测试用例验证仓库自带的单元测试 CloudFilesDataSegmentPusherTest.java 用 Mockito 模拟了CloudFilesApi与ObjectApi验证了以region/container/basePath构造 pusher 后push能正常返回 size 不变的 Segment推送过程至少调用一次objectApi.put即 zip 与 descriptor 均已上传api.getObjectApi被正确调用region/container 被透传。此外 CloudFilesByteSourceTest.java 与 CloudFilesObjectApiProxyTest.java 分别覆盖了字节源读取与对象代理的 get/put/exists 行为可作为阅读实现的辅助参考。五、部署与验证要点5.1 构建与分发扩展由于扩展基于 jclouds构建时需确保本模块被打包进扩展目录。在仓库根目录执行mvn -pl extensions-contrib/cloudfiles-extensions -am package -DskipTests将构建产物含依赖的 jar拷贝到每个节点的druid.extensions.directory目录默认extensions下并确认目录结构与druid-cloudfiles-extensions名称一致loadList才能正确命中。5.2 上线前检查清单网络连通性若useServiceNettrue确认 Druid 节点可访问 Rackspace 内部服务网络否则确认公网可达。容器与权限确认druid.storage.container指定的容器已存在或账号有自动创建权限userName/apiKey具备读写权限。region 与 provider 匹配美国区域使用rackspace-cloudfiles-us英国区域使用rackspace-cloudfiles-ukdruid.storage.region与之一致。basePath 命名采用无尾部斜杠的层级前缀便于后续与其它深度存储路径区分。启动日志观察启动日志中的Building Cloud Files Api...、Cloud Files Api built.等模块日志见 CloudFilesStorageDruidModule.java确认 API 构建成功且走的是预期的网络service net 或公网。提交一个索引任务任务成功后在 Cloud Files 控制台确认容器中出现index.zip与描述符 JSON再触发 Segment 加载观察 Historical 节点日志中的Loaded %d bytes from [...]见 CloudFilesDataSegmentPuller.java确认拉取链路正常。六、延伸阅读深度存储在整个 Druid 架构中的位置与职责设计文档、架构总览扩展加载机制与目录规范extensions.md该扩展的官方说明文档cloudfiles.md本扩展全部源码与测试extensions-contrib/cloudfiles-extensions赞分享数据库OLAP大数据后端【免费下载链接】druidApache Druid: a high performance real-time analytics database.项目地址https://gitcode.com/gh_mirrors/druid6/druid点击查看免费下载相关推荐Apache Druid 使用 Rackspace Cloud Files 作为深度存储与数据源cloudfiles 扩展完整指南Apache Druid 使用 Rackspace Cloud Files 作为深度存储与数据源cloudfiles 扩展完整指南 导读 druid clo数据库数据分析OLAP大数据实时分析数据仓库后端Apache Druid 接入 Kerberized Hadoop 作为 HDFS 深度存储完整配置指南Apache Druid 接入 Kerberized Hadoop 作为 HDFS 深度存储完整配置指南 本教程面向需要将 Apache Druid 集群接入企数据库OLAP大数据后端5分钟快速上手全网资源下载神器res-downloader使用全攻略5分钟快速上手全网资源下载神器res downloader使用全攻略 你是否经常遇到这样的情况在微信视频号看到精彩的短视频却无法保存在抖音发现有趣的视频想数据库OLAP大数据后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/11 13:52:51

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/10 19:42:40

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/12 9:50:02

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/12 9:25:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/12 15:57:44

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/10 17:14:10

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉