1. hadoop源码修改了,编译成功后,将编译后的hadoop文件直接拿来搭建么,还是需要经过什么处理呢
把你编译后的hadoop源码丢到原来的hadoop集群环境中去 即覆盖hadoop安装目录下的原hadoop-core-xxx.jar 同样的所有节点都需要更新 然后重启集群
2. 怎样导入hadoop0.20的源码
1. 下载Hadoop源代码
2. 准备编译环境
2.1. 系统
CentOS5.5
2.2. Hadoop代码版本
hadoop-0.20.2-release
2.3. 联网
编译Hadoop 会依赖很多第三方库,但编译工具Ant 会自动从网上下载缺少的库,所以必须保证机器能够访问Internet。
2.4. java
编译Hadoop要用JDK1.6 以上
安装好之后,请设置好JAVA_HOME 环境变量。
2.5. Ant
需要使用Ant 工具来编译Hadoop, Ant
安装好之后,请设置好ANT_HOME 环境变量。
2.6. Eclipse
3. 编译Hadoop
3.1. 编译Hadoop
步骤1) 在Elipse 的Package 视图中单击右键,选择New->Java Project,如下图所示:
步骤2) 选择源代码目录,设置Project 名。
在上图所示的对话框中,点击Browse 按钮,选择hadoop-0.20.2 源代码目录,并设置Projectname 为hadoop-0.20.2-dev。工程导入完成后,进入Eclipse 主界面,可以看到hadoop-0.20.2 已经导入进来,但可以看到目录上有红叉叉,是因为Elipse默认使用了Java Builder,而不是Ant Builder,所以下一步就是设置使用Ant Builder。
步骤3) 设置Builder 为Ant:右键hadoop-0.20.2-dev>Properties->Builders:
在上图所示的界面中,点击New 按钮,在弹出的对话框中选中Ant Builder,确定之后会弹出如下对话框:
点击Browse File System 按钮,选择hadoop-0.20.2源代码目录下的build.xml 文件,并设置Name 为Ant_Builder(Name 可以改成其它的,但建议使用Ant_Builder,因为这样名副其实),操作结果如下图所示:
除上图所示的设置外,还需要设置如下图所示的Targets,建议设置成Manual Build 编译方式,而不是Auto Build 编译方式。因为在Auto Build 模式下,任何修改都会触发编译,而Manual Build 模式下,只在需要的时候,点击编译按钮或菜单编译即可。
Hadoop 各成员都需要编译成jar,所以做如下图所示的一个修改:
确定之后,返回如下图所示的Edit Configuration 对话框:
上面完成后,回到Builder 的主对话框,再将对话框中的Java Builder 下移,并将它前面的勾去掉。
进入Eclipse 主界面,由于之前选择了Manual Build,所以需要人工方式驱动编译,编译成功后,可以看到BUILDSUCCESSFUL 字样。
请注意:如果上图所示的菜单中的BuildAutomatically 被勾中,则在common的右键菜单中可能不会出现Build 子菜单。
在编译过程中,Ant 会自动从网上下载所依赖的库。hadoop-0.20.2 编译成功结束后,可以在build 目录下找到编译后生成的文件hadoop-core-0.20.2-dev.jar。
3.2编译过程中出现错误
1、可能有时候因为eclipse版本或者操作系统版本的问题使得hadoop提供的eclipse plugin不太好用。
解决方法:
1)修改$HADOOP_HOME/src/contrib/build-contrib.xml
增加一行:<propertyname="eclipse.home" location="/home/gushui/eclipse"/>
上句后面的/home/gushui/eclipse由自己的$ECLIPSE_HOME代替
2)修改$HADOOP_HOME/src/contrib/eclipse-plugin/src/java/org/apache/hadoop/eclipse/launch/.java
注释掉原来的//importorg.eclipse.jdt.internal.debug.ui.launcher.JavaApplicationLaunchShortcut;
改为importorg.eclipse.jdt.debug.ui.launchConfigurations.JavaApplicationLaunchShortcut;
3. 怎么使用eclipse编译hadoop源码
使用eclipse编译hadoop源码
1,建立一个Hadoop源码文件夹。
2、svn 检出hadoop1.0.4的源码。svn checkout http://svn.apache.org/repos/asf/hadoop/common/tags/release-1.0.4
注意:如果在ubuntu下直接上面语句报错,可能需要执行下面的语句
sudo apt-get install autoconf
sudo apt-get install libtool
3、在检出完成后的目录下执行
ant eclipse.然后将源码导入到eclipse中。
4、修改 release-1.0.4/src/contrib/gridmix/src/Java/org/apache/hadoop/mapred/gridmix/Gridmix.java
将两处的 Enum<? extends T> 改成 Enum<?>
5、编译器设置及编译。
右击工程名,Properties-->Builders-->New--->Ant Builder
New_Builder --> Edit: Name: hadoop-Builder.Main:Builderfile(builder.xml的位置):/home/nacey/workspace/source-workspace/hadoop-1.0.4;Targets—>Manual Build: jar
然后选择菜单Project-->Build Project
在/home/nacey/workspace/source-workspace/hadoop-1.0.4/build文件夹下会生成三个开发 jar 包:
hadoop-client-1.0.4-SNAPSHOT.jar
hadoop-core-1.0.4-SNAPSHOT.jar
hadoop-minicluster-1.0.4-SNAPSHOT.jar
去掉"-SNAPSHOT"即可替换hadoop-1.0.4 下的同名 jar 包.
注意如果要在集群中使用自己编译的jar,则需要替换集群中的所有机器。不然会出现版本不匹配。
4. hadoop yarn源码怎么进行修改
第一个阶段:学习hadoop基本使用和基本原理,从应用角度对hadoop进行了解和学习
这是第一个阶段,你开始尝试使用hadoop,从应用层面,对hadoop有一定了解,比如你可以使用hadoop shell对hdfs进行操作,使用hdfs API编写一些程序上传,下载文件;使用MapRece API编写一个数据处理程序。一旦你对hadoop的基本使用方法比较熟悉了,接下来可以尝试了解它的内部原理,注意,不需要通过阅读源代码了解内部原理,只需看一些博客,书籍,比如《Hadoop权威指南》,对于HDFS而言,你应该知道它的基本架构以及各个模块的功能;对于MapRece而言,你应该知道其具体的工作流程,知道partition,shuffle,sort等工作原理,可以自己在纸上完整个画完maprece的流程,越详细越好。
在这个阶段,建议你多看一些知名博客,多读读《hadoop权威指南》(可选择性看相关的几章)。如果你有实际项目驱动,那是再好不过了,理论联系实际是最好的hadoop学习方法;如果你没有项目驱动,那建议你不要自己一个人闷头学,多跟别人交流,多主动给别人讲讲,最好的学习方式还是“讲给别人听”。
============
第二个阶段:从无到入门,开始阅读hadoop源代码
这个阶段是最困苦和漫长的,尤其对于那些没有任何分布式经验的人。 很多人这个阶段没有走完,就放弃了,最后停留在hadoop应用层面。
这个阶段,第一件要做的事情是,选择一个hadoop组件。如果你对分布式存储感兴趣,那么你可以选择HDFS,如果你读分布式计算感兴趣,你可以选择MapRece,如果你对资源管理系统感兴趣,你可以选择YARN。
选择好系统后,接下来的经历是最困苦的。当你把hadoop源代码导入eclipse或intellij idea,沏上一杯茶,开始准备优哉游哉地看hadoop源代码时,你懵逼了:你展开那数不尽的package和class,觉得无从下手,好不容易找到了入口点,然后你屁颠屁颠地通过eclipse的查找引用功能,顺着类的调用关系一层层找下去,最后迷失在了代码的海洋中,如同你在不尽的压栈,最后栈溢出了,你忘记在最初的位置。很多人经历过上面的过程,最后没有顺利逃出来,而放弃。
如果你正在经历这个过程,我的经验如下:首先,你要摸清hadoop的代码模块,知道client,master,slave各自对应的模块(hadoop中核心系统都是master/slave架构,非常类似),并在阅读源代码过程中,时刻谨记你当前阅读的代码属于哪一个模块,会在哪个组件中执行;之后你需要摸清各个组件的交互协议,也就是分布式中的RPC,这是hadoop自己实现的,你需要对hadoop RPC的使用方式有所了解,然后看各模块间的RPC protocol,到此,你把握了系统的骨架,这是接下来阅读源代码的基础;接着,你要选择一个模块开始阅读,我一般会选择Client,这个模块相对简单些,会给自己增加信心,为了在阅读代码过程中,不至于迷失自己,建议在纸上画出类的调用关系,边看边画,我记得我阅读hadoop源代码时,花了一叠纸。注意,看源代码过程中,很容易烦躁不安,建议经常起来走走,不要把自己逼得太紧。
在这个阶段,建议大家多看一些源代码分析博客和书籍,比如《Hadoop技术内幕》系列丛书(轩相关网站:Hadoop技术内幕)就是最好的参考资料。借助这些博客和书籍,你可以在前人的帮助下,更快地学习hadoop源代码,节省大量时间,注意,目前博客和书籍很多,建议大家广泛收集资料,找出最适合自己的参考资料。
这个阶段最终达到的目的,是对hadoop源代码整体架构和局部的很多细节,有了一定的了解。比如你知道MapRece Scheler是怎样实现的,MapRece shuffle过程中,map端做了哪些事情,rece端做了哪些事情,是如何实现的,等等。这个阶段完成后,当你遇到问题或者困惑点时,可以迅速地在Hadoop源代码中定位相关的类和具体的函数,通过阅读源代码解决问题,这时候,hadoop源代码变成了你解决问题的参考书。
============
第三个阶段:根据需求,修改源代码。
这个阶段,是验证你阅读源代码成效的时候。你根据leader给你的需求,修改相关代码完成功能模块的开发。在修改源代码过程中,你发现之前阅读源代码仍过于粗糙,这时候你再进一步深入阅读相关代码,弥补第二个阶段中薄弱的部分。当然,很多人不需要经历第三个阶段,仅仅第二阶段就够了:一来能够通过阅读代码解决自己长久以来的技术困惑,满足自己的好奇心,二来从根源上解决解决自己遇到的各种问题。 这个阶段,没有太多的参考书籍或者博客,多跟周围的同事交流,通过代码review和测试,证明自己的正确性。
============
阅读hadoop源代码的目的不一定非是工作的需要,你可以把他看成一种修养,通过阅读hadoop源代码,加深自己对分布式系统的理解,培养自己踏实做事的心态。
5. hadoop怎么修改源码io的读写
HDFS打开一个文件,需要在客户端调用DistributedFileSystem.open(Path f, int bufferSize),其实现为:
public FSDataInputStream open(Path f, int bufferSize) throws IOException {
return new DFSClient.DFSDataInputStream(
dfs.open(getPathName(f), bufferSize, verifyChecksum, statistics));
}
6. eclipse怎么修改hadoop源码eclipse
hadoop安装目录下的build.xml文件可以不用修改直接使用吗?你们一般都是怎么做的啊?能说的具体点吗? 查看更多答案>>
7. 如何在eclipse中编辑hadoop2.2.0源代码
将hadoop2.2.0目录下的源码导入Eclipse,但是不能作为一个完整的项目导入,只能将src下的java文件复制到你自己新建的项目的src下,如果修改了之后想要打包,需要把你修改的部分替换原来hadoop目录下的相应文件,然后执行编译命令重新编译打包。好吧,这是很笨的方法。
还有就是可以通过svn下载hadoop2.2.0源码,地址自己找吧,我也不知道,svn下载的源码是完整的Eclipse项目。
8. 如何在eclipse中编辑hadoop2.2.0源代码
7.编译hadoop2.2源码
从hadoop官网下载2.2稳定版,
执行以下命令解压缩jdk
tar -zxvf hadoop-2.2.0-src.tar.gz
会生成一个文件夹 hadoop-2.2.0-src。源代码中有个bug,这里需要修改一下,编辑目录/usr/local/hadoop-2.2.0-src/hadoop-common-project/hadoop-auth中的文件pom.xml,执行以下命令
gedit pom.xml
在第55行下增加以下内容
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-util</artifactId>
<scope>test</scope>
</dependency>
保存退出即可。.