下载了Hadoop预编译好的二进制包,hadoop-2.2.0.tar.gz,启动起来后。总是出现这样的警告:

  1. WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

原因是apache官网提供的二进制包,里面的native库。是32位的,坑跌啊,如今server谁还有32位的啊。

  1. $ file $HADOOP_PREFIX/lib/native/libhadoop.so.1.0.0
  2. 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 源代码包,并解压

  1. $ wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.2.0/hadoop-2.2.0-src.tar.gz
  2. $ tar zxf hadoop-2.2.0-src.tar.gz

2. 安装以下的软件

  1. $ sudo yum install cmake lzo-devel zlib-devel gcc autoconf automake libtool ncurses-devel openssl-deve

3. 安装Maven

安装 Maven 3.1.4

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

注销并又一次登录,让环境变量生效。

4. 安装Ant

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

5. 安装Findbugs

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

6. 安装protobuf

编译Hadoop 2.2.0,须要protobuf的编译器protoc。

一定须要protobuf 2.5.0以上,yum里的是2.3,太老了。

因此下载源代码,编译安装。

  1. $ wget https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz
  2. $ tar zxf protobuf-2.5.0.tar.gz
  3. $ cd protobuf-2.5.0
  4. $ ./configure
  5. $ make
  6. $ sudo make install

7. 给Hadoop源代码打一个patch

最新的Hadoop 2.2.0 的Source Code 压缩包解压出来的code有个bug 须要patch后才干编译。否则编译hadoop-auth 会提示以下错误:

  1. [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:
  2. [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
  3. [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

  1. cd hadoop-2.2.0-src
  2. 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

  1. rm -rf ~/local/opt/hadoop-2.2.0/lib/native
  2. 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行。

  1. NAMENODES=$($HADOOP_PREFIX/bin/hdfs getconf -namenodes)

在shell里单独执行这样命令,

  1. ./bin/hdfs getconf -namenodes
  2. 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.
  3. It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
  4. 14/02/14 13:14:50 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  5. localhost

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

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

把自带的32位native文件夹删除。用编译好的64位native文件夹拷贝过去,再执行

  1. ./bin/hdfs getconf -namenodes
  2. localhost

这下就对了!

64位CentOS上编译 Hadoop 2.2.0的更多相关文章

  1. 64位centos 下编译 hadoop 2.6.0 源码

    64位os下为啥要编译hadoop就不解释了,百度一下就能知道原因,下面是步骤: 前提:编译源码所在的机器,必须能上网,否则建议不要尝试了 一. 下载必要的组件 a) 下载hadoop源码 (当前最新 ...

  2. CentOS 6.4 64位 源码编译hadoop 2.2.0

    搭建环境:Centos 6.4 64bit 1.安装JDK 参考这里2.安装mavenmaven官方下载地址,可以选择源码编码安装,这里就直接下载编译好的wget http://mirror.bit. ...

  3. mac OS X Yosemite 上编译hadoop 2.6.0/2.7.0及TEZ 0.5.2/0.7.0 注意事项

    1.jdk 1.7问题 hadoop 2.7.0必须要求jdk 1.7.0,而oracle官网已经声明,jdk 1.7 以后不准备再提供更新了,所以趁现在还能下载,赶紧去down一个mac版吧 htt ...

  4. 64位 CentOS NDK 编译 FFMPEG

    64位 CentOS NDK 编译 FFMPEG 一.           参考文章: http://www.cnblogs.com/baopu/p/4733029.html http://www.c ...

  5. CentOS 64位上编译 Hadoop 2.6.0

    Hadoop不提供64位编译好的版本号,仅仅能用源代码自行编译64位版本号. 学习一项技术从安装開始.学习hadoop要从编译開始. 1.操作系统编译环境 yum install cmake lzo- ...

  6. 在64位linux上编译32位程序 for i386 intel

    编辑中 # ld -V GNU ld version 2.15.92.0.2 20040927 Supported emulations: elf_x86_64 elf_i386 i386linux ...

  7. 64位Win7下编译hadoop 1.2.1问题解决

    0.报sed的错误.原因在于没有安装cygwin.安装cygwin的时候要选择sed 1.Cannot run program "autoreconf". 这个问题在网上看了很多解 ...

  8. 在64位Ubuntu上编译32位程序常见错误

    问       题1: 找不到头文件 asm/errno.h 解决办法 : [/usr/lib/gcc$ ]sudo ln -s x86_64-linux-gnu/asm asm 问题2:找不到gcc ...

  9. 在Ubuntu 64位OS上运行hadoop2.2.0[重新编译hadoop]

    最近在学习搭建Hadoop, 我们从Apache官方网站直接下载最新版本Hadoop2.2.官方目前是提供了linux32位系统可执行文件,结果运行时发现提示 “libhadoop.so.1.0.0 ...

随机推荐

  1. 文件上传功能 -- jquery.form.js/springmvc

    距离上一篇 文件上传下载样式 -- bootstrap(http://www.cnblogs.com/thomascui/p/5370947.html)已经三周时间了,期间一直考虑怎么样给大家提交一篇 ...

  2. CodeForces 452C Magic Trick (排列组合)

    #include <iostream> #include <cstdio> #include<cmath> #include<algorithm> us ...

  3. entity framework 中一些常用的函数 转自http://www.cnblogs.com/williamzhu/

    一般查询 var Courses = db.Courses.Where(c => c.Title == "Physics").OrderBy(c => c.Title) ...

  4. iOS 中UITableViewController 中tableView 会被状态栏覆盖的问题

    解决办法在 生命周期函数viewDidAppear中设置即可 - (void)viewDidAppear:(BOOL)animated { self.tableView.frame = CGRectM ...

  5. Tomcat启动报Error listenerStart错误

    http://xpenxpen.iteye.com/blog/1545648 今天启动Tomcat启动不了,报以下错: org.apache.catalina.core.StandardContext ...

  6. 线段树讲解(数据结构、C++)

    声明    : 仅一张图片转载于http://www.cnblogs.com/shuaiwhu/archive/2012/04/22/2464583.html,自己画太麻烦了...那个博客的讲解也很好 ...

  7. 系统变量写在.bash_profile和.bashrc的区别

    今天配置一个代理,正儿八经的把我搞蒙了,不就是export http_porxy=xxx.xxx.xxx.xxx:xxxx 然后重启服务service network restart ,依然连接不了外 ...

  8. GBK转utf-8,宽字符转窄字符

    //GBK转UTF8 string CAppString::GBKToUTF8(const string & strGBK) { string strOutUTF8 = "" ...

  9. ORA-20000: ORU-10027: buffer overflow, limit of 10000 bytes

        要用dbms_output.put_line来输出语句,遇到以下错误: ERROR 位于第 1 行: ORA-20000: ORU-10027: buffer overflow, limit ...

  10. Delphi程序自删除的几种方法

    program Project1; uses SysUtils, windows; var f:textfile; a:string; begin a:=paramstr(); assignfile( ...