强迫症必治:

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. 【转】How to hire——创业公司应该如何招人

    How to hire After startups raise money, their next biggest problem becomes hiring.  It turns out it’ ...

  2. 用Lua扩展谷歌拼音输入法

    谷歌拼音输入法最后一次更新是2013年,最近2年毫无动静,这个产品应该已经停了,不过这并不影响对它的使用,我一直喜欢它的简洁和稳定. 说不上来什么原因,忽然想起了摆弄摆弄谷歌拼音输入法的扩展特性(我经 ...

  3. EF6 Create Different DataContext on runtime(运行时改变连接字符串)

    引言   在使用EF时,有时我们需要在程序运行过程中动态更改EF的连接字符串,但不幸的时EF是否对 ConfigurationManager.RefreshSection("xxx" ...

  4. 【Python网络编程】利用Python进行TCP、UDP套接字编程

    之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验. 流程如下: 1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接 ...

  5. c++中this指针的用法

    1. this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果.this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将 ...

  6. Visual Studio 2013支持Xamarin的解决方案

    转自博客园[遗忘的代码] Xamarin的Visual Studio插件目前还不支持VS 2013,所以需要在安装Xamarin的VS插件时把2010和2012全选上 (由于我的电脑里只剩2013,而 ...

  7. jdbc java数据库连接 2)jdbc接口核心的API

    JDBC接口核心的API java.sql.*   和  javax.sql.*(java2.0以后更新的扩展) |- Driver接口: 表示java驱动程序接口.所有的具体的数据库厂商要来实现此接 ...

  8. PL/SQL 如何查看当前连接信息以及SQL PLUS如何指定IP地址

    1.通过PL/SQL 想连接别的数据库可以通过在服务名前面加上IP和左斜线来实现: 2.有时我们的IP和左斜线不用输也能连别的数据库,是因为在一个文件里配置好了.这个文件在哪里? 在这个路径下的 NE ...

  9. java并发编程学习: 原子变量(CAS)

    先上一段代码: package test; public class Program { public static int i = 0; private static class Next exte ...

  10. ReactNative新手学习之路01-创建项目开始

    新手学习之路01-创建项目开始 小菜鸟准备学习RN开发,决定写下自己的学习历程,方便其他也想要学习RN的人,后期会持续更新写下自己所有学习经历,一步步从菜鸟成长成业内高手.开发环境准备,本文默认环境已 ...