news 2026/9/29 3:41:39

在腾讯云EMR中部署与使用 Alluxio:内存级缓存加速与计算存储分离实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在腾讯云EMR中部署与使用 Alluxio:内存级缓存加速与计算存储分离实战指南
  • 存储
  • 分布式文件系统
  • 缓存
  • 大数据

【免费下载链接】alluxio

Alluxio, data orchestration for analytics and machine learning in the cloud

项目地址:https://gitcode.com/gh_mirrors/al/alluxio
点击查看免费下载

Alluxio 在腾讯云 EMR 中作为开箱即用的可选组件提供,用于为大数据与机器学习工作负载提供分布式内存级缓存加速、统一命名空间与简化数据管理能力。本文以腾讯云 EMR 上的 Alluxio 集成为主线,覆盖集群创建、默认配置、配置下发、基于 COS 的计算存储分离加速等完整流程,并结合当前 Alluxio 仓库中的 EMR 引导脚本与 COS 底层文件系统实现,补充源码级的部署细节与参数依据,帮助读者在腾讯云 EMR 上快速落地一套可用的 Alluxio 缓存加速环境。

概述:腾讯云 EMR 上的 Alluxio 服务

腾讯云 EMR(弹性 MapReduce)在自身的大数据集群体系中内置了开箱即用的 Alluxio 服务。对云上用户而言,这种集成主要带来三类能力:

  • 分布式内存级缓存加速:计算引擎(如 Spark、Hive、Presto/Trino)访问远端数据时,可由 Alluxio 在内存与本地存储中就近缓存,显著缩短数据读取路径;
  • 配置下发与元数据管理:通过腾讯云 EMR 控制台或 API 接口下发配置,即可快速调整多层级缓存(Tiered Storage)与元数据管理策略,无需逐节点手工修改配置;
  • 一站式监控告警:Alluxio 服务纳入 EMR 集群的监控体系,可获取进程级、指标级的一站式监控与告警能力。

从当前仓库的实现来看,Alluxio 面向云上 EMR 场景的落地并非孤立的组件安装,而是与 Hadoop、Spark、Presto 等生态深度耦合。仓库中的 integration/emr/alluxio-emr.sh 展示了一套完整的 EMR 引导(bootstrap)部署逻辑:安装 Alluxio 到/opt/alluxio、自动生成alluxio-site.properties、将 Alluxio 客户端 jar 软链进 Spark/Presto/Tez/Hadoop 的 classpath、按节点角色启动 master/worker 进程等。虽然该脚本面向 AWS EMR,但其存储分层、属性生成、客户端接入等设计思路与腾讯云 EMR 的集成方式高度一致,可作为理解"EMR 上 Alluxio 如何工作"的源码级参考。

前置条件

在腾讯云 EMR 上启用 Alluxio 服务,需要满足以下版本要求:

  • 腾讯云 EMR 的 Hadoop 标准 2.x 版本,需要EMR-v2.3.0及以上;
  • 腾讯云 EMR 的 Hadoop 标准 3.x 版本,需要EMR-v3.2.0及以上;
  • 不同 EMR 版本所内置的 Alluxio 具体版本,以腾讯云 EMR 官方组件版本清单为准(在集群创建页面选择组件版本时即可看到对应关系)。

需要注意的是,这里限定的是"Hadoop 标准"版本系列的 EMR,选择集群形态时应确认自己的集群属于该系列,再核对对应版本号是否满足下限。

创建基于 Alluxio 的 EMR 集群

腾讯云 EMR 提供了两种创建"开箱即用 Alluxio 集群"的方式:WEB 购买页创建与API 创建。

方式一:购买页创建集群

登录腾讯云 EMR 购买页(buy.cloud.tencent.com/emapreduce/)后,按以下步骤操作:

  1. 在购买页中选择支持 Alluxio 的发布版本(即满足上文前置条件的 EMR 版本);
  2. 在可选组件列表中勾选Alluxio组件;
  3. 其余选项(机型、网络、存储、计费方式等)根据业务场景个性化配置即可。

创建过程中的具体选项含义,可参考腾讯云 EMR 购买页的官方指引文档。勾选 Alluxio 组件后,集群初始化时会自动完成 Alluxio 的安装、配置与进程拉起,用户无需手工介入。

方式二:API 创建集群

腾讯云 EMR 同时开放了 API 接口,用于以编程方式构建包含 Alluxio 组件的大数据集群。适用于自动化交付、基础设施即代码(IaC)等场景:在 API 请求的组件列表中显式携带 Alluxio 组件与版本信息,即可在集群拉起时一并完成 Alluxio 的部署。API 创建与购买页创建的底层集群配置语义一致,区别仅在于交互方式。

创建后的默认拓扑

创建成功后,EMR 集群内会形成典型的 Alluxio 部署拓扑:master 节点运行 Alluxio Master(负责元数据管理与命名空间)、worker 节点运行 Alluxio Worker(负责缓存数据读写),并通过19998端口暴露 RPC 服务。这一点可以从仓库引导脚本的启动逻辑得到印证:integration/emr/alluxio-emr.sh 中,master 节点依次启动alluxio-start.sh master、job_master、proxy,worker 节点依次启动worker、job_worker、proxy,并在fsadmin report就绪后才宣告完成。

基础配置:默认行为与配置下发

创建带 Alluxio 组件的腾讯云 EMR 后,系统会应用一组默认配置,理解这些默认值有助于后续按业务调整:

  • 根文件系统(Root UFS):默认把集群的HDFS 挂载到 Alluxio 根目录,即 Alluxio 命名空间的根/对应 HDFS;
  • 存储层:默认使用内存(MEM)作为单层 level0 存储,即alluxio.worker.tieredstore.levels = 1,缓存数据全部落于内存。

这一默认策略与仓库 EMR 引导脚本的自动生成配置一致:integration/emr/alluxio-emr.sh 在没有 NVMe 参数时会设置alluxio.worker.tieredstore.level0.alias=MEM、level0.dirs.path=/mnt/ramdisk,并将内存配额默认设为系统总内存的 1/3(get_default_mem_size()中mem_div=3);configure_alluxio_general_properties 则会设置 HDFS 根挂载、单层存储、ASYNC_THROUGH默认写类型等关键属性。

如果默认的"内存单层"不符合业务特征(例如热数据规模超出内存、需要 NVMe 扩展缓存容量),可以使用腾讯云 EMR 的配置下发功能完成相关配置,核心可调项包括:

配置项说明典型取值
alluxio.worker.tieredstore.levels存储层数,1表示单层1、2、3
alluxio.worker.tieredstore.level0.aliaslevel0 存储介质别名MEM、SSD、HDD
alluxio.worker.tieredstore.level0.dirs.pathlevel0 存储目录路径,多目录用逗号分隔/mnt/ramdisk、/data/alluxio
alluxio.worker.tieredstore.level0.dirs.quotalevel0 存储配额(容量上限)512GB、64MB等
alluxio.worker.tieredstore.level0.dirs.mediumtypelevel0 多目录的介质类型列表,与路径一一对应MEM,SSD
alluxio.master.mount.table.root.ufs根 UFS 地址hdfs://<namenode>:8020/、cosn://<bucket>/
alluxio.master.mount.table.root.option.alluxio.underfs.version根 UFS 为 HDFS 时的版本号3.1.0等
alluxio.master.mount.table.root.option.alluxio.underfs.hdfs.configuration根 UFS 为 HDFS 时的core-site.xml:hdfs-site.xml路径/etc/hadoop/conf/core-site.xml:/etc/hadoop/conf/hdfs-site.xml
alluxio.user.file.writetype.default客户端默认写入模式ASYNC_THROUGH(异步写穿)

关于多层级缓存的通用设计原理(层级划分、数据驱逐、升降级),可进一步阅读仓库文档 docs/cn/core-services/Caching.md;关于根挂载与统一命名空间机制,可参考 docs/cn/core-services/Unified-Namespace.md。

配置下发后的生效与重启

配置下发后,部分配置需要重启 Alluxio 服务才能生效。实践上应区分两类配置:

  • 无需重启即可生效:部分运行时参数(如部分客户端侧参数、监控开关)在下发后自动生效;
  • 必须重启生效:涉及 Master 元数据、Worker 存储分层、端口与鉴权等核心属性的变更,需要在 EMR 控制台对 Alluxio 服务执行重启操作。

在腾讯云 EMR 控制台中,配置下发与重启是两步操作:先通过"配置管理"修改组件参数并保存下发,再在服务列表中对 Alluxio 执行"重启服务",使新配置完整加载。仓库引导脚本中的实现也印证了重启的必要性:所有属性统一写入alluxio-site.properties(ALLUXIO_SITE_PROPERTIES=/opt/alluxio/conf/alluxio-site.properties,见 integration/emr/alluxio-emr.sh),随后才启动各进程,进程启动时一次性读取该文件;若在运行期修改文件,必须重启对应进程才会重新加载。

基于 Alluxio 加速计算存储分离(COS)

腾讯云 EMR 基于腾讯云对象存储(COS)提供计算存储分离能力:计算集群与数据存储分离,存储成本低、弹性好,但直接访问对象存储时存在两个典型问题:

  1. 没有节点级数据本地性(Data Locality):每次计算任务都从远端对象存储拉取数据,无法感知数据在哪个节点附近;
  2. 没有跨应用程序缓存:多个作业重复读取同一份数据时,无法复用前序作业已取回的数据。

使用 Alluxio 加速可以有效缓解这两个问题:首次访问后将 COS 数据缓存到集群内存/本地存储,后续作业命中缓存即可获得本地读性能。

步骤一:授权访问 COS

在腾讯云 EMR 集群上,COS 作为 UFS 所需的依赖 jar 包默认已经部署,无需额外上传。若当前集群未开启对象存储,需要在控制台点击Authorize(授权)进行授权,授权后 EMR 节点即可通过临时密钥访问 COS 中的数据。授权完成后建议确认授权状态(授权确认弹窗/页面中显示已授权),再继续后续挂载操作。

步骤二:将 COS 挂载到 Alluxio

授权完成后,即可将 COS 挂载到 Alluxio 命名空间。在 Alluxio 命令行中执行类似如下挂载命令:

alluxio fs mount --option fs.cos.access.key=<AccessKey> \ --option fs.cos.secret.key=<SecretKey> \ --option fs.cos.region=<Region> \ --option fs.cos.app.id=<AppId> \ /cos-bucket cosn://<bucket>/

挂载完成后,即可通过 Alluxio 路径/cos-bucket透明访问 COS 数据,并自动获得缓存加速。

COS 底层实现与必要参数

从当前仓库源码可以确认 COS UFS 接入所必需的配置键。在 core/common/src/main/java/alluxio/conf/PropertyKey.java 中定义了:

  • fs.cos.access.key:腾讯云 API 密钥 SecretId;
  • fs.cos.secret.key:腾讯云 API 密钥 SecretKey;
  • fs.cos.region:COS 存储桶所在地域;
  • fs.cos.app.id:腾讯云账号 AppId(APPID)。

在 underfs/cos/src/main/java/alluxio/underfs/cos/COSUnderFileSystem.java 的createInstance中,以上四个属性缺一不可,缺失任一都会触发Preconditions.checkArgument断言失败;同时 COSUnderFileSystemFactory 只有在 access key、secret key、region 全部存在时才会创建 COS UFS 实例,其supportsPath仅识别cos://前缀。腾讯云 EMR 的默认部署中,COS 依赖 jar 与相关配置已就绪,因此用户通常只需完成授权与挂载两步即可。

另外,当前仓库还支持腾讯云 Hadoop-COS 生态的cosn://协议,相关实现见 underfs/cosn(其supportsPath匹配cosn://前缀,并支持通过alluxio.underfs.version精确指定 UFS 版本)。两类 COS 接入的详细参数说明可参考仓库文档 docs/cn/ufs/COS.md 与 docs/cn/ufs/COSN.md。

加速效果的关键机制

COS 场景下 Alluxio 的加速来自两个层面:

  • 读写缓存(Cache):默认写类型为ASYNC_THROUGH(见 integration/emr/alluxio-emr.sh),数据异步写穿到 COS,同时写入本地缓存层,后续读直接从缓存层命中;
  • 元数据主动同步(Active Sync):对于 UFS 上由外部写入/更新的数据,可通过alluxio fs startSync <path>对指定路径开启主动同步,周期性同步元数据,避免 Alluxio 命名空间与 COS 之间出现元数据不一致(引导脚本同样暴露了-l参数用于传入同步路径列表)。

源码视角:EMR 引导脚本揭示的部署与调优细节

当前仓库的 integration/emr/alluxio-emr.sh 完整展示了"在 EMR 中引导部署 Alluxio"的实现细节,虽然面向 AWS EMR,但其内容对理解腾讯云 EMR 的集成原理具有直接参考价值:

  • 属性注入机制:脚本提供-p参数,支持以;分隔的键值对批量写入alluxio-site.properties(set_alluxio_property会先查重再覆盖,见 integration/emr/alluxio-emr.sh);-f参数可将远程core-site.xml、hdfs-site.xml等文件下载到ALLUXIO_HOME/conf/并自动纳入 HDFS 根挂载的配置路径(见 configure_alluxio_hdfs_root_mount)。这对应了腾讯云 EMR 控制台"配置下发"能力的底层原理;
  • 存储自动分层:-n <百分比>参数可自动探测挂载的 NVMe 盘,将其配置为 level0 SSD 层(目录配额按磁盘容量 × 百分比计算,见 configure_nvme),无 NVMe 时回退为 MEM 层——这为"多层级缓存配置"提供了可直接复用的参考策略;
  • 计算引擎接入:脚本将 Alluxio 客户端 jar 软链到 Spark、Presto、Tez、Hadoop 的 lib 目录(expose_alluxio_client_jar),并为 Presto 生成connector.name=hive-hadoop2、hive.metastore=alluxio、hive.metastore.alluxio.master.address=<master>:19998的 catalog 配置(见 integration/emr/alluxio-emr.sh)。这也解释了为什么在 EMR 上创建 Alluxio 集群后,Spark/Presto 等组件可以"开箱即用"地访问 Alluxio 路径;
  • 故障恢复与备份:脚本通过alluxio fsadmin backup --local在集群关停时备份 Journal,并通过-i参数在下次启动时恢复(register_backup_on_shutdown)。腾讯云 EMR 用户若需要跨集群迁移 Alluxio 元数据,可参考这一思路使用alluxio fsadmin backup与alluxio fsadmin restore命令。

常见调优建议

在腾讯云 EMR 上落地 Alluxio 后,可按以下方向做针对性调优:

  1. 按数据规模选择存储层:默认内存单层适合热数据量小、追求极致延迟的场景;数据量超出内存时,建议通过配置下发增加 SSD/NVMe 层,形成MEM + SSD多级缓存;
  2. 合理设置缓存配额:Worker 内存配额不宜过高,需为操作系统与计算框架预留内存。仓库脚本默认按系统内存 1/3 估算(get_default_mem_size),可作参考基线;
  3. 写入策略选择:ASYNC_THROUGH兼顾性能与一致性;若要求数据写入必须同步落盘到 UFS,可调整为THROUGH(详见 docs/_data/table/cn/WriteType.yml 中各类写入模式的语义说明);
  4. 开启元数据主动同步:对由外部进程持续写入 COS 的目录,使用alluxio fs startSync保持元数据一致;
  5. 监控告警:利用 EMR 控制台的一站式监控能力观察 Alluxio 的缓存命中率、读写吞吐、内存使用等指标,据此迭代缓存策略。

相关资源

围绕本文主题,可在当前仓库中继续深入阅读:

  • docs/cn/overview/Architecture.md:Alluxio 整体架构(Master/Worker/Client 职责);
  • docs/cn/core-services/Caching.md:缓存机制与多级存储原理;
  • docs/cn/core-services/Unified-Namespace.md:统一命名空间与挂载(mount)机制;
  • docs/cn/ufs/COS.md、docs/cn/ufs/COSN.md:COS UFS 参数与配置;
  • integration/emr/alluxio-emr.sh:EMR 引导部署脚本(部署、属性注入、存储分层、引擎接入的完整实现);
  • integration/emr/alluxio-emr.json:EMR 组件分类配置示例(Hive/Presto/Hadoop 与 Alluxio 客户端 jar 的集成);
  • underfs/cos/src/main/java/alluxio/underfs/cos/COSUnderFileSystem.java:COS 底层文件系统实现。

至此,你已经可以在腾讯云 EMR 上完成"创建 Alluxio 集群 → 按业务下发多级缓存配置 → 授权并挂载 COS → 让计算引擎获得本地化缓存加速"的完整闭环。后续建议结合集群实际负载,围绕缓存命中率与存储水位持续迭代配置。

  • 存储
  • 分布式文件系统
  • 缓存
  • 大数据

【免费下载链接】alluxio

Alluxio, data orchestration for analytics and machine learning in the cloud

项目地址:https://gitcode.com/gh_mirrors/al/alluxio
点击查看免费下载
上一篇:es-toolkit range 函数完全指南:用一行代码生成等差数值数组
下一篇:Rerun GraphEdge 组件详解:图数据边定义的 Arrow 编码与跨语言使用

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!