阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

64位CentOS上编译 Hadoop 2.2.0

144次阅读
没有评论

共计 4079 个字符,预计需要花费 11 分钟才能阅读完成。

下载了 Hadoop 预编译好的二进制包,hadoop-2.2.0.tar.gz,启动起来后,总是出现这种警告:
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

 原因是 apache 官网提供的二进制包,里面的 native 库,是 32 位的,坑跌啊,现在服务器谁还有 32 位的啊。
$ file $HADOOP_PREFIX/lib/native/libhadoop.so.1.0.0
libhadoop.so.1.0.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x9eb1d49b05f67d38454e42b216e053a27ae8bac9, not stripped

 我们需要下载 Hadoop 2.2.0 源码,在 64 位 Linux 下重新编译,然后把 32 位的 native 库用 64 位的 native 库替换。

1. 下载 Hadoop 2.2.0 源码包,并解压
$ wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.2.0/hadoop-2.2.0-src.tar.gz
$ tar zxf hadoop-2.2.0-src.tar.gz

 2. 安装下面的软件
 $ sudo yum install cmake lzo-devel  zlib-devel  gcc autoconf automake libtool  ncurses-devel openssl-deve

 3. 安装 Maven

安装 Maven 3.1.4
$ wget http://mirror.esocc.com/apache/maven/maven-3/3.1.4/binaries/apache-maven-3.1.4-bin.tar.gz
$ sudo tar zxf apache-maven-3.1.4-bin.tar.gz -C /opt
$ sudo vim /etc/profile
export MAVEN_HOME=/opt/apache-maven-3.1.4
export PATH=$PATH:$MAVEN_HOME/bin

 注销并重新登录,让环境变量生效。

4. 安装 Ant
$ wget http://apache.dataguru.cn//ant/binaries/apache-ant-1.9.4-bin.tar.gz
$ sudo tar zxf apache-ant-1.9.4-bin.tar.gz -C /opt
$ sudo vim /etc/profile
export ANT_HOME=/opt/apache-ant-1.9.4
export PATH=$PATH:$ANT_HOME/bin

 5. 安装 Findbugs
$ wget http://prdownloads.sourceforge.net/findbugs/findbugs-2.0.3.tar.gz?download
$ sudo tar zxf findbugs-2.0.3.tar.gz -C /opt
$ sudo vim /etc/profile
export FINDBUGS_HOME=/opt/findbugs-2.0.3
export PATH=$PATH:$FINDBUGS_HOME/bin

 6. 安装 protobuf

编译 Hadoop 2.2.0,需要 protobuf 的编译器 protoc。一定需要 protobuf 2.5.0 以上,yum 里的是 2.3,太老了。因此下载源码,编译安装。
$ wget https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz
$ tar zxf protobuf-2.5.0.tar.gz
$ cd protobuf-2.5.0
$ ./configure
$ make
$ sudo make install

 7. 给 Hadoop 源码打一个 patch

最新的 Hadoop 2.2.0 的 Source Code 压缩包解压出来的 code 有个 bug 需要 patch 后才能编译。否则编译 hadoop-auth 会提示下面错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:testCompile (default-testCompile) on project hadoop-auth: Compilation failure: Compilation failure:
[ERROR] /home/chuan/trunk/hadoop-common-project/hadoop-auth/src/test/java/org/apache/hadoop/security/authentication/client/AuthenticatorTestCase.java:[84,13] cannot access org.mortbay.component.AbstractLifeCycle
[ERROR] class file for org.mortbay.component.AbstractLifeCycle not found

 Patch:  https://issues.apache.org/jira/browse/HADOOP-10110

 wget https://issues.apache.org/jira/secure/attachment/12614482/HADOOP-10110.patch; patch -p0 < HADOOP-10110.patch 

8. 编译 Hadoop
cd hadoop-2.2.0-src
mvn package -DskipTests -Pdist,native -Dtar

 9. 替换掉 32 位的 native 库

 用  hadoop-2.2.0-src/hadoop-dist/target/hadoop-2.2.0/lib/native  替换掉  hadoop-2.2.0/lib/native。
rm -rf ~/local/opt/hadoop-2.2.0/lib/native
cp ./hadoop-dist/target/hadoop-2.2.0/lib/native ~/local/opt/hadoop-2.2.0/lib/

 然后重启 Hadoop 集群,会看到控制台下不再有警告信息了。

10 解决 Ubuntu 下启动失败的问题

 在 Ubuntu 上,那就不是一点 WARN 了,而是启动不起来,会出错,原因在于,在 ./sbin/start-dfs.sh 第 55 行,
NAMENODES=$($HADOOP_PREFIX/bin/hdfs getconf -namenodes)

 在 shell 里单独运行这样命令,
./bin/hdfs getconf -namenodes

OpenJDK 64-Bit Server VM warning: You have loaded library /home/soulmachine/local/opt/hadoop-2.2.0/lib/native/libhadoop.so which might have disabled stack guard. The VM will try to fix the stack guard now.
It’s highly recommended that you fix the library with ‘execstack -c <libfile>’, or link it with ‘-z noexecstack’.
14/02/14 13:14:50 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
localhost

 最后一行的 localhost,才是有效的 namenode,但是由于前面有一大堆 warning,脚本把这一大堆字符串,按空格隔开,每个单词都看作是 namenode,接下来就错的稀里哗啦。

根本原因,还是因为 32 位 native 库。

————————————– 分割线 ————————————–

Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm

Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm

Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm

Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm

单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm

————————————– 分割线 ————————————–

把自带的 32 位 native 目录删除,用编译好的 64 位 native 目录拷贝过去,再运行
./bin/hdfs getconf -namenodes
localhost

 这下就对了!

更多 Hadoop 相关信息见 Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计4079字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中