尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Alluxio 源码编译全指南:从 Git 克隆到 Maven 构建与故障排查

发布时间:2026/9/29 2:15:14

资讯中心
01
ARTICLE

Alluxio 源码编译全指南:从 Git 克隆到 Maven 构建与故障排查

Alluxio 源码编译全指南:从 Git 克隆到 Maven 构建与故障排查
存储分布式文件系统缓存大数据【免费下载链接】alluxioAlluxio, data orchestration for analytics and machine learning in the cloud项目地址https://gitcode.com/gh_mirrors/al/alluxio点击查看免费下载本文面向需要从源码构建 Alluxio 的开发者与运维工程师。内容以 docs/cn/contributor/Building-Alluxio-From-Source.md 为主体骨架围绕环境准备、代码获取、Maven 编译、本地验证、Hadoop 发行版适配编译及常见故障排查展开并结合仓库内的pom.xml与underfs/hdfs/pom.xml等源码配置进行原理级佐证。读完本文你将掌握完整的 Alluxio 源码构建流程能够按需定制 Hadoop 底层存储版本并独立解决构建中常见的 OOM、protolock 与 buildnumber 异常。构建前置条件软件版本要求Alluxio 源码构建依赖三件套Java、Maven 与 Git。构建 Alluxio 需要Java JDK 8 或以上Alluxio 源码基于 Java 8 编写根 pom.xml 中声明java.version1.8/java.version但 JDK 8 及以上版本均可使用。当前仓库版本为2.10.0-SNAPSHOT见 pom.xml建议使用与目标运行环境一致的 JDK 版本。Maven 3.3.9 或以上根 pom.xml 中声明的构建 Maven 版本为3.3.9实际使用高于该版本的 Maven 亦可。Git用于克隆仓库与切换版本标签。如果本地未安装 JDK/Maven/Git官方提供了预装这些工具的 Docker 镜像alluxio/alluxio-maven可直接用于构建详见下文使用 Docker 创建构建环境一节。获取源代码克隆仓库与切换版本克隆 master 分支从 GitHub 克隆 Alluxio 主仓库并进入目录$ git clone git://github.com/alluxio/alluxio.git $ cd alluxio $ export ALLUXIO_HOME$(pwd)ALLUXIO_HOME环境变量在后续 Docker 构建、编译产物定位以及本地运行验证中都会用到务必先导出。构建指定版本使用 Git Tag默认克隆到的是 master 分支即最新开发版。若需构建特定发布版本可通过 tag 检出$ git tag $ git checkout TAG_NAME先执行git tag查看所有可用版本标签再执行git checkout TAG_NAME检出目标版本。注意切换版本后pom.xml中的version与源码内容都会随之变化构建出的 jar 包版本号如alluxio-underfs-hdfs-3.3.4-2.10.0-SNAPSHOT.jar中的版本段也随之改变。可选使用 Docker 创建构建环境若本地未安装 JDK 和 Maven可跳过本节内容否则推荐使用官方发布的alluxio/alluxio-maven镜像该镜像预装了 Java、Maven 和 Git。启动构建容器启动一个名为alluxio-build的容器然后进入容器继续操作$ docker run -itd \ --networkhost \ -v ${ALLUXIO_HOME}:/alluxio \ -v ${HOME}/.m2:/root/.m2 \ --name alluxio-build \ alluxio/alluxio-maven bash $ docker exec -it -w /alluxio alluxio-build bash参数说明与注意事项容器路径/alluxio映射到主机路径${ALLUXIO_HOME}源码与构建产物都挂载自宿主机因此容器内构建出的二进制文件在容器外仍然可以访问容器路径/root/.m2映射到主机路径${HOME}/.m2可复用宿主机已有的 Maven 本地依赖缓存加速首次构建此映射可选--networkhost使容器复用宿主机网络便于 Maven 下载依赖及后续访问本地服务容器内工作目录被设为/alluxio通过-w /alluxio参数可直接执行 Maven 命令。销毁容器构建完成后通过以下命令销毁容器$ docker rm -f alluxio-build编译 Alluxio 源码基础编译命令在源码根目录即ALLUXIO_HOME执行$ mvn clean install -DskipTests该命令将完成以下阶段获取依赖 → 编译源码 → 打包。若为首次构建下载依赖可能耗时较长此后构建会因本地 Maven 缓存而显著加快。加速编译跳过各类检查为了加速编译过程可跳过不同的检查项$ mvn -T 2C clean install -DskipTests -Dmaven.javadoc.skip -Dfindbugs.skip -Dcheckstyle.skip -Dlicense.skip各参数含义参数作用-T 2C启用 Maven 并行构建每个 CPU 核心 2 个线程充分利用多核 CPU-DskipTests跳过单元测试的执行-Dmaven.javadoc.skip跳过 Javadoc 文档生成-Dfindbugs.skip跳过 FindBugs/SpotBugs 静态代码扫描根 pom.xml 中配置了 spotbugs-maven-plugin-Dcheckstyle.skip跳过 Checkstyle 代码风格检查-Dlicense.skip跳过 License 头检查构建系统会自动获取依赖、编译源码、运行单元测试并进行打包。注意这里的-DskipTests只是跳过测试执行测试类仍会被编译若需连测试编译一起跳过可使用-Dmaven.test.skiptrue。-T 2C在多模块并行构建时需注意模块间依赖顺序Maven 会自动处理。验证构建产物并运行本地测试构建完成后可启动本地 Alluxio 集群进行冒烟验证。中文文档给出的验证流程如下$ echo alluxio.master.hostnamelocalhost conf/alluxio-site.properties $ ./bin/alluxio format $ ./bin/alluxio-start.sh local英文文档在此基础上补充了默认 UFS 目录的准备步骤Alluxio 默认使用./underFSStorage作为底层文件系统存储目录$ mkdir ./underFSStorage $ ./bin/alluxio format $ ./bin/alluxio-start.sh local SudoMount其中SudoMount参数表示以 sudo 权限挂载用于需要 root 权限的 RAM 盘挂载场景。与构建直接相关的可执行脚本位于 bin 目录包括 alluxio、alluxio-start.sh、alluxio-stop.sh 等编译成功后会生成这些脚本及配套 jar 包。验证 Alluxio 是否在运行可通过以下任一方式访问 Web UI打开 http://localhost:19999Master Web 界面启动后可能需要几秒钟查看日志检查alluxio/logs目录下的日志文件其中worker.log和master.log通常最有参考价值运行内置测试程序$ ./bin/alluxio runTests该命令会执行一个简单的读写测试验证数据能否在 Alluxio 与其底层 UFS 之间正常读写成功时输出Passed the test!。停止本地 Alluxio$ ./bin/alluxio-stop.sh local编译选项按需定制构建计算框架支持自 Alluxio 1.7 起编译后生成的 Alluxio 客户端 jar 包位于lib目录可适用于不同的计算框架如 Spark、Flink、Presto 等无需为每个框架单独编译客户端。构建不同版本的 HDFS 底层存储Alluxio 使用 HDFS 作为底层存储Under File System, UFS时需要针对目标 Hadoop 发行版编译对应的 UFS 模块。默认情况下Alluxio 构建的 HDFS 发行版本为 Hadoop 3.3当前仓库中默认值为3.3.4见 underfs/hdfs/pom.xml。要针对特定 Hadoop 版本构建通过指定UFS_HADOOP_PROFILE和对应的ufs.hadoop.version运行$ mvn install -pl underfs/hdfs/ \ -PUFS_HADOOP_PROFILE -Dufs.hadoop.versionHADOOP_VERSION -DskipTests-pl underfs/hdfs/仅构建underfs/hdfs这一个 Maven 模块即 Alluxio 的 HDFS UFS 实现源码位于 underfs/hdfs/src/main-PUFS_HADOOP_PROFILE选择 Hadoop 主版本对应的 profile-Dufs.hadoop.versionHADOOP_VERSION指定具体 Hadoop 版本号。可用的 Hadoop profile 为ufs-hadoop-1、ufs-hadoop-2、ufs-hadoop-3分别覆盖 Hadoop 1.x、2.x、3.x 三个大版本。从源码看underfs/hdfs/pom.xml 中ufs-hadoop-3是activeByDefault的默认激活 profile其通过引入alluxio-shaded-hadoop依赖版本由ufs.hadoop.version控制来对接对应 Hadoop 客户端库。兼容性说明Hadoop 版本 3.0.0与较新的 Alluxio 版本有最好的兼容性。例如构建针对 Hadoop 3.3.4 的 UFS同时跳过各类检查加速$ mvn clean install -pl underfs/hdfs/ \ -Dmaven.javadoc.skiptrue -DskipTests -Dlicense.skiptrue \ -Dcheckstyle.skiptrue -Dfindbugs.skiptrue \ -Pufs-hadoop-3 -Dufs.hadoop.version3.3.4编译成功标志在${ALLUXIO_HOME}/lib目录下发现名为alluxio-underfs-hdfs-UFS_HADOOP_VERSION-ALLUXIO_VERSION.jar的 jar 包即表明编译成功。该命名规则定义在 underfs/hdfs/pom.xml 中lib.jar.name${project.artifactId}-${ufs.hadoop.version}-${project.version}.jar构建产物会通过 copy-rename 插件复制到lib目录。启用 Active Sync如需启用 HDFS 元数据主动同步Active Sync必须使用hdfsActiveSync属性构建。从 underfs/hdfs/pom.xml 可以看出hdfsActiveSyncprofile 与hdfsAclprofile 是互斥编译的默认编译会同时排除SupportedHdfsAclProvider.java与SupportedHdfsActiveSyncProvider.java两个类指定-PhdfsActiveSync时改为仅排除SupportedHdfsAclProvider.java即编译进 Active Sync 支持指定-PhdfsAcl时则相反。使用 Active Sync 的具体配置请参考 Active Sync for HDFS 文档。各 HDFS 发行版的编译标志Apache 发行版所有 Apache 官方版本都可直接使用Hadoop 源码本就来自 Apache-Pufs-hadoop-1 -Dufs.hadoop.version1.0.4 -Pufs-hadoop-1 -Dufs.hadoop.version1.2.0 -Pufs-hadoop-2 -Dufs.hadoop.version2.2.0 -Pufs-hadoop-2 -Dufs.hadoop.version2.3.0 -Pufs-hadoop-2 -Dufs.hadoop.version2.4.1 -Pufs-hadoop-2 -Dufs.hadoop.version2.5.2 -Pufs-hadoop-2 -Dufs.hadoop.version2.6.5 -Pufs-hadoop-2 -Dufs.hadoop.version2.7.3 -Pufs-hadoop-2 -Dufs.hadoop.version2.8.0 -Pufs-hadoop-2 -Dufs.hadoop.version2.9.0 -Pufs-hadoop-2 -Dufs.hadoop.version2.10.0 -Pufs-hadoop-3 -Dufs.hadoop.version3.0.0 -Pufs-hadoop-3 -Dufs.hadoop.version3.3.4Cloudera 发行版CDH针对 Cloudera 发行版使用$apacheRelease-cdh$cdhRelease形式的版本号-Pufs-hadoop-2 -Dufs.hadoop.version2.3.0-cdh5.1.0 -Pufs-hadoop-2 -Dufs.hadoop.version2.0.0-cdh4.7.0Hortonworks 发行版HDP针对 Hortonworks 发行版使用$apacheRelease.$hortonRelease形式的版本号-Pufs-hadoop-2 -Dufs.hadoop.version2.1.0.2.0.5.0-67 -Pufs-hadoop-2 -Dufs.hadoop.version2.2.0.2.1.0.0-92 -Pufs-hadoop-2 -Dufs.hadoop.version2.4.0.2.1.3.0-563从根 pom.xml 可以看到项目仓库配置中已内置cloudera-repo与HDPReleases两个 Maven 仓库源用于解析这些商业发行版的依赖构件因此直接使用上述版本号即可完成构建。故障排除编译时出现 OutOfMemoryError如果看到java.lang.OutOfMemoryError: Java heap space说明 Maven 进程堆内存不足。可通过MAVEN_OPTS环境变量增大内存$ export MAVEN_OPTS-Xmx2g -XX:MaxPermSize512M -XX:ReservedCodeCacheSize512m-Xmx2g将 JVM 堆上限设为 2GB-XX:MaxPermSize512M设置永久代PermGen大小JDK 8 中该参数已废弃但保留无碍-XX:ReservedCodeCacheSize512m增大 JIT 编译的代码缓存区可缓解大项目编译时的内存压力。设置后重新执行 Maven 命令即可。protolock 错误若看到如下 Maven 错误An error occurred while running protolock: Cannot run program /alluxio/core/transport/target/protolock-bin/protolock (in directory /alluxio/core/transport/target/classes): error2, No such file or directory请确保构建源码时不要包含 Maven 参数-Dskip.protoc。原因从源码可见Alluxio 的 gRPC 通信定义位于 core/transport/src/main/proto共 28 个.proto文件其构建依赖protobuf-maven-plugin见 core/transport/pom.xml该插件使用skip.protoc属性控制是否执行 protoc 编译而 proto-backwards-compatibility 插件proto lock 校验会调用 protolock 对.proto文件做向后兼容性检查。若通过-Dskip.protoc跳过了 protoc 生成步骤protolock 依赖的原生可执行文件便不会生成从而导致上述 No such file or directory 错误。buildnumber-maven-plugin 的 NullPointerException若看到如下错误Failed to execute goal org.codehaus.mojo:buildnumber-maven-plugin:1.4:create-metadata (default) on project alluxio-core-common: Execution default of goal org.codehaus.mojo:buildnumber-maven-plugin:1.4:create-metadata failed: NullPointerException原因Alluxio 构建过程中通过 buildnumber-maven-plugin版本 1.4从 SCM即 Git检索 revision 信息来生成 build number当 git 哈希检索失败例如在非 Git 目录或源码打包后的副本中构建时SCM 层会抛出 NPE。解决办法用 Maven 参数-Dmaven.buildNumber.revisionOnScmFailure显式指定 Alluxio 版本号作为兜底。例如若 Alluxio 版本为 2.7.3$ mvn clean install -Dmaven.buildNumber.revisionOnScmFailure2.7.3参数值应替换为实际构建的版本号当前 master 仓库为2.10.0-SNAPSHOT。该参数的语义是当从 SCM 获取 revision 失败时用给定的值作为 revision从而避免 NPE 中断构建。总结本文完整梳理了 Alluxio 从源码构建的完整链路环境准备 → Git 克隆与版本切换 → 可选Docker 构建环境 → Maven 编译与加速选项 → 本地启动验证 → HDFS UFS 多版本定制编译 → 三大常见故障的排查方案。结合仓库中 pom.xml 与 underfs/hdfs/pom.xml 等构建配置可以清晰理解默认 Hadoop 版本、profile 激活机制、proto 兼容性检查与 build number 生成等底层逻辑。按本文步骤操作即可获得与目标 Hadoop 生态完全匹配的 Alluxio 构建产物并快速定位构建过程中的各类异常。赞分享存储分布式文件系统缓存大数据【免费下载链接】alluxioAlluxio, data orchestration for analytics and machine learning in the cloud项目地址https://gitcode.com/gh_mirrors/al/alluxio点击查看免费下载相关推荐BiliBiliToolPro 批量取关3 个参数瘦身 B 站关注分组BiliBiliToolPro 批量取关3 个参数瘦身 B 站关注分组 BiliBiliToolPro 是一个 B 站自动任务工具支持 Docker、青龙面后端任务调度工作流自动化Apache SkyWalking 源码编译与构建全指南Maven 多模块工程从克隆到打包Apache SkyWalking 源码编译与构建全指南Maven 多模块工程从克隆到打包 Apache SkyWalking 是一个由 OAP 后端Jav可观测性后端微服务云原生SystemTrayMenu新手入门5分钟快速掌握文件访问新方式SystemTrayMenu新手入门5分钟快速掌握文件访问新方式 SystemTrayMenu是一款免费开源的文件访问工具它能让你轻松浏览和打开文件通过系桌面应用上一篇如何在Ascend NPU上高效部署BioLinkBERT-base性能优化与推理加速的终极指南下一篇探索游戏边界Strato —— Nintendo Switch 模拟器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。