解决Mac OS 下编译Hadoop Annotations 程序包com.sun.javadoc找不到问题

在Mac上演练Hadoop,但是在启动或执行命令时总显示一个提示,看了很不爽,显示内容如下:
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
意思是不能加载当前平台的本地化hadoop库,类似于Windows上面动态链接库,主要在$HADOOP_HOME/lib/native目录下如下图的文件:
这里写图片描述
解决的办法是在本机进行编译(版本2.6.4),将编译后的本地库拷贝到此目录下,没有hadoop服务启动时,将加载本地库,在Mac OS中,其,而非当前可用的内置java相关的类库。
在利用Maven编译Hadoop的过程中,到了hadoop Annotations子项目时,提示以下编译错误:
“[ERROR]/hadoop-annotations/src/main/java/org/apache/hadoop/classification/tools/ExcludePrivateAnnotationsStandardDoclet.java:[20,22] 错误: 程序包com.sun.javadoc不存在”
在编译前,已经安装了Java SDK,并且设置了JAVA_HOME、CLASSPATG等环境变量,并且安装Hadoop源文件包中提供的Building.txt文件的要求,在JAVA_HOME下建了一个classes目录,并将JRE中tools.jar 包在此目录下作了一个链接文件,应该不是环境的问题,还得查看错误日志,首先发现在编译后,提示一个⚠️:
*[WARNING] Some problems were encountered while building the effective model for org.apache.hadoop:hadoop-main:pom:2.6.4
[WARNING] ‘build.plugins.plugin.version’ for org.apache.maven.plugins:maven-javadoc-plugin is missing. @ line 388, column 19
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.*
提到了maven-javadoc-plugin的版本未提供,找到Hadoop Main项目下的Pom文件,即源码包根目录下的pom.xml,找到第388行,如下:
这里写图片描述
发现确实没有提供版本,查看本机Maven Repository(~/.m2目录下),发现已经有这个插件,是2.8.1版本,在pom文件中,加入这个版本信息,如下图:
这里写图片描述
重新编译,
mvn package -Pdist,native -DskipTests -Dtar -Dmaven.javadoc.skip=true -rf :hadoop-annotations
警告⚠️没有了,但是仍然找不到com.sun.javadoc包,难道是本机安装的脚步问题?查看hadoop-2.6.4-src/hadoop-common-project/hadoop-annotations目录下的POM文件,发现指定的JDK版本为1.7,而本机安装的是1.8,如下图:
这里写图片描述
将版本号改成1.8(本机安装的版本),重新编译,OK,问题解决。
看来Hadoop在不同版本的pom文件中,对Java的版本进行了固化,而不是动态根据当前环境的JAVA版本,造成了很大的困扰,想到此,考虑到是否还有其他pom文件里面对JAVA进行了版本相关的设置,查询一下,看看情况:
find . -name pom.xml |xargs grep requireJavaVersion
./hadoop-assemblies/pom.xml:
./hadoop-assemblies/pom.xml:
./hadoop-project/pom.xml:
./hadoop-project/pom.xml:
./pom.xml:
./pom.xml:
打开查询出来的pom文件,将版本改成本机版本,以免有遇到一些莫名其妙的问题。
能不能在pom中动态获取实际安装的Java版本呢,应该可以,下一步要实验一下,找到一个一劳永逸的办法。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 程序包org.apache.hadoop.io不存在是因为该程序没有成功导入hadoop相关的依赖包。要解决这个问题,可以按照以下步骤进行操作: 1. 首先,确认是否已经正确安装了hadoop。可以通过在终端输入hadoop命令来检查是否已安装。 2. 检查项目的构建配置文件(如pom.xml或build.gradle)中是否正确添加了hadoop的依赖。可以在该文件中添加以下依赖: ``` <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>${hadoop.version}</version> </dependency> ``` 其中`${hadoop.version}`是hadoop的版本号,根据实际情况进行替换。 3. 重新构建或重新加载项目。可以使用构建工具(如Maven或Gradle)重新构建项目,或者重新加载项目以确保依赖包被正确加载。 4. 检查IDE的设置。有时,IDE可能需要手动配置以引用hadoop的依赖包。可以通过编辑IDE的构建路径或模块设置来确保依赖正确加载。 5. 检查hadoop的安装路径和环境变量设置。确保hadoop的安装路径正确,并且在系统的环境变量中正确配置了hadoop的相关路径。 如果以上步骤都执行正确,那么应该能够解决程序包org.apache.hadoop.io不存在”的问题。如有其他问题,请提供更多细节以便进一步帮助解决。 ### 回答2: 程序包org.apache.hadoop.io不存在可能是因为没有正确配置hadoop的依赖库。在使用hadoop相关的代码或项目时,需要将hadoop的相关jar包添加到项目的classpath中。 解决问题的步骤如下: 1. 首先,确认你已经正确安装了hadoop,并且hadoop的环境变量已经配置好。 2. 确保你的项目中已经包含了hadoop相关的jar包,比如hadoop-core.jar。 3. 检查你的项目的构建配置文件,比如pom.xml(如果是使用maven构建项目),确认依赖项中是否包含了hadoop相关的依赖。 4. 确认你的项目的classpath是否正确设置了hadoop的jar包路径。 5. 如果上述步骤都没有问题,可以尝试重新导入hadoop的jar包,并重新编译运行项目。 总之,解决程序包org.apache.hadoop.io不存在的问题,需要确认hadoop的相关依赖已经正确配置,并且项目的classpath中包含了hadoop的jar包。 ### 回答3: 程序包org.apache.hadoop.io不存在是因为你的项目缺少Apache Hadoop库的依赖。 Apache Hadoop是一个开源的分布式存储和处理大数据的框架,它提供了一些用于处理数据和文件的工具类和接口。org.apache.hadoop.io包含了一些基本的数据类型和输入输出类,用于在Hadoop中读取和写入数据。 要解决这个问题,你需要在你的项目中添加Hadoop库的依赖。具体的步骤取决于你使用的构建工具,比如Maven或Gradle。 如果你使用Maven,你可以在pom.xml文件中添加以下依赖: ```xml <dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>3.2.1</version> </dependency> </dependencies> ``` 上面的代码会引入hadoop-client库,版本为3.2.1。你可以根据你实际使用的Hadoop版本进行调整。 如果你使用Gradle,你可以在build.gradle文件中添加以下依赖: ```groovy dependencies { implementation 'org.apache.hadoop:hadoop-client:3.2.1' } ``` 添加完依赖后,重新构建你的项目,编译错误应该就会消失了。 总之,解决程序包org.apache.hadoop.io不存在的方法就是添加Apache Hadoop库的依赖,并确保依赖的版本与你使用的Hadoop版本兼容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值