编译hadoop-2.6.0
首先,一开始的问题是在学习《hadoop权威指南》的时候学到了压缩这节,就去了解了一下压缩需要安装类库,hadoop-2.6.0/lib/native库里面有东西,hadoop checknative却显示里面全部都是false。查了资料才发现,这说明hadoop是未编译的。我这里用的是CentOS6系统。最好全程使用root用户来操作,省的遇到麻烦。步骤很长,但请耐心操作,否则容易编译失败。
如何知道你的native库是否已经编译过:
[root@master hadoop-2.6.0]# hadoop checknative
Native library checking:
hadoop: false
zlib: false
snappy: false
lz4: false
bzip2: false
这就表示还没有编译。
为何native库不编译就报Unable to load native-hadoop library的信息:
具体报错为:
java.lang.UnstatisfiedLinkError:
/usr/local/hadoop-2.6.0/lib/native/libhadoop.so.1.0.0:/lib64/libc.so.6: version 'GLIBC 2.14' not found
意思是hadoop native的libhadoop.so.1.0.0需要编译的版本为GLIBC 2.14,而在本地linux上没找到
查看hadoop native的GLIBC支持的版本:
[root@master native]# strings libhadoop.so.1.0.0 | grep GLIBC
GLIBC_2.2.5
GLIBC_2.12
GLIBC_2.7
GLIBC_2.14
GLIBC_2.6
GLIBC_2.4
GLIBC_2.3.4
查看本地linux的GLIBC版本
[root@master native]# strings /lib64/libc.so.6 | grep GLIBC
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
上面信息可见,在linux上没有GLIBC 2.14,因此报错,处理方式只能是将hadoop源码在本地linux上用本地c库来编译,这样在跑hadoop时就会用本地的c库。
参考了一大堆的文章和经历了一大堆的失败之后,终于把所有需要安装的东西都配齐,照着顺序一步一步走,是不会失败的了已经。
安装hadoop用的是hadoop-2.6.0.tar.gz,这是可以直接使用的版本,但并没有编译,想要编译的话,需要下载hadoop-2.6.0-src.tar.gz才能够安装。
下载完了之后,安装不是一帆风顺的,会报很多错误。在出错重来之前,先把准备工作做好。
1、jdk7
首先是先安装java1.7,这是因为有一些需要中途安装的插件会出现高版本的jdk无法安装的情况,更新插件又会出现低版本无法更新的情况,因此,先在环境变量中把原来的jdk的配置加上#号,如下:
vim /etc/profile
#export JAVA_HOME=.../jdk1.8.0_121
#export PATH=$PATH:$JAVA_HOME/bin
然后,再下载jdk1.7.0_80,下载完之后是jdk-7u80-linux-x64.tar.gz
先解压:tar -zxvf jdk-7u80-linux-x64.tar.gz 得到jdk1.7.0_80
然后再配置环境变量:
export JAVA_HOME=.../jdk1.7.0_80
export PATH=$PATH:$JAVA_HOME/bin
每次更改环境变量,都要记得刷新 source /etc/profile,每个用户都需要刷新。
这里会出现一个问题就是JDK版本切换不过来
使用
java -version
查看是否有转换过来,如果没有转换过来,可以手动给他转过来
方法就是:
先查看一下java和javac的位置
which java
which javac
这两句话分别显示的是java和javac的位置,刷新不过来很正常。记住出现了的两个地址,然后
rm