生产环境中hadoop一般会选择64位版本,官方下载的hadoop安装包中的native库是32位的,因此运行64位版本时,需要自己编译64位的native库,并替换掉自带native库。

源码包下的BUILDING.txt,包含官方介绍,如:如何在linux、windows下编译;编译过程中的错误处理;将源码导入eclipse中的步骤等,推荐看一看。

本文环境同:hadoop2.5.2学习及实践笔记(一)—— 伪分布式学习环境搭建

一.编译源码

附:常用工具包网盘路径(部分包非编译时使用):http://pan.baidu.com/s/1c0evtgW

BUILDING.txt文档列举的linux中编译条件如下:

* Unix System

* JDK 1.6+

* Maven 3.0 or later

* Findbugs 1.3.9 (if running findbugs)

* ProtocolBuffer 2.5.0

* CMake 2.6 or newer (if compiling native code)

* Zlib devel (if compiling native code)

* openssl devel ( if compiling native hadoop-pipes )

* Internet connection for first build (to fetch all Maven and Hadoop dependencies)

注:jdk建议使用1.7,楼主使用1.8编译时报错,换回1.7编译成功。

编译过程

  1.  linux系统包安装

# yum install cmake lzo-devel  zlib-devel  gcc autoconf automake libtool   ncurses-devel openssl-devel

  

  2. 安装Maven、Ant、Findbugs

  >解压tar包,并将解压后的目录移动到安装路径

  >配置环境变量

# vim /etc/profile

export MAVEN_HOME=/opt/apache-maven-3.1.4
export ANT_HOME=/opt/apache-ant-1.9.
export FINDBUGS_HOME=/opt/findbugs-2.5.0
export PATH=$PATH:$MAVEN_HOME/bin:$ANT_HOME/bin:$FINDBUGS_HOME/bin

  >环境变量生效

# source /etc/rofile

  >maven国内镜像配置

  修改MAVEN_HOME/conf/settings.xml文件<mirrors>内容

 <mirror>
<id>nexus-osc</id>
<mirrorOf>*</mirrorOf>
<name>Nexus osc</name>
<url>http://maven.oschina.net/content/groups/public/</url>
</mirror>

  3.从源码安装protobuf

  >解压tar包,并进入解压后的根目录

  >编译并安装

# ./configure
# make
# sudo make install

  >验证安装

# protoc --version

  

  4.编译hadoop源码

  >解压源码tar包,并进入解压后的根目录

$ mvn package -DskipTests -Pdist,native -Dtar

  >其他编译选项

  附:BUILDING.txt中原文

  Create binary distribution without native code and without documentation:

  $ mvn package -Pdist -DskipTests -Dtar

 

  Create binary distribution with native code and with documentation:

  $ mvn package -Pdist,native,docs -DskipTests -Dtar

 

  Create source distribution:

  $ mvn package -Psrc -DskipTests

 

  Create source and binary distributions with native code and documentation:

  $ mvn package -Pdist,native,docs,src -DskipTests -Dtar

 

  Create a local staging version of the website (in /tmp/hadoop-site)

  $ mvn clean site; mvn site:stage -DstagingDirectory=/tmp/hadoop-site

  >编译过程中内存溢出错误处理

  编译前设置MAVEN_OPTS环境变量

export MAVEN_OPTS="-Xms256m -Xmx512m" --内存大小自己调节

  

  附:BUILDING.txt中原文

   If the build process fails with an out of memory error, you should be able to fix it by increasing the memory used by maven

  which can be done via the environment variable MAVEN_OPTS.

  Here is an example setting to allocate between 256 and 512 MB of heap space to Maven

  export MAVEN_OPTS="-Xms256m -Xmx512m"

  5.替换native库

  >编译后native路径:Hadoop-2.5.2-src/hadoop-dist/target/hadoop-2.5.2/lib/native

  未替换前,调用相关脚本会报警告,如:

[hadoop@localhost hadoop-2.5.]$ ./sbin/stop-dfs.sh
// :: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Stopping namenodes on [localhost]
localhost: stopping namenode
localhost: stopping datanode
Stopping secondary namenodes [0.0.0.0]
0.0.0.0: stopping secondarynamenode
// :: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

  编译后,替换掉native目录下文件后,不会再提示警告

[hadoop@localhost hadoop-2.5.]$ ./sbin/start-dfs.sh
Starting namenodes on [localhost]
localhost: starting namenode, logging to /opt/modules/hadoop-2.5./logs/hadoop-hadoop-namenode-localhost.localdomain.out
localhost: starting datanode, logging to /opt/modules/hadoop-2.5./logs/hadoop-hadoop-datanode-localhost.localdomain.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode, logging to /opt/modules/hadoop-2.5./logs/hadoop-hadoop-secondarynamenode-localhost.localdomain.out

二. 导入源码到eclipse

  1. 安装hadoop-maven-plugins

进入源码下hadoop-maven-plugins目录,执行命令:

$ mvn install

  2. 生成eclipse项目文件

返回源码根目录,执行:

$ mvn eclipse:eclipse -DskipTests

3. 导入eclipse

[File] > [Import] > [Existing Projects into Workspace]

  4. 导入后错误解决

  >hadoop-streaming中build path错误:

  Java Build Path->Source:删除 hadoop-yarn-server-resourcemanager/conf

  

  >AvroRecord相关错误

  a. 下载avro-tools-1.7.4.jar

  b. 执行命令

$ cd hadoop-2.5.-src/hadoop-common-project/hadoop-common/src/test/avro
$ java -jar avro-tools所在目录/avro-tools-1.7..jar compile schema avroRecord.avsc ../java

  c. eclipse刷新项目

  

  >protobuf相关错误

  a. 执行命令

$ cd hadoop-2.5.-src/hadoop-common-project/hadoop-common/src/test/proto
$ protoc --java_out=../java *.proto

  b. eclipse刷新项目

  附:BUILDING.txt中原文

  Importing projects to eclipse

  When you import the project to eclipse, install hadoop-maven-plugins at first.

  $ cd hadoop-maven-plugins

  $ mvn install 

  Then, generate eclipse project files.

  $ mvn eclipse:eclipse -DskipTests

  At last, import to eclipse by specifying the root directory of the project via

  [File] > [Import] > [Existing Projects into Workspace].

hadoop2.5.2学习及实践笔记(二)—— 编译源代码及导入源码至eclipse的更多相关文章

  1. hadoop2.5.2学习及实践笔记(四)—— namenode启动过程源码概览

    对namenode启动时的相关操作及相关类有一个大体了解,后续深入研究时,再对本文进行补充 >实现类 HDFS启动脚本为$HADOOP_HOME/sbin/start-dfs.sh,查看star ...

  2. hadoop2.5.2学习及实践笔记(六)—— Hadoop文件系统及其java接口

    文件系统概述 org.apache.hadoop.fs.FileSystem是hadoop的抽象文件系统,为不同的数据访问提供了统一的接口,并提供了大量具体文件系统的实现,满足hadoop上各种数据访 ...

  3. hadoop2.5.2学习及实践笔记(五)—— HDFS shell命令行常见操作

    附:HDFS shell guide文档地址 http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-common/FileSy ...

  4. hadoop2.5.2学习及实践笔记(三)—— HDFS概念及体系结构

    注:文中涉及的文件路径或配置文件中属性名称是针对hadoop2.X系列,相对于之前版本,可能有改动. 附: HDFS用户指南官方介绍: http://hadoop.apache.org/docs/r2 ...

  5. hadoop2.5.2学习及实践笔记(一)—— 伪分布式学习环境搭建

    软件 工具:vmware 10 系统:centOS 6.5  64位 Apache Hadoop: 2.5.2  64位 Jdk:  1.7.0_75  64位 安装规划 /opt/softwares ...

  6. 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

    作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...

  7. 并发编程学习笔记(9)----AQS的共享模式源码分析及CountDownLatch使用及原理

    1. AQS共享模式 前面已经说过了AQS的原理及独享模式的源码分析,今天就来学习共享模式下的AQS的几个接口的源码. 首先还是从顶级接口acquireShared()方法入手: public fin ...

  8. 并发编程学习笔记(8)----ThreadLocal的使用及源码分析

    1. ThreadLocal的理解 ThreadLocal,顾名思义,就是线程的本地变量,ThreadLocal会为每个线程创建一个本地变量副本,使得使用ThreadLocal管理的变量在多线程的环境 ...

  9. Spring源码学习01:IntelliJ IDEA2019.3编译Spring5.3.x源码

    目录 Spring源码学习01:IntelliJ IDEA2019.3编译Spring5.3.x源码 前言 工欲善其事必先利其器.学习和深读Spring源码一个重要的前提:编译源码到我们的本地环境.这 ...

随机推荐

  1. YTU 2605: 熟悉题型——自由设计(比较大小-类模板)

    2605: 熟悉题型--自由设计(比较大小-类模板) 时间限制: 1 Sec  内存限制: 128 MB 提交: 125  解决: 107 题目描述 声明一个类模板,利用它分别实现两个整数.浮点数和字 ...

  2. git(icode)分支及发布管理方式

    如果git(icode)不加管理,可能出现枝节蔓生.四处开放的版本库.到处都是分支,完全看不出主干发展的脉络,造成下图的局面: 为了降低合并和版本管理的成本,团队引入一种值得借鉴的管理方式(link) ...

  3. hdu2847(暴力)

    去年看的一道题目,但是竟然傻傻的用dfs+循环链表去做. 简直傻到爆.  不过现在做这题还是想了好久而且还有好几次WA,其实这题还是很水的.直接暴力枚举就行了,枚举的前提是要算好复杂度, 可以知道的是 ...

  4. JAVA使用JNI调用C++动态链接库

    JAVA使用JNI调用C++动态链接库 使用JNI连接DLL动态链接库,并调用其中的函数 首先 C++中写好相关函数,文件名为test.cpp,使用g++编译为DLL文件,指令如下: g++ -sha ...

  5. C#操作文件

    c# 操作txt文件 # 操作txt文件 c#创建文本 private const string FILE_NAME = "ErroLog.txt"; public static ...

  6. UVa 1611 (排序 模拟) Crane

    假设数字1~i-1已经全部归位,则第i到第n个数为无序区间. 如果i在无序区间的前半段,那么直接将i换到第i个位置上. 否则先将i换到无序区间的前半段,再将i归位.这样每个数最多操作两次即可归位. # ...

  7. 原创:无错版!让DEDE只生成一个RSS文件,不分栏目

    DEDE为每一个栏目都独立创建一个rss文件, 如果用户要整站订阅相当不方便.  所以需要修改让dede只生成一个rss. 网上大部分帖子要么是抄, 要么是有问题少了步骤. 今天特意整理下. 分享.. ...

  8. HDU 5273 Dylans loves numbers(水题)

    题意:给出一个0≤N≤1018,求其二进制中有几处是具有1的,假设相连的1只算1处,比如1101011就是3处. 思路:一个个数,当遇到第一个1时就将flag置为1:当遇到0就将flag置为0.当遇到 ...

  9. scala学习笔记(7):函数(1)

    函数是Scala的第一公民! 1  基本定义 scala> def max(x: Int, y: Int): Int = { if (x > y) x else y } 跟着是括号里带有冒 ...

  10. T-SQL备忘(2):聚合函数运算和NULL

    我们看表的数据: 而select AVG(Age) from Member1的结果为27.自己算一下就知道136/6 =22.666.而不是27,因此知道实际上Age为NULL的行没有参与运算.即: ...