最近搞搞hadoop,感觉还不错。
但是就是在VirtualBox里面装完hadoop后,每次执行命令,都会提示一个WARNING:
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
是每一个命令都会提示,不能忍啊,更何况我有“轻微的”强迫症。
上网搜索了一下,根据文献1,原来坑爹的是apache,官网上编译好的hadoop是32位的。
这……
我想爆粗~~~~现在哪家公司的服务器还用32位的啊?
解决方案暴力直接:下载源码重新编译,然后替换native库。
呃,如果真的很简单我就不多说了,可是还是稍微有点麻烦。
分几步走:
一、下载
1. 下载对应版本的hadoop源码,这里以当前最新的2.6.4版本为例(http://hadoop.apache.org/releases.html)。
2. 下载protoc2.5.0版本(http://protobuf.googlecode.com/files/protobuf-2.5.0.zip)。
3. 下载maven最新版本,以3.3.9为例(http://maven.apache.org/download.cgi)。
4. 预先装好jdk等东西(这个是hadoop安装的前提,我就不多说了哈)。
二、安装protoc
三、安装maven这个东西最难还是在下载这一步,因为yum没发安装,而网上贴的都是官网或者github的链接,github的源码下来了也不懂安装啊。
而官网只有2.6版本的,不行啊,一定要2.5.0。
找啊找啊找朋友,终于找到了1.2 的那个链接的2.3.0版本,机智的我改了一下版本号,居然可以下载。
安装简单:
unzip protobuf-2.5.0.zip
cd protobuf-2.5.0
./configure
make
make install
说是安装,其实就是解压和配路径。
tar xf apache-maven-3.3.9-bin.tar.gz
mv apache-maven-3.3.9 maven #
cp -R maven /opt/ # 个人习惯和建议,因为linux和windows不同,不同用户访问权限不一样的,还是放在一个公共目录,大家都能用。
chmod 755 /opt/maven
rm -rf maven # 删除当前解压出来的东西。
vi .bashrc
# 进行路径配置
PATH=/opt/maven/bin:$PATH # 请根据实际情况处理
export PATH
vi /opt/maven/conf/settings.xml
# 进行仓库路径的配置
# 在 settings 标签里面添加如下内容:
<localRepository>/opt/maven/.m2/repository</localRepository>
# 结果应该和下面这张图类似:
# 这一步的作用是配置好maven的仓库路径,这样服务器上所有用户都能用这个仓库,不用每个人都重新下载。
四、编译hadoop:
tar xf hadoop-2.6.4-src.tar.gz
cd hadoop-2.6.4-src
mvn package -Dmaven.javadoc.skip=true -Pdist,native -DskipTests -Dtar
然后经过漫长的等待之后(如果下载速度过慢,可以自行按照参考文献1配置国内的源:开源中国,这样会快点,公司自备等云梯,我就不配置了),
可以看到:
[INFO] BUILD SUCCESS
表示编译完成。
进入hadoop-dist/target目录,把刚刚的编译好的包拷贝出来找到native库并替换掉:
cd $HADOOP_HOME/lib
tar cf native.tar.gz native # 养成良好习惯,先备份
mkdir -p ~/tmp
cp hadoop-2.6.4.tar.gz ~/tmp/
cd ~/tmp
tar xf hadoop-2.6.4.tar.gz
cd hadoop-2.6.4/lib
cp -Rf native $HADOOP_HOME/lib
然后在 $HADOOP_HOME/etc/hadoop/hadoop-env.sh 文件末尾加上如下这句话:
vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_HOME/lib/native"
五、重启hadoop:
六、测试:stop-all.sh
start-all.sh
hdfs dfs -ls
可能会有的报错:
如果你按照我上面这样子来做,不会报错的啦,报错就留言吧。
-----------------------------------
参考文献: