Maven构建生成的Hadoop RPM包内无文件问题求助
问题背景
搭建HDP 3.1.4集群过程中,计划将Cloudera官方提供的HDFS、YARN RPM包替换为Apache Hadoop版本,通过Maven方式构建Hadoop 3.1.1版本RPM包时,执行如下命令后构建流程提示成功完成:
mvn -B clean install rpm:rpm -DnewVersion=3.1.1 -DskipTests
问题现象
使用rpm -qlp命令查询生成的RPM包内文件列表时,系统返回包无文件的提示,对应执行命令与返回结果如下:
rpm -qlp hadoop-main-3.1.1-1.noarch.rpm (contains no files)
排查思路与解决方案
- 先确认查询的RPM包是否为正确的目标包:
hadoop-main是Hadoop项目的聚合父POM模块,本身只做依赖版本管理、子模块构建调度,不包含任何实际的二进制程序、脚本、配置文件,所以生成的hadoop-main-xxx.noarch.rpm本身就是空包,属于正常现象。实际包含HDFS、YARN、Common等组件实际文件的RPM包,会输出在对应子模块的target/rpm/目录下,比如hadoop-hdfs、hadoop-yarn、hadoop-common、hadoop-dist子模块生成的带组件名、对应架构标识的RPM包,才是用来替换安装的目标包。 - 若对应功能子模块生成的RPM包同样为空,检查对应模块pom.xml中
rpm-maven-plugin的配置:重点核对<mappings>配置段,确认是否正确配置了待打包文件的源路径、RPM安装后的目标路径,检查是否存在<excludes>规则范围过大、将所有待打包文件排除的问题,同时确认<directory>配置的源路径下确实存在构建完成的文件。 - 校验构建流程是否完整:直接在根目录执行
rpm:rpm目标时,Maven只会执行RPM插件绑定的构建步骤,可能跳过了二进制编译、分发目录组装的前置流程,导致RPM插件找不到待打包的源文件。正确的构建顺序应该是先在根目录执行mvn clean package -Pdist -DskipTests -Dtar生成完整的Hadoop二进制分发目录,再进入对应RPM配置模块执行RPM构建命令。 - 注意区分RPM包的架构标识:
noarch架构的RPM包仅存放架构无关的通用配置、脚本文件,和架构相关的二进制可执行文件会打包在x86_64等对应架构标识的RPM包中,查询包列表时不要遗漏同版本下带架构后缀的安装包。
内容的提问来源于stack exchange,提问作者Prabhjot
相关产品推荐
相关产品推荐

