ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

在 Docker 上运行 AlluxioFuse:单机部署、性能调优与 Kubernetes 深度学习实践

在 Docker 上运行 AlluxioFuse:单机部署、性能调优与 Kubernetes 深度学习实践 存储分布式文件系统缓存大数据【免费下载链接】alluxioAlluxio, data orchestration for analytics and machine learning in the cloud项目地址https://gitcode.com/gh_mirrors/al/alluxio点击查看免费下载导读本文基于 Alluxio 仓库的 docs/cn/deploy/Running-AlluxioFuse-On-Docker.md系统讲解基于 JNIJava Native Interface实验版 AlluxioFuse 的完整落地路径先用 Docker 在单机快速拉起 master/worker/fuse 三件套并验证挂载再从 FUSE 层与 Alluxio 层两个维度展开参数级调优最后给出阿里云 Kubernetes 四机八卡深度学习训练环境的完整部署配置与优化实践。读者完成后将掌握 AlluxioFuse 与 JNR/JNI 实现的差异、--fuse-opts各参数的语义与取舍、client 端缓存机制以及一套可直接套用的 K8s OSS 深度学习 I/O 加速方案。概述为什么要用实验版 AlluxioFuse本指南面向的是基于JNIJava Native Interface的实验版 AlluxioFuse其目标是优化机器学习任务在云端的 I/O 性能。与默认 Alluxio 发行版中基于JNR实现的 AlluxioFuse 相比该实验版目前仍存在一些局限社区正在持续解决兼容性、稳定性与速度问题。需要特别说明的是该实验版 AlluxioFuse 当前仅通过容器镜像交付不随常规发行版二进制发布。什么是 FUSE 和 AlluxioFuseFUSEFilesystem in Userspace用户空间文件系统是面向类 Unix 系统的软件接口它使普通用户无需修改内核代码就能创建自己的文件系统。FUSE 由内核提供的内核模块与用户态的 libfuse 库 两部分组成libfuse 提供了一套标准的文件系统接口。Alluxio 基于这套文件系统接口实现了简单易用的AlluxioFuse使 Alluxio 具备 POSIX 兼容的本地文件系统能力从而扩展到更多使用场景。由于 libfuse 基于 C 语言、Alluxio 基于 Java需要采用JNI或JNR等桥接技术让两者对接JNRJava Native RuntimeAlluxio 发行版默认采用的动态调用方式JNI本实验版直接编写 JNI 层来对接 Alluxio 与 libfuse可支持kernel_cache等内核页缓存模式但当前不支持写入、只支持读取。从仓库源码结构可以印证这一点JNI 版本的核心实现位于 integration/fuse/src/main/java/alluxio/fuse/AlluxioJniFuseFileSystem.java继承alluxio.jnifuse.AbstractFuseFileSystem实现 FUSE 回调而 JNR 版本为 AlluxioJnrFuseFileSystem.java底层 JNI 绑定与原生代码分别位于 integration/jnifuse/fs 与 integration/jnifuse/native 目录。在 Docker 上单机部署 AlluxioFuse前提条件已安装 Docker下载预生成的 Alluxio Docker 镜像。Alluxio master 和 worker 使用第一个镜像而 Alluxio fuse 使用第二个镜像——fuse 运行环境额外依赖libfuse库因此与 master 等组件使用不同的镜像REPOSITORYTAGregistry.cn-huhehaote.aliyuncs.com/alluxio/alluxio2.3.0-SNAPSHOT-b7629dcregistry.cn-huhehaote.aliyuncs.com/alluxio/alluxio-fuse2.3.0-SNAPSHOT-b7629dc容器镜像的启动逻辑可在 integration/docker/entrypoint.sh 中查看master、worker、fuse等命令分别对应不同的进程启动路径其中fuse命令会通过--fuse-opts透传 FUSE 挂载参数如kernel_cacheworker命令会读取ALLUXIO_RAM_FOLDER定位 ramdisk。设置底层存储系统在主机上创建文件夹underStorage作为 Alluxio 的底层存储系统UFS$ mkdir underStorage设置 RAMFS在主机上创建文件夹/mnt/ramdisk并挂载为ramfs注意添加读写权限$ sudo mkdir /mnt/ramdisk $ sudo mount -t ramfs -o size1G ramfs /mnt/ramdisk $ sudo chmod aw /mnt/ramdisk本例中 ramfs 大小设置为1G也可以根据实验环境调整。此后 worker 配置中交给 Worker 管理的堆外内存大小必须与其一致。启动 Alluxio master在主机上启动alluxio-master$ docker run -d \ --namealluxio-master \ -u0 \ --nethost \ -v $PWD/underStorage:/opt/alluxio/underFSStorage \ -e ALLUXIO_JAVA_OPTS-Dalluxio.master.hostnamelocalhost \ -Dalluxio.master.mount.table.root.ufs/opt/alluxio/underFSStorage \ registry.cn-huhehaote.aliyuncs.com/alluxio/alluxio:2.3.0-SNAPSHOT-b7629dc master命令参数说明-u0以root身份运行容器--nethost容器共享主机的 network namespace使localhost互通-v $PWD/underStorage:/opt/alluxio/underFSStorage宿主机与容器共享底层存储文件夹-e ALLUXIO_JAVA_OPTS设置 Alluxio 配置项其中alluxio.master.mount.table.root.ufs指定底层存储系统文件夹。启动 Alluxio worker在主机上启动alluxio-worker$ docker run -d \ --namealluxio-worker \ -u0 \ --nethost \ --shm-size1G \ -v /mnt/ramdisk:/opt/ramdisk \ -v $PWD/underStorage:/opt/alluxio/underFSStorage \ -e ALLUXIO_JAVA_OPTS-Dalluxio.worker.hostnamelocalhost \ -Dalluxio.master.hostnamelocalhost \ -Dalluxio.worker.ramdisk.size1G \ -Dalluxio.master.mount.table.root.ufs/opt/alluxio/underFSStorage \ -e ALLUXIO_RAM_FOLDER/opt/ramdisk \ registry.cn-huhehaote.aliyuncs.com/alluxio/alluxio:2.3.0-SNAPSHOT-b7629dc worker命令参数说明--shm-size1G设置容器共享内存大小需与alluxio.worker.ramdisk.size在ALLUXIO_JAVA_OPTS中设置以及主机 RAMFS 的大小1G保持一致-v /mnt/ramdisk:/opt/ramdisk与容器共享主机的 ramdisk-e ALLUXIO_RAM_FOLDER/opt/ramdisk通知 worker 如何定位 ramdisk。在 entrypoint.sh 的set_ram_folder_if_needed中可以看到若顶层存储层为 MEM 且未显式配置alluxio.worker.tieredstore.level0.dirs.path容器默认将 ram folder 指向/dev/shm其大小由--shm-size决定——这与文档中“大小保持一致”的要求完全对应。设置 AlluxioFuse 挂载路径在主机上创建文件夹/mnt/alluxio-fuseAlluxioFuse 会将数据集挂载到该路径$ mkdir /mnt/alluxio-fuse $ sudo chmod ar /mnt/alluxio-fuse启动 AlluxioFuse在宿主机上启动alluxio-fuse。注意容器挂载路径是/mnt而不是/mnt/alluxio-fuse$ docker run -d \ --namealluxio-fuse \ -u0 \ --nethost \ -v /mnt/ramdisk:/opt/ramdisk \ -v /mnt:/mnt:rshared \ --cap-add SYS_ADMIN \ --device /dev/fuse \ registry.cn-huhehaote.aliyuncs.com/alluxio/alluxio-fuse:2.3.0-SNAPSHOT-b7629dc fuse \ --fuse-optskernel_cache命令参数说明-v /mnt:/mnt:rshared容器以rshared方式共享宿主机的/mnt目录Alluxio 中的数据将挂载到/mnt/alluxio-fuse--cap-add SYS_ADMIN赋予容器SYS_ADMIN权限FUSE 挂载所需--device /dev/fuse容器共享宿主机的/dev/fuse设备--fuse-optskernel_cache设置 FUSE 挂载参数kernel_cache表示使用内核 page cache。测试 Alluxio 集群在alluxio-master容器中向 Alluxio 添加文件$ docker exec -it alluxio-master bash $ alluxio fs copyFromLocal LICENSE /查看alluxio-fuse容器的挂载点/mnt/alluxio-fuse$ ls /mnt/alluxio-fuse/ LICENSE能在主机上通过挂载点直接访问 Alluxio 中的文件说明 Alluxio 集群已成功部署——这也验证了 FUSE 挂载、RAMFS 共享、master/worker 协调等整条链路是通的。AlluxioFuse 调优在 FUSE 层和 Alluxio 层都能进一步调优下面分别介绍。FUSE 层优化配置项以下参数通过--fuse-opts即--fuse-optsopt1,opt2,...传入多个参数以逗号分隔配置项默认值调优建议描述direct_io—不要设置开启direct_io后内核不会主动缓存和预读当 I/O 负载压力特别高时direct_io模式下可能存在稳定性问题。kernel_cache—建议启用开启后使用更多的系统缓存同时提升文件读取速度。max_readN131072使用默认值FUSE 单次 request 能读取文件的大小上限。在内核被设置为 32 个 pages在 i386 上为 131072128 KB。attr_timeoutN1.07200文件属性struct inode被缓存的时间秒。增大可减少 FUSE 文件元数据操作提升性能。entry_timeoutN1.07200文件项struct dentry被缓存的时间秒。增大可减少 FUSE 文件元数据操作提升性能。max_idle_threads10视任务而定libfuse 用户态 daemon 线程的最大闲置数量。高并发下该值过小会导致 FUSE 频繁创建/销毁线程建议视用户进程 I/O 活跃度配置。注意libfuse 2 并未提供此参数在 alluxio-fuse 容器镜像中修改了 libfuse 代码通过环境变量方式传入。在 FuseOptions.create() 中可以看到这些参数的底层处理逻辑当使用 libfuse 2 时会自动补充big_writes将单次写入请求上限从 4k 提升到 128kJNR 模式下会自动追加direct_io而 libfuse 3 不支持direct_io若显式传入会打印错误日志并移除对于 libfuse 3若未指定max_idle_threads会自动追加max_idle_threads64。此外 UpdateChecker.java 中会检查挂载选项是否包含direct_io以决定是否执行更新检查这也是文档建议“不要设置direct_io”的佐证。AlluxioFuse 相关优化配置项除通用调优手段外针对 AlluxioFuse 还增加了专用配置项优化主要分为两部分jnifuse 与 client 端缓存。jnifuse初始的 Alluxio 基于 jnr-fuse 实现 AlluxioFuse。为解决性能和稳定性问题社区基于jni-fuse实现了AlluxioJniFuse可支持kernel_cache模式。通过设置alluxio.fuse.jnifuse.enabled在两者间切换建议设置为true。注意目前 AlluxioJniFuse 正处于实验阶段不支持写入只支持读取。属性名默认值调优建议描述alluxio.fuse.jnifuse.enabledtruetrue使用 jnifusetrue否则使用 jnrfusefalse。该属性在 PropertyKey.java 中定义为FUSE_JNIFUSE_ENABLED。需要留意的是FuseOptions.create() 中还有一个约束当alluxio.fuse.jnifuse.enabledfalse即使用 JNR且 libfuse 版本为 3 时会直接抛出InvalidArgumentRuntimeException因为 JNR-FUSE 无法与 libfuse 3 共存。client 端缓存在高并发和kernel_cache模式下内核的 prefetch 机制与 FUSE daemon 的多线程并发访问可能破坏文件的顺序读特性导致 Alluxio 产生频繁的 seek gRPC 请求大幅降低性能。启用 client 端缓存可一定程度解决这个问题。配置项alluxio.user.client.cache.enabled决定是否启用 client 端缓存建议仅在 I/O 压力特别大的情况下启用。若启用还有其他配套参数可调cache 的类型、存储目录、页大小和容量上限。在深度学习任务中比较通用的配置是cache 类型设为MEMORY、页大小设为2MB、容量上限设为2000MB然后通过观测 cache 命中率从 alluxio-fuse 日志查看和 JVM 的 GC 情况来适当调整页大小与 cache 容量。属性名默认值描述alluxio.user.client.cache.enabledfalse是否启用 client 端 cache。因为会产生额外资源消耗建议仅在 I/O 压力特别高的场景下启用。alluxio.user.client.cache.store.typeLOCALclient 端 cache 的页存储类型可选{LOCAL, MEMORY, ROCKS}。LOCAL 表示所有页存储在一个目录由alluxio.user.client.cache.dir指定ROCKS 使用 rocksDB 持久化数据MEMORY 将所有页存储在 Java 堆内存中。推荐使用 MEMORY。alluxio.user.client.cache.dir/tmp/alluxio_cacheclient 端 cache 存储目录LOCAL 和 ROCKS 下有效。一般将该目录挂载为 ramfs提升 cache 访问速度。alluxio.user.client.cache.page.size1MBclient 端 cache 的页大小。调优时可优先尝试 2MB、4MB 和 8MB。页大小过大可能导致 JVM 频繁 GC太小则 cache 命中率过低。建议通过观察 GC 情况和命中率调整。alluxio.user.client.cache.size512MBclient 端 cache 的容量上限。MEMORY 模式下建议设置在 1800MB 以内。这些属性在 PropertyKey.java 中均有对应定义如USER_CLIENT_CACHE_ENABLED、USER_CLIENT_CACHE_STORE_TYPE、USER_CLIENT_CACHE_PAGE_SIZE、USER_CLIENT_CACHE_SIZE、USER_CLIENT_CACHE_DIRS等同一族还包含 async write、evictor、TTL 等更细粒度的控制项需要更细调优时可参考该族属性。应用实践在阿里云上基于 Kubernetes 集群搭建四机八卡深度学习环境在阿里云平台基于 K8s 集群搭建了 4 机八卡深度学习训练环境用于优化深度学习训练的 I/O 性能。实验环境说明硬件环境4 台 V100高配 GPU 机型一共 32 块 GPU 卡数据集ResNet-50 模型 ImageNet 数据集总大小 144GB以 TFRecord 格式存储每个约 130MB每个 GPU 的 batch_size 设置为 256数据存储数据集存储在 Aliyun OSSAlluxio 将 OSS 作为底层存储系统模型训练程序通过 AlluxioFuse 读取数据。部署流程前提条件Kubernetes 集群version 1.8helmversion 3.0Alluxio Docker 镜像由阿里云提供设置虚拟内存文件系统若设置 RAMFS 的挂载路径为/ram/alluxio则需在 Kubernetes 集群的每台机器上挂载 RAMFS$ mkdir -p /alluxio/ram $ mount -t ramfs -o size260G ramfs /alluxio/ramRAMFS 的 size 具体大小应视机器配置和训练任务需求而定。设置底层文件系统集群使用 Aliyun OSS 作为 Alluxio 的底层文件系统详细配置过程参见 OSS 底层存储配置。下载 helm-chart使用 helm 部署 Alluxio 集群前需要先下载 helm chart。本实践使用 0.14.0 版若使用其他更老版本可能存在适配问题$ wget http://kubeflow.oss-cn-beijing.aliyuncs.com/alluxio-0.14.0.tgz配置 Alluxio 集群基础版配置中至少应指定Alluxio 和 alluxio-fuse 的镜像直接使用阿里云镜像、Alluxio 的底层文件系统阿里云 OSS以及 Alluxio 的 RAMFS。下面的config.yaml是未使用任何参数优化时部署 Alluxio 集群所需的最简配置# config.yaml image: registry.cn-huhehaote.aliyuncs.com/alluxio/alluxio imageTag: 2.3.0-SNAPSHOT-b7629dc imagePullPolicy: Always properties: # set OSS endpoint fs.oss.endpoint: OSS_ENDPOINT fs.oss.accessKeyId: OSS_ACCESS_KEY_ID fs.oss.accessKeySecret: OSS_ACCESS_KEY_SECRET alluxio.master.mount.table.root.ufs: oss://OSS_BUCKET/OSS_DIRECTORY/ tieredstore: levels: - alias: MEM level: 0 type: hostPath path: /alluxio/ram fuse: enabled: true clientEnabled: true mountPath: /mnt/alluxio-fuse image: registry.cn-huhehaote.aliyuncs.com/alluxio/alluxio-fuse imageTag: 2.3.0-SNAPSHOT-b7629dc imagePullPolicy: Always args: - fuse - --fuse-optskernel_cache启动 Alluxio 集群用 helm 安装 Alluxio 集群时指定前述集群配置文件config.yaml和 helm chart 压缩包alluxio-0.14.0.tgz$ helm install alluxio -f config.yaml alluxio-0.14.0.tgz等待集群部署一定时间后查看 Kubernetes pod$ kubectl get po NAME READY STATUS RESTARTS AGE alluxio-fuse-5ttjt 1/1 Running 0 7s alluxio-fuse-6l5pf 1/1 Running 0 7s alluxio-fuse-l84lp 1/1 Running 0 7s alluxio-fuse-m7z28 1/1 Running 0 7s alluxio-master-0 2/2 Running 0 7s alluxio-worker-22m44 2/2 Running 0 7s alluxio-worker-jsqxl 2/2 Running 0 7s alluxio-worker-qp69q 2/2 Running 0 7s alluxio-worker-t6wzj 2/2 Running 0 7s在四机八卡的 Kubernetes 集群上应有 1 个 alluxio-master、4 个 alluxio-worker 和 4 个 alluxio-fuse 在运行。在集群任意一台机器上查看 alluxio-fuse 挂载路径$ ls /mnt/alluxio-fuse/ train validation可见 OSS 云端数据集已成功挂载到该机器。之后用户便可像操作本地文件一样在挂载数据集上运行深度学习等任务。配置 Alluxio 集群进阶版如果直接使用最简配置alluxio-fuse 读取性能难以满足深度学习训练需求。该实践基于这套深度学习训练环境全面优化了 Alluxio 集群配置如下所示# config.yaml image: registry.cn-huhehaote.aliyuncs.com/alluxio/alluxio imageTag: 2.3.0-SNAPSHOT-b7629dc imagePullPolicy: Always properties: alluxio.user.ufs.block.read.location.policy: alluxio.client.block.policy.LocalFirstAvoidEvictionPolicy alluxio.fuse.jnifuse.enabled: true alluxio.user.client.cache.enabled: false alluxio.user.client.cache.store.type: MEMORY alluxio.user.client.cache.dir: /alluxio/ram alluxio.user.client.cache.page.size: 8MB alluxio.user.client.cache.size: 1800MB alluxio.master.journal.log.size.bytes.max: 500MB alluxio.user.update.file.accesstime.disabled: true alluxio.user.block.worker.client.pool.min: 512 # It should be great than (120)*0.01 2GB alluxio.fuse.debug.enabled: false alluxio.web.ui.enabled: false alluxio.user.file.writetype.default: MUST_CACHE alluxio.user.block.write.location.policy.class: alluxio.client.block.policy.LocalFirstAvoidEvictionPolicy alluxio.worker.allocator.class: alluxio.worker.block.allocator.GreedyAllocator alluxio.user.block.size.bytes.default: 32MB # set OSS endpoint fs.oss.endpoint: OSS_ENDPOINT fs.oss.accessKeyId: OSS_ACCESS_KEY_ID fs.oss.accessKeySecret: OSS_ACCESS_KEY_SECRET alluxio.master.mount.table.root.ufs: oss://OSS_BUCKET/OSS_DIRECTORY/ alluxio.user.streaming.reader.chunk.size.bytes: 32MB alluxio.user.local.reader.chunk.size.bytes: 32MB alluxio.worker.network.reader.buffer.size: 32MB alluxio.worker.file.buffer.size: 320MB alluxio.job.worker.threadpool.size: 64 alluxio.user.metrics.collection.enabled: false alluxio.master.rpc.executor.max.pool.size: 10240 alluxio.master.rpc.executor.core.pool.size: 128 alluxio.master.mount.table.root.readonly: true alluxio.user.update.file.accesstime.disabled: true alluxio.user.file.passive.cache.enabled: false alluxio.user.block.avoid.eviction.policy.reserved.size.bytes: 2GB alluxio.master.journal.folder: /journal alluxio.master.journal.type: UFS alluxio.user.block.master.client.pool.gc.threshold: 2day alluxio.user.file.master.client.threads: 1024 alluxio.user.block.master.client.threads: 1024 alluxio.user.file.readtype.default: CACHE alluxio.security.stale.channel.purge.interval: 365d alluxio.user.metadata.cache.enabled: true alluxio.user.metadata.cache.expiration.time: 2day alluxio.user.metadata.cache.max.size: 1000000 alluxio.user.direct.memory.io.enabled: true alluxio.fuse.cached.paths.max: 1000000 alluxio.job.worker.threadpool.size: 164 alluxio.user.worker.list.refresh.interval: 2min alluxio.user.logging.threshold: 1000ms alluxio.fuse.logging.threshold: 1000ms alluxio.worker.block.master.client.pool.size: 1024 worker: jvmOptions: -Xmx12G -XX:UnlockExperimentalVMOptions -XX:MaxDirectMemorySize32g -XX:ActiveProcessorCount8 master: jvmOptions: -Xmx6G -XX:UnlockExperimentalVMOptions -XX:ActiveProcessorCount8 tieredstore: levels: - alias: MEM level: 0 type: hostPath path: /alluxio/ram high: 0.99 low: 0.8 fuse: image: registry.cn-huhehaote.aliyuncs.com/alluxio/alluxio-fuse imageTag: 2.3.0-SNAPSHOT-b7629dc imagePullPolicy: Always env: MAX_IDLE_THREADS: 64 SPENT_TIME: 1000 # Customize the MaxDirectMemorySize jvmOptions: -Xmx16G -Xms16G -XX:UseG1GC -XX:MaxDirectMemorySize32g -XX:UnlockExperimentalVMOptions -XX:ActiveProcessorCount24 -XX:PrintGC -XX:PrintGCDateStamps -XX:PrintGCDetails -XX:PrintGCTimeStamps shortCircuitPolicy: local mountPath: /mnt/alluxio-fuse args: - fuse - --fuse-optskernel_cache,ro,max_read131072,attr_timeout7200,entry_timeout7200对进阶版配置的要点解读FUSE 层--fuse-optskernel_cache,ro,max_read131072,attr_timeout7200,entry_timeout7200对应前述 FUSE 调优表中的建议值ro只读挂载与“JNI Fuse 当前不支持写入”的定位一致MAX_IDLE_THREADS64与SPENT_TIME1000通过容器环境变量控制 libfuse daemon 的闲置线程数libfuse 2 未提供该参数镜像内已修改 libfuse 支持。jnifuse 与 client cachealluxio.fuse.jnifuse.enabled: true启用 JNI 实现alluxio.user.client.cache.enabled: false说明在该训练规模下未启用 client 端 cache与文档“建议仅在 IO 压力特别大的情况下启用”呼应但配套参数仍以 MEMORY/8MB/1800MB 预置便于按需开启。块读写路径LocalFirstAvoidEvictionPolicy读写位置策略、MUST_CACHE写类型、32MB块大小与流式/本地读取 chunk 大小、alluxio.worker.file.buffer.size: 320MB等共同放大了顺序读吞吐。JVM 与线程池worker-Xmx12G / MaxDirectMemorySize32g、fuse-Xmx16G -Xms16G UseG1GC MaxDirectMemorySize32g并配合 master/worker/fuse 各自ActiveProcessorCount与大规模 RPC 线程池如alluxio.master.rpc.executor.max.pool.size: 10240。元数据与日志开启alluxio.user.metadata.cache.enabled2day 过期、100 万条目上限、alluxio.fuse.cached.paths.max: 1000000关闭 UI 与指标采集以减少开销。上述优化涵盖了 FUSE、JVM 和 Alluxio 三层。根据原文档的实验结论最终为深度学习训练速度带来了巨大提升在深度学习训练时间上使用 Alluxio 需要 65 分钟作为对比的云上 SSD 需要 110 分钟提升达 40%。总结与展望本文覆盖了 Alluxio 与 FUSE 的技术背景、AlluxioFuse 的应用价值、基于 Docker 镜像在单机快速部署 AlluxioFuse 的完整流程并从 FUSE 层与 Alluxio 层分别分析了调优方法最后给出了阿里云 Kubernetes 四机八卡深度学习训练环境的部署与优化实践展示了 AlluxioFuse 在云上深度学习 I/O 加速中的实际收益。值得再次强调的是文中使用的 JNI 版 AlluxioFuse 仍处于实验阶段只读、仅容器交付且存在direct_io高负载稳定性、JNRlibfuse3 不兼容等已知限制。若需在生产环境落地请先以本文的单机流程完成功能与压力验证再按进阶版配置逐步调参并通过 alluxio-fuse 日志观测 cache 命中率与 GC 情况持续迭代。延伸阅读AlluxioFuse 相关源码integration/fuseJNI Fuse 绑定与原生实现integration/jnifuseDocker 镜像入口脚本OSS 底层存储配置Alluxio 统一命名空间与缓存机制赞分享存储分布式文件系统缓存大数据【免费下载链接】alluxioAlluxio, data orchestration for analytics and machine learning in the cloud项目地址https://gitcode.com/gh_mirrors/al/alluxio点击查看免费下载相关推荐Alluxio项目实战基于Docker部署AlluxioFuse加速深度学习训练Alluxio项目实战基于Docker部署AlluxioFuse加速深度学习训练 技术背景与核心价值 在现代数据密集型应用场景中存储与计算分离架构已成为主流存储分布式文件系统缓存大数据Kubernetes 大数据实践在 Kubernetes 上运行 Spark 的三种调度模式与部署指南Kubernetes 大数据实践在 Kubernetes 上运行 Spark 的三种调度模式与部署指南 本指南围绕 kubernetes handbook 项教程云原生容器编排OpenTelemetry Java入门指南5分钟快速搭建分布式监控系统OpenTelemetry Java入门指南5分钟快速搭建分布式监控系统 OpenTelemetry Java SDK是一款强大的开源工具专为构建分布式监控运维后端上一篇Deep-Live-Cam 实时换脸一张照片替换摄像头和视频中的人脸下一篇Hibernate ORM 8.0.0.Beta1 更新深度解读JPA 4、Jakarta Data 与 API 现代化全览创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表