强迫症必治:

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

为了去掉这个警告!

这个本地库是需要根据当前所用的环境编译的,否则就会出现这个警告,但是对我们的任务处理没什么影响。

(但有博主提出:官方给的编译后的包是基于32位jvm编译的,在64位jvm上运行,不能发挥性能优势),既然不能发挥性能优势,那更不能忍了。

1 下载源码包和基本环境

https://archive.apache.org/dist/hadoop/common/

我本次编译采用的是:hadoop-2.5.0

下载hadoop-2.5.0-src.tar.gz文件即可

上传源码文件到目录/home/xuan/opt/softwares下

赋予执行权限:

chmod u+x hadoop-2.5.0-src.tar.gz

解压:

tar –zxf hadoop-2.5.0-src.tar.gz

进入解压后的目录,可以看到一个BUILDING.txt文件

查看其内容,可以看到:

Requirements:

1* Unix System

2* JDK 1.6+

3* Maven 3.0 or later

4* Findbugs 1.3.9 (if running findbugs)

5* ProtocolBuffer 2.5.0

6* CMake 2.6 or newer (if compiling native code)

7* Zlib devel (if compiling native code)

8* openssl devel ( if compiling native hadoop-pipes )

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

条件1:我这里用的系统是CentOS6.4 (64位)

条件2:JDK已经安装,版本: java version "1.7.0_67"

条件3:Maven也已安装:Apache Maven 3.0.5

(maven下载地址https://archive.apache.org/dist/maven/maven-3/,配置可以参考官网、博客,跟java的环境变量配置是类似的)

条件9:必须我们的虚拟机系统必须能联网

2编译准备

切换到root用户

安装svn

yum install svn

(这步可以不做的其实,我们的源码都已经下载好了,不需要通过它去下载,未必有我们自己下载快呢)

条件4:非必须的,适用于查找BUG的

条件6:安装autoconf automake libtool cmake(6,7,8是编译native code需要的)

yum install autoconf automake libtool cmake

条件7:安装ncurses-devel

yum install ncurses-devel

条件8:安装openssl devel

yum install openssl-devel

安装gcc

yum install gcc*

如果使用yum安装上述软件的时候,出现y/n,则直接按下键盘的y就好啦,这个是是否下载一些依赖包吧,其实应该加上-y参数的,反正都要下的。(也有的博主是没做这一步的)

条件5:安装protobuf(必须的)

protoc buffer是hadoop的通信工具

这里要求的是2.5.0版本,但是https://code.google.com/p/protobuf/downloads/list

嗯,之前google code不是不做了嘛。而且FQ也难,于是在

http://www.tuicool.com/articles/jM7Nn2/

上述文章中给的地址中下载了该历史版本

(事实上现在移动到了在github上,的确也能下载到protobuf,点击分支branch,再点击tags,就可以找到2.5.0啦,而且,有的博主使用3.0的版本还报错了呢)

上传到linux的/home/xuan/opt/softwares下

赋予执行权限,解压,并进入所在目录。

执行如下命令安装(要记得进入目录再执行这些命令哦)

./configure

make

make check

make install

这个是源码包的安装方式

http://zyjustin9.iteye.com/blog/2026579

其中make check不是必要的吧,只不过是为了检查是否被第三方给修改了

这个过程有点长哈,不要紧张,哈哈。

(有的博文说要安装完成后,配置环境变量PROTOC_HOME的,我参考的文档没设置,大部分是不设置滴)

其实不设置,直接protoc –version,就可以看到返回:

libprotoc 2.5.0

3编译源码

进入我们源码解压后的目录/home/xuan/opt/softwares/hadoop-2.5.0-src,直接执行如下的命令:

mvn package -Pdist,native -DskipTests –Dtar

这个命令,在中也给我们写好啦:

Create source and binary distributions with native code and documentation:

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

我们主要是native,而不是获取code and documentation,所以就省去,docs,src啦

这个命令的执行过程很长,要求保持网络畅通(我居然从11:30一直编译到近13:00)

(第一次运行该命令的时候我去吃饭啦,回来发现出错,于是…看着黑客表演看了一个半小时呢~\(≧▽≦)/~)

好吧,我的网速是有多慢……………….二三十分种是真的嘛?

4

编译完成后

在/home/xuan/opt/softwares目录的hadoop-2.5.0-src/hadoop-dist/target目录下(即/home/xuan/opt/softwares/hadoop-2.5.0-src/hadoop-dist/target),可以看到

[xuan@xuan-hadoop target]$ ll

total 390200

drwxr-xr-x 2 root root      4096 Aug  1 13:07 antrun

-rw-r--r-- 1 root root      1637 Aug  1 13:07 dist-layout-stitching.sh

-rw-r--r-- 1 root root       654 Aug  1 13:07 dist-tar-stitching.sh

drwxr-xr-x 9 root root      4096 Aug  1 13:07 hadoop-2.5.0

-rw-r--r-- 1 root root 132941160 Aug  1 13:07 hadoop-2.5.0.tar.gz

-rw-r--r-- 1 root root      2745 Aug  1 13:07 hadoop-dist-2.5.0.jar

-rw-r--r-- 1 root root 266585127 Aug  1 13:07 hadoop-dist-2.5.0-javadoc.jar

drwxr-xr-x 2 root root      4096 Aug  1 13:07 javadoc-bundle-options

drwxr-xr-x 2 root root      4096 Aug  1 13:07 maven-archiver

drwxr-xr-x 2 root root      4096 Aug  1 13:07 test-dir

(必要的时候应当改变其所属用户和组吧)

再深入路径,可以在

/home/xuan/opt/softwares/hadoop-2.5.0-src/hadoop-dist/target/hadoop-2.5.0/lib下找到

native,将此目录替换掉

/home/xuan/opt/modules/hadoop-2.5.0/lib下的native目录就好了(当然,原来的那一个要备份啦,不然出问题后悔就来不及啦)

sbin/start-dfs.sh

sbin/start-yarn.sh

再运行一个wordcount示例检验之

bin/Hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount /user/xuan/mapreduce/wordcount/input /user/xuan/mapreduce/wordcount/outputTest

bin/Hadoop dfs –cat /user/xuan/mapreduce/wordcount/outputTest/part*

于是发现,好啦。

这里还有一个坑,编译完测试完,在写本篇作业笔记的时候,发现:

JDK的版本不对了啊,查看了下/etc/profile,发现JAVA_HOME配置是对的

再用echo ${PATH}查看path,并没有发现痕迹,但是卢哥和戴哥指出,在/etc/profile中改为:export PATH=$JAVA_HOME:$PATH就可以啦,因为path本来是从前往后读的,这点我也想到了呀,不然我也不会去查找path,但是path中没发现明显的迹象。而实际上,

[root@xuan-hadoop bin]# pwd

/usr/bin

[root@xuan-hadoop bin]# ll /usr/bin|grep java

-rwxr-xr-x  1 root root       5000 May 10 17:38 gjavah

lrwxrwxrwx  1 root root         22 Aug  1 10:48 java -> /etc/alternatives/java

参考:

http://hyz301.iteye.com/blog/2235331

嗯,source /etc/profile。再次查看java –version,一切就Ok啦。

主要参考:

http://www.cnblogs.com/shishanyuan/p/4164104.html#undefined(本文参考)

http://www.cnblogs.com/hanganglin/p/4349919.html(辅助,对照验证)

https://www.zybuluo.com/awsekfozc/note/213815(可以修改jar包下载的来源,提高编译的速度)

http://linxiao.iteye.com/blog/2269047(从github上下载的protobuf,装了findbugs,没装gcc,估计是它系统就有)

http://liubao0312.blog.51cto.com/2213529/1557657(从集群角度)

http://my.oschina.net/jeeker/blog/619275

hadoop源码编译——2.5.0版本的更多相关文章

  1. hadoop 源码编译

    hadoop 源码编译 1.准备jar 1) hadoop-2.7.2-src.tar.gz 2) jdk-8u144-linux-x64.tar.gz 3) apach-ant-1.9.9-bin. ...

  2. 源码编译安装MySQL8.0

    源码编译安装MySQL8.0 0.前期准备条件 查看linux的版本 [root@mysql etc]# cat /etc/redhat-release CentOS Linux release 7. ...

  3. Hadoop源码编译过程

    一.           为什么要编译Hadoop源码 Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries)的概念,通 ...

  4. Spark记录-源码编译spark2.2.0(结合Hive on Spark/Hive on MR2/Spark on Yarn)

    #spark2.2.0源码编译 #组件:mvn-3.3.9 jdk-1.8 #wget http://mirror.bit.edu.cn/apache/spark/spark-2.2.0/spark- ...

  5. Hadoop源码编译环境搭建

    准备工具: maven 3.0.0版本或者更高版本(配置中心库) protocbuff 2.5.0 http://www.zlib.net/ git bash(Windows环境可以用此工具执行编译命 ...

  6. hadoop源码编译

    为何要自行编译hadoop源码,往往是由于官方提供的hadoop发行版都是基于32位操作系统,在操作hadoop时会发生warn.   准备软件: 1)JDK 2)Hadoop源码 3)Maven 4 ...

  7. 源码编译安装python2/3版本

    1- 源码编译安装python2.7版本 1.1- 下载源码包 wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz 1.2- ...

  8. 源码编译安装MySQL8.0.20

    1 概述 本文章主要讲述了如何从源码编译安装MySQL社区版8.0.20,首先会介绍一些编译安装的相关知识,然后开始编译安装 2 源码编译安装的相关知识 2.1 make与configure make ...

  9. 从ApacheTomcat架构谈面试到源码编译环境v10.0.12

    概述 开启博客分享已近三个月,感谢所有花时间精力和小编一路学习和成长的伙伴们,有你们的支持,我们继续再接再厉 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 Tomcat官 ...

随机推荐

  1. 从微软下载安装Windows10

    如果你需要安装或重新安装 Windows 10,可以通过此页面上的工具,使用 U 盘或 DVD 创建你自己的安装介质. 开始之前 确保你具有以下内容: Internet 连接(可能产生 Interne ...

  2. python3 下的文件输入输出特性以及如何覆盖文件内容和接下去输入

    今天碰到了一个非常有意思的python特性.本来我是想打开一个文件,在文件的末尾接下去输入一些内容的,代码如下: f = open('test.txt', 'r+') f.write(content) ...

  3. hibernate报ExceptionInInitializerError错误

    今天在练习hibernate的criteria接口查询时候报了错: java.lang.ExceptionInInitializerError at test.testThisPro.createCr ...

  4. js jQuery取消添加超链接的方法小结

    今天在工作中需要将某个链接给取消实现只触发事件的目的,后来发现批量取消链接等,脚本之家简单的给整理了下,希望对需要的朋友有所帮助. 单个链接取消链接并触发js事件 <a href="j ...

  5. 【原】浅谈KL散度(相对熵)在用户画像中的应用

    最近做用户画像,用到了KL散度,发现效果还是不错的,现跟大家分享一下,为了文章的易读性,不具体讲公式的计算,主要讲应用,不过公式也不复杂,具体可以看链接. 首先先介绍一下KL散度是啥.KL散度全称Ku ...

  6. JS组件系列——Bootstrap Table 表格行拖拽

    前言:之前一直在研究DDD相关知识,好久没更新JS系列文章了.这两天做了一个简单的业务需求,觉得效果还可以,今天在这里分享给大家,欢迎拍砖~~ 一.业务需求及实现效果 项目涉及到订单模块,那天突然接到 ...

  7. 让Web API支持Protocol Buffers

    简介 现在我们Web API项目基本上都是使用的Json作为通信的格式,随着移动互联网的兴起,Web API不仅其他系统可以使用,手机端也可以使用,但是手机端也有相对特殊的地方,网络通信除了wifi, ...

  8. 这些年学过的FPGA

    这些年学过的FPGA 最近看了老罗的鄙视链是怎样炼成的,联想到FPGA.从2011年底开始接触FPGA到现在已经快接近4个年头了,这四年见证了Altera-FPGA的发展,使用的cyclone系列的芯 ...

  9. CSS选定第k个元素

    <!DOCTYPE html> <html> <head> <title></title> <style type="tex ...

  10. 解决 PHPExcel 长数字串显示为科学计数

    解决 PHPExcel 长数字串显示为科学计数 在excel中如果在一个默认的格中输入或复制超长数字字符串,它会显示为科学计算法,例如身份证号码,解决方法是把表格设置文本格式或在输入前加一个单引号. ...