hadoop源码编译——2.5.0版本
强迫症必治:
|
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 参考: |
嗯,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版本的更多相关文章
- 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. ...
- 源码编译安装MySQL8.0
源码编译安装MySQL8.0 0.前期准备条件 查看linux的版本 [root@mysql etc]# cat /etc/redhat-release CentOS Linux release 7. ...
- Hadoop源码编译过程
一. 为什么要编译Hadoop源码 Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries)的概念,通 ...
- 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- ...
- Hadoop源码编译环境搭建
准备工具: maven 3.0.0版本或者更高版本(配置中心库) protocbuff 2.5.0 http://www.zlib.net/ git bash(Windows环境可以用此工具执行编译命 ...
- hadoop源码编译
为何要自行编译hadoop源码,往往是由于官方提供的hadoop发行版都是基于32位操作系统,在操作hadoop时会发生warn. 准备软件: 1)JDK 2)Hadoop源码 3)Maven 4 ...
- 源码编译安装python2/3版本
1- 源码编译安装python2.7版本 1.1- 下载源码包 wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz 1.2- ...
- 源码编译安装MySQL8.0.20
1 概述 本文章主要讲述了如何从源码编译安装MySQL社区版8.0.20,首先会介绍一些编译安装的相关知识,然后开始编译安装 2 源码编译安装的相关知识 2.1 make与configure make ...
- 从ApacheTomcat架构谈面试到源码编译环境v10.0.12
概述 开启博客分享已近三个月,感谢所有花时间精力和小编一路学习和成长的伙伴们,有你们的支持,我们继续再接再厉 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 Tomcat官 ...
随机推荐
- 【转】How to hire——创业公司应该如何招人
How to hire After startups raise money, their next biggest problem becomes hiring. It turns out it’ ...
- 用Lua扩展谷歌拼音输入法
谷歌拼音输入法最后一次更新是2013年,最近2年毫无动静,这个产品应该已经停了,不过这并不影响对它的使用,我一直喜欢它的简洁和稳定. 说不上来什么原因,忽然想起了摆弄摆弄谷歌拼音输入法的扩展特性(我经 ...
- EF6 Create Different DataContext on runtime(运行时改变连接字符串)
引言 在使用EF时,有时我们需要在程序运行过程中动态更改EF的连接字符串,但不幸的时EF是否对 ConfigurationManager.RefreshSection("xxx" ...
- 【Python网络编程】利用Python进行TCP、UDP套接字编程
之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验. 流程如下: 1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接 ...
- c++中this指针的用法
1. this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果.this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将 ...
- Visual Studio 2013支持Xamarin的解决方案
转自博客园[遗忘的代码] Xamarin的Visual Studio插件目前还不支持VS 2013,所以需要在安装Xamarin的VS插件时把2010和2012全选上 (由于我的电脑里只剩2013,而 ...
- jdbc java数据库连接 2)jdbc接口核心的API
JDBC接口核心的API java.sql.* 和 javax.sql.*(java2.0以后更新的扩展) |- Driver接口: 表示java驱动程序接口.所有的具体的数据库厂商要来实现此接 ...
- PL/SQL 如何查看当前连接信息以及SQL PLUS如何指定IP地址
1.通过PL/SQL 想连接别的数据库可以通过在服务名前面加上IP和左斜线来实现: 2.有时我们的IP和左斜线不用输也能连别的数据库,是因为在一个文件里配置好了.这个文件在哪里? 在这个路径下的 NE ...
- java并发编程学习: 原子变量(CAS)
先上一段代码: package test; public class Program { public static int i = 0; private static class Next exte ...
- ReactNative新手学习之路01-创建项目开始
新手学习之路01-创建项目开始 小菜鸟准备学习RN开发,决定写下自己的学习历程,方便其他也想要学习RN的人,后期会持续更新写下自己所有学习经历,一步步从菜鸟成长成业内高手.开发环境准备,本文默认环境已 ...