今天倒腾Hadoop,要修改源码,由于之前搞研究是基于hadoop1.0.3来做的,所以这次也用的这个版本,但是我电脑上Java的版本是1.8以上的,结果用ant编译hadoop源码报错,错误大概是这样:
compile-mapred-classes:
Trying to override old definition of task jsp-compile
[javac] /Users/lili/快盘/hadoop-1.0.3/build.xml:540: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 14 source files to /Users/lili/快盘/hadoop-1.0.3/build/classes
[javac] 警告: [options] 未与 -source 1.6 一起设置引导类路径
[javac] /Users/lili/快盘/hadoop-1.0.3/src/mapred/org/apache/hadoop/mapreduce/lib/partition/InputSampler.java:319: 错误: 不兼容的类型: Object[]无法转换为K[]
[javac] K[] samples = sampler.getSample(inf, job);
[javac] ^
[javac] 其中, K,V是类型变量:
[javac] K扩展已在方法 <K,V>writePartitionFile(Job,Sampler<K,V>)中声明的Object
[javac] V扩展已在方法 <K,V>writePartitionFile(Job,Sampler<K,V>)中声明的Object
[javac] 1 个错误
[javac] 1 个警告
一看估计是Java版本问题导致的,然后就想降低Java版本去编译一次,谁知下载下来个JDK1.7安装确报错,错误类似于这样:
果然一搜索好多人遇到这个问题,在一个博客里找到一个比较好的解决方案,博客地址:http://blog.csdn.net/daiyelang/article/details/42779645,将解决思路copy过来了,如果不妥,请通知删除。解决思路如下:
1.下载 好jdk 1.7(1.8) 地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2.打开下载 好的jdk 安装包的DMG .这时候你会在finder在左侧能看到已经被挂上了。 3.运行:
pkgutil --expand /Volumes/JDK\ 8\ Update\ 05/JDK\ 8\JDK\ 8.pkg /Users/wxxu/Documents/jdk8.unpkg //此处可能每个人的8.pkg文件目录不一样,大家只要进到自己的8.pkg就可以了 解释: 通过pkgutil 命令把刚刚下载好的dmg解压开来,存放到/Users/wxxu/Documents/jdk8.unpkg这个目录中去 4. 走入到/Users/wxxu/Documents/jdk8.unpkg目录中去。你可以通过finder也可以通过终端命令进入。 5. 找到目录下的 Distribution 文件,用vim 或者是编辑器打开。
6. 找到里面的 pm_install_check 这个函数。 function pm_install_check() {
if(!(checkForMacOSX('10.7.3') == true)) {
my.result.title = 'OS X Lion required';
my.result.message = 'This Installer is supported only on OS X 10.7.3 or Later.';
my.result.type = 'Fatal';
return false;
}
return true;
}
你会发现,他在这里去判断 你的系统是不是10.7.3以后的,因为现在Yosemide还不是正式版本,所以在这里会检查不过。 修改成: function pm_install_check() {
return true;
}
保存。
7.然后我们重新打包。命令如下:
pkgutil –flatten /Users/wxxu/Documents/jdk8.unpkg/ /Users/wxxu/Documents/jdk8.pkg 8. 打开 重新打包的jdk8.pkg文件。就会发现可以正常安装了。
安装成功后,再命令行中输入java -version显示如下
java version "1.8.0"Java(TM) SE Runtime Environment (build 1.8.0-b132)Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
然后就心情享受吧!!!