- 存储
- 分布式文件系统
- 缓存
- 大数据
【免费下载链接】alluxio
Alluxio, data orchestration for analytics and machine learning in the cloud
导读
本指南基于 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.propertiesconf/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% /LICENSEcopyFromLocal对应的命令实现位于 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: 27040getUsedBytes的实现位于 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.bakcopyToLocal对应实现见 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.csv100%表示文件已完全载入 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
相关推荐
Alluxio 快速上手指南:单机部署、Alluxio Shell 文件操作与统一命名空间实战
Alluxio 快速上手指南:单机部署、Alluxio Shell 文件操作与统一命名空间实战 本文以 Alluxio 官方中文快速上手指南为主体,带你在一台本
存储分布式文件系统缓存大数据HashiCorp Vault 快速入门:基础操作与安全实践指南
HashiCorp Vault 快速入门:基础操作与安全实践指南 前言 在现代分布式系统中,密钥管理是安全架构的核心环节。HashiCorp Vault 作为业
后端密钥管理认证鉴权身份认证应用安全ESP-IDF 低功耗蓝牙协议栈架构详解:从控制器到应用的完整分层指南
ESP IDF 低功耗蓝牙协议栈架构详解:从控制器到应用的完整分层指南 导读 本文以 ESP IDF 官方文档 低功耗蓝牙协议栈架构总览 https://lin
存储分布式文件系统缓存大数据
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考