☰
Alluxio 快速入门指南:单机部署、Shell 基础操作与 S3 挂载实战
2026/10/7 2:26:32 网站建设 项目流程
  • 存储
  • 分布式文件系统
  • 缓存
  • 大数据

【免费下载链接】alluxio

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

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

导读

本指南基于 Alluxio 官方 Quick Start 文档整理,带你在一台本地机器上以最小配置完成 Alluxio 的下载、配置、启动与验证,并通过 Alluxio Shell 完成文件的上传、读取、缓存与释放等基础操作。作为进阶(Bonus)章节,本指南还演示了如何利用统一命名空间(Unified Namespace)把公有 S3 桶挂载进 Alluxio,并实测内存缓存带来的数据访问加速效果。读完本文,你将具备独立部署一个单机 Alluxio 环境、用命令行操作文件系统、以及挂载远程存储并利用缓存加速访问的完整能力。

说明:本文所有命令与配置均以当前仓库(Alluxio 2.10.0-SNAPSHOT,见 pom.xml)为准。文中标注[Bonus]的可选章节需要 AWS 账号及访问密钥(Access Key ID 与 Secret Access Key),与本文主体流程无关,可跳过。

准备条件(Prerequisites)

  • 操作系统:macOS 或 Linux;
  • Java 8:Alluxio 的 Master、Worker 与 Shell 均运行在 JVM 之上,必须预先安装 JDK 8;
  • 启用远程登录:Alluxio 的启动脚本通过 SSH 在节点间拉起进程,本地模式同样依赖此机制。macOS 用户需在「系统偏好设置 → 共享」中勾选「远程登录」;
  • [Bonus] AWS 账号与密钥:用于 S3 挂载实验。

下载并解压 Alluxio

从 Alluxio 官网下载页选择目标版本对应的、为默认 Hadoop 版本构建的发行包(alluxio-<版本>-bin.tar.gz),解压并进入目录:

$ tar -xzf alluxio-2.10.0-bin.tar.gz $ cd alluxio-2.10.0

解压后得到目录alluxio-2.10.0,其中包含 Alluxio 的全部源码与 Java 二进制。下文统一用${ALLUXIO_HOME}指代该目录。仓库中与发行包对应的目录结构可参考 bin/alluxio(Shell 主入口)、bin/alluxio-start.sh(启动脚本)等。

配置 Alluxio

1. 生成alluxio-env.sh并设置JAVA_HOME

在${ALLUXIO_HOME}/conf目录下,由模板复制生成环境配置脚本:

$ cp conf/alluxio-env.sh.template conf/alluxio-env.sh

然后在conf/alluxio-env.sh中追加JAVA_HOME配置:

$ echo "JAVA_HOME=/path/to/java/home" >> conf/alluxio-env.sh

模板文件 conf/alluxio-env.sh.template 中的注释说明了其作用:该脚本被 Alluxio 服务端进程与 Shell 命令加载,用于设置JAVA_HOME/JAVA、日志目录(ALLUXIO_LOGS_DIR,默认${ALLUXIO_HOME}/logs)、各守护进程的 JVM 参数(如ALLUXIO_MASTER_JAVA_OPTS、ALLUXIO_WORKER_JAVA_OPTS)以及远程调试参数等。需要注意:该文件不会影响以客户端库方式接入的 Spark、MapReduce 等外部作业,对这类作业更推荐使用下一节的alluxio-site.properties进行配置。

2. 生成alluxio-site.properties并指定 Master 主机名

同样在${ALLUXIO_HOME}/conf下由模板复制生成站点属性文件:

$ cp conf/alluxio-site.properties.template conf/alluxio-site.properties

并设置alluxio.master.hostname为localhost:

$ echo "alluxio.master.hostname=localhost" >> conf/alluxio-site.properties

conf/alluxio-site.properties.template 展示了更多可参考的常用属性(注释状态),例如:

  • alluxio.master.mount.table.root.ufs=${alluxio.work.dir}/underFSStorage:根挂载点对应的底层存储(UFS)路径,默认即${ALLUXIO_HOME}/underFSStorage;
  • alluxio.worker.ramdisk.size=1GB、alluxio.worker.tieredstore.level0.alias=MEM:Worker 内存缓存(RamDisk)大小与分层存储第一层别名;
  • alluxio.user.file.readtype.default=CACHE、alluxio.user.file.writetype.default=ASYNC_THROUGH:用户读写默认策略。

与alluxio-env.sh不同,alluxio-site.properties支持 Alluxio 的全部配置项,且同时被外部作业与 Alluxio 服务端(或 Shell)读取。

[Bonus] AWS 配置

如需让 Alluxio 与 Amazon S3 交互,在conf/alluxio-site.properties中追加 AWS 访问信息:

$ echo "s3a.accessKeyId=<AWS_ACCESS_KEY_ID>" >> conf/alluxio-site.properties $ echo "s3a.secretKey=<AWS_SECRET_ACCESS_KEY>" >> conf/alluxio-site.properties

请将<AWS_ACCESS_KEY_ID>与<AWS_SECRET_ACCESS_KEY>替换为有效的 AWS 访问密钥。更多 S3 相关配置可参考 docs/en/ufs/S3.md。

校验 Alluxio 环境

Alluxio 提供了环境校验命令,用于确保系统环境满足运行条件。执行:

$ ./bin/alluxio validateEnv local

该命令会报告可能阻碍 Alluxio 在本机启动的潜在问题。从 bin/alluxio 的用法列表可以看到validateEnv属于顶层命令之一,与format、validateConf、collectInfo等并列;其详细用法可参考 docs/en/operation/User-CLI.md。

启动 Alluxio

格式化

首次启动前必须执行格式化,该命令会格式化 Alluxio 的 journal(主节点元数据日志)与 Worker 存储目录:

$ ./bin/alluxio format

若输出中出现与ValidateHdfsVersion相关的失败提示,而当前暂不打算接入 HDFS,可以暂时忽略。根据 docs/en/operation/User-CLI.md 的说明,format会删除 Alluxio 中持久化的全部数据(含缓存数据与元数据),但不会改动底层存储(UFS)中的原始数据;它必须在集群未运行时调用,且首次运行 Alluxio 前强制执行。

启动 Master 与 Worker

默认情况下,Alluxio 本地模式会在同一台机器上同时启动 Master 与 Worker 进程:

$ ./bin/alluxio-start.sh local SudoMount

其中:

  • local表示在本机启动所有进程(启动脚本 bin/alluxio-start.sh 的用法注释明确写着local [MOPT] [-c cache] Start all processes locally);
  • SudoMount表示若 RamFS(第一层 MEM 存储)尚未挂载,则用sudo挂载它;脚本中Mount|SudoMount分支还会校验第一层存储别名必须是MEM(见 bin/alluxio-start.sh 中alluxio.worker.tieredstore.level0.alias的读取逻辑)。

启动成功后,可通过两个 Web UI 观察服务状态:

  • Master:http://localhost:19999
  • Worker:http://localhost:30000

使用 Alluxio Shell 进行基础文件操作

Alluxio Shell 提供与 Alluxio 交互的命令行操作。先查看可用的文件系统操作:

$ ./bin/alluxio fs

查看文件列表:ls

列出根目录下所有文件:

$ ./bin/alluxio fs ls /

此时 Alluxio 中还没有任何文件。ls输出的每一行包含:文件属主与属组、文件大小、是否已持久化到 UFS(Persistence State)、创建时间、以及文件在 Alluxio 中被缓存的比例(百分比)。

拷贝文件进 Alluxio:copyFromLocal

$ ./bin/alluxio fs copyFromLocal ${ALLUXIO_HOME}/LICENSE /LICENSE Copied file://${ALLUXIO_HOME}/LICENSE to /LICENSE

再次列出根目录,可以看到LICENSE文件:

$ ./bin/alluxio fs ls / -rw-r--r-- staff staff 27040 PERSISTED 02-17-2021 16:21:11:061 100% /LICENSE

copyFromLocal对应的命令实现位于 shell/src/main/java/alluxio/cli/fs/command/CopyFromLocalCommand.java,它负责把本地文件写入 Alluxio 命名空间。

读取文件内容:cat

$ ./bin/alluxio fs cat /LICENSE Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ ...

cat实现见 shell/src/main/java/alluxio/cli/fs/command/CatCommand.java。

观察 UFS 与缓存状态

默认配置下,Alluxio 使用本地文件系统作为 UFS,并自动将数据持久化到其中,默认路径为${ALLUXIO_HOME}/underFSStorage:

$ ls ${ALLUXIO_HOME}/underFSStorage LICENSE

同时,LICENSE文件也会出现在 Master Web UI 中,其Persistence State列显示为PERSISTED。

在 Master Web UI 主页的Storage Usage Summary中可以看到 Alluxio 当前占用的内存量,也可用命令查看:

$ ./bin/alluxio fs getUsedBytes Used Bytes: 27040

getUsedBytes的实现位于 shell/src/main/java/alluxio/cli/fs/command/GetUsedBytesCommand.java,它通过BlockStoreClient查询当前 Alluxio 中被缓存数据占用的字节数。

释放缓存:free

释放内存缓存不会删除 Alluxio 文件系统中的文件,也不会删除 UFS 中的数据,而只是把数据从 Alluxio 缓存中移除:

$ ./bin/alluxio fs free /LICENSE /LICENSE was successfully freed from Alluxio space. $ ./bin/alluxio fs getUsedBytes Used Bytes: 0 $ ./bin/alluxio fs ls / -rw-r--r-- staff staff 27040 PERSISTED 02-17-2021 16:21:11:061 0% /LICENSE $ ls ${ALLUXIO_HOME}/underFSStorage/ LICENSE

注意ls输出中缓存比例由100%变为0%,但 UFS 中文件依然存在。free对应实现见 shell/src/main/java/alluxio/cli/fs/command/FreeCommand.java。

再次访问,数据回填缓存:copyToLocal

访问数据会从 UFS 取回并重新填充进 Alluxio 缓存:

$ ./bin/alluxio fs copyToLocal /LICENSE ~/LICENSE.bak Copied /LICENSE to file:///home/staff/LICENSE.bak $ ./bin/alluxio fs getUsedBytes Used Bytes: 27040 $ ./bin/alluxio fs ls / -rw-r--r-- staff staff 27040 PERSISTED 02-17-2021 16:21:11:061 100% /LICENSE $ rm ~/LICENSE.bak

copyToLocal对应实现见 shell/src/main/java/alluxio/cli/fs/command/CopyToLocalCommand.java。

[Bonus] 挂载 S3:体验统一命名空间

Alluxio 通过**统一命名空间(Unified Namespace)**功能统一访问多种存储系统:用户可以把不同存储系统挂载进 Alluxio 命名空间,并通过 Alluxio 命名空间无缝访问所有文件。该特性的详细介绍见 docs/en/core-services/Unified-Namespace.md。

先在 Alluxio 中创建挂载点目录:

$ ./bin/alluxio fs mkdir /mnt Successfully created directory /mnt

再挂载一个现有的 S3 桶。本指南使用alluxio-quick-start桶:

$ ./bin/alluxio fs mount --readonly alluxio://localhost:19998/mnt/s3 s3://alluxio-quick-start/data Mounted s3://alluxio-quick-start/data at alluxio://localhost:19998/mnt/s3

命令中各部分的含义:

  • --readonly:以只读方式挂载;
  • alluxio://localhost:19998/mnt/s3:挂载点在 Alluxio 命名空间中的路径,19998为 Master 的 RPC 端口;
  • s3://alluxio-quick-start/data:源 S3 路径。

mount、mkdir的实现分别见 shell/src/main/java/alluxio/cli/fs/command/MountCommand.java 与 shell/src/main/java/alluxio/cli/fs/command/MkdirCommand.java。

通过 Alluxio 命名空间列出从 S3 挂载进来的文件:

$ ./bin/alluxio fs ls /mnt/s3 -r-x------ staff staff 955610 PERSISTED 01-09-2018 16:35:00:882 0% /mnt/s3/sample_tweets_1m.csv -r-x------ staff staff 10077271 PERSISTED 01-09-2018 16:35:00:910 0% /mnt/s3/sample_tweets_10m.csv -r-x------ staff staff 89964 PERSISTED 01-09-2018 16:35:00:972 0% /mnt/s3/sample_tweets_100k.csv -r-x------ staff staff 157046046 PERSISTED 01-09-2018 16:35:01:002 0% /mnt/s3/sample_tweets_150m.csv

新挂载的文件与目录同样会出现在 Alluxio Web UI 中。

ls -R可以递归列出某个目录下的全部文件,从而直观看到来自不同存储系统的数据在同一个命名空间下共存:

$ ./bin/alluxio fs ls -R / -rw-r--r-- staff staff 26847 PERSISTED 01-09-2018 15:24:37:088 100% /LICENSE drwxr-xr-x staff staff 1 PERSISTED 01-09-2018 16:05:59:547 DIR /mnt dr-x------ staff staff 4 PERSISTED 01-09-2018 16:34:55:362 DIR /mnt/s3 -r-x------ staff staff 955610 PERSISTED 01-09-2018 16:35:00:882 0% /mnt/s3/sample_tweets_1m.csv -r-x------ staff staff 10077271 PERSISTED 01-09-2018 16:35:00:910 0% /mnt/s3/sample_tweets_10m.csv -r-x------ staff staff 89964 PERSISTED 01-09-2018 16:35:00:972 0% /mnt/s3/sample_tweets_100k.csv -r-x------ staff staff 157046046 PERSISTED 01-09-2018 16:35:01:002 0% /mnt/s3/sample_tweets_150m.csv

其中/LICENSE来自本地文件系统,而/mnt/s3/下的文件位于 S3——两类数据在 Alluxio 命名空间中无缝共存。

[Bonus] 用 Alluxio 内存缓存加速数据访问

由于 Alluxio 使用内存存储数据,可以显著加速数据访问。先查看此前从 S3 挂载的文件状态:

$ ./bin/alluxio fs ls /mnt/s3/sample_tweets_150m.csv -r-x------ staff staff 157046046 PERSISTED 01-09-2018 16:35:01:002 0% /mnt/s3/sample_tweets_150m.csv

输出中的0%表示文件Not In Memory(尚未进入内存缓存)。该文件是推文样本数据,统计其中包含单词 "kitten" 的推文数量并计时:

$ time ./bin/alluxio fs cat /mnt/s3/sample_tweets_150m.csv | grep -c kitten 889 real 0m22.857s user 0m7.557s sys 0m1.181s

首次访问耗时取决于网络状况,可能超过 20 秒。若读取太慢,可以改用目录中更小的数据子集。

首次读取后再次查看文件状态:

$ ./bin/alluxio fs ls /mnt/s3/sample_tweets_150m.csv -r-x------ staff staff 157046046 PERSISTED 01-09-2018 16:35:01:002 100% /mnt/s3/sample_tweets_150m.csv

100%表示文件已完全载入 Alluxio,之后的读取将明显更快。统计包含 "puppy" 的推文数量:

$ time ./bin/alluxio fs cat /mnt/s3/sample_tweets_150m.csv | grep -c puppy 1553 real 0m1.917s user 0m2.306s sys 0m0.243s

再统计包含 "bunny" 的推文数量:

$ time ./bin/alluxio fs cat /mnt/s3/sample_tweets_150m.csv | grep -c bunny 907 real 0m1.983s user 0m2.362s sys 0m0.240s

同样的数据,第一次读取耗时 22.857s,数据进入 Alluxio 内存缓存后的后续读取仅需约 2s——这正是 Alluxio 借助内存缓存加速数据访问的直观体现。至此,你已完成本地安装,并利用 Alluxio 加速了对 S3 数据的访问。

停止 Alluxio

$ ./bin/alluxio-stop.sh local

后续学习路径(Next Steps)

完成本快速入门后,可以继续深入了解 Alluxio 的更多能力:

以多种方式部署 Alluxio

  • Alluxio 本地运行
  • Alluxio 集群独立部署
  • Alluxio on Docker
  • Alluxio on Kubernetes

接入更多底层存储(Under Storage)

  • Azure Blob Store
  • AWS S3
  • GCS
  • HDFS
  • NFS

与计算框架集成

  • Apache Spark
  • Apache Hive
  • Presto

FAQ:macOS 执行脚本报 "Operation not permitted"

在 macOS 11(Big Sur)及之后版本上执行./bin/alluxio format时,可能报如下错误:

alluxio-2.10.0/bin/alluxio: Operation not permitted

这通常由 macOS 新增的系统安全设置导致。解决办法:打开「系统偏好设置 → 共享」,勾选左侧的远程登录(Remote Login);如果界面中存在允许远程用户完全访问(Allow full access to remote users)选项,一并勾选;若列表中没有你的账户,点击+按钮把自己添加到允许远程登录的用户列表中。

结语

本指南完整走通了 Alluxio 的本地快速入门流程:下载解压、生成环境与站点配置、环境校验、格式化与启动、Shell 基础文件操作(ls/copyFromLocal/cat/getUsedBytes/free/copyToLocal),并通过 Bonus 章节演示了 S3 挂载与内存缓存加速。以此为基础,即可进一步探索集群部署、更多 UFS 集成与计算框架对接等高级主题。

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

【免费下载链接】alluxio

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

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

相关推荐

上一篇:Umi-OCR终极指南:5分钟开启免费离线文字识别新时代
下一篇:3个简单步骤:B站缓存视频合并导出终极指南

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询