如何在eclipse里方便的读hadoop源代码分析 pdf码

eclipse中开发Hadoop2.x的Map/Reduce项目汇总_小组_ThinkSAAS
eclipse中开发Hadoop2.x的Map/Reduce项目汇总
eclipse中开发Hadoop2.x的Map/Reduce项目汇总
问题导读:
1.如何创建MR程序?
2.如何配置运行参数?
3.HADOOP_HOME为空会出现什么问题?
4.hadoop-common-2.2.0-bin-master/bin的作用是什么?
4.winutils.exe是什么?
本文总结了两个例子,分别从不同角度。
一、eclipse中开发Hadoop2.x的Map/Reduce项目
本文演示如何在Eclipse中开发一个Map/Reduce项目:
1、环境说明
Hadoop2.2.0
Eclipse Juno SR2
Hadoop2.x-eclipse-plugin 插件的编译安装配置的过程参考:
2、新建MR工程
依次点击 File → New → Ohter…
选择 “Map/Reduce Project”,然后输入项目名称:micmiu_MRDemo,创建新项目:
&ignore_js_op style="word-wrap: break-"&
&ignore_js_op style="word-wrap: break-"&
3、创建Mapper和Reducer
依次点击 File → New → Ohter… 选择Mapper,自动继承Mapper&KEYIN, VALUEIN, KEYOUT, VALUEOUT&
&ignore_js_op style="word-wrap: break-"&
&ignore_js_op style="word-wrap: break-"&
创建Reducer的过程同Mapper,具体的业务逻辑自己实现即可。
本文就以官方自带的WordCount为例进行测试:
package com.micmiu.
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.
See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.
The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
*"License"); you may not use this file except in compliance
* with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an"AS IS"BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
import java.io.IOE
import java.util.StringT
import org.apache.hadoop.conf.C
import org.apache.hadoop.fs.P
import org.apache.hadoop.io.IntW
import org.apache.hadoop.io.T
import org.apache.hadoop.mapreduce.J
import org.apache.hadoop.mapreduce.M
import org.apache.hadoop.mapreduce.R
import org.apache.hadoop.mapreduce.lib.input.FileInputF
import org.apache.hadoop.mapreduce.lib.output.FileOutputF
import org.apache.hadoop.util.GenericOptionsP
public class WordCount {
public static class TokenizerMapper
extends Mapper&Object, Text, Text, IntWritable&{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
public static class IntSumReducer
extends Reducer&Text,IntWritable,Text,IntWritable& {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable&IntWritable& values,
Context context
) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
result.set(sum);
context.write(key, result);
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage: wordcount &in& &out&");
System.exit(2);
//conf.set("fs.defaultFS","hdfs://192.168.6.77:9000");
Job job = new Job(conf,"word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
4、准备测试数据
micmiu-01.txt:
Hi Michael welcome to Hadoop
micmiu-02.txt:
Hi Michael welcome to BigData
micmiu-03.txt:
Hi Michael welcome to Spark
把 micmiu 打头的三个文件上传到hdfs:
micmiu-mbp:Downloads micmiu$ hdfs dfs -copyFromLocal micmiu-*.txt /user/micmiu/test/input
micmiu-mbp:Downloads micmiu$ hdfs dfs -ls /user/micmiu/test/input
Found 3 items
-rw-r--r--
1 micmiu supergroup
14:53 /user/micmiu/test/input/micmiu-01.txt
-rw-r--r--
1 micmiu supergroup
14:53 /user/micmiu/test/input/micmiu-02.txt
-rw-r--r--
1 micmiu supergroup
14:53 /user/micmiu/test/input/micmiu-03.txt
micmiu-mbp:Downloads micmiu$
5、配置运行参数
Run As → Run Configurations… ,在Arguments中配置运行参数,例如程序的输入参数:
&ignore_js_op style="word-wrap: break-"&
Run As -& Run on Hadoop ,执行完成后可以看到如下信息:
&ignore_js_op style="word-wrap: break-"&
到此Eclipse中调用Hadoop2x本地伪分布式模式执行MR演示成功。
ps:调用集群环境MR运行一直失败,暂时没有找到原因。
上面说了一个整体的过程,下面详细描述了遇到的问题
二、Win7 Eclipse调试Centos Hadoop2.2-Mapreduce
1.搭建了一套Centos5.3 + Hadoop2.2 + Hbase0.96.1.1的开发环境,Win7 Eclipse调试MapReduce成功。
2. Hadoop安装
MapReduce的配置可以参考。
安装成功后,能顺利查看以下几个页面,就OK了。我的集群环境是200master,201-203slave。
dfs.http.address
192.168.1.200:50070
dfs.secondary.http.address
192.168.1.200:50090
dfs.datanode.http.address
192.168.1.201:50075
yarn.resourcemanager.webapp.address
192.168.1.200:50030
mapreduce.jobhistory.webapp.address 192.168.1.200:19888。这个好像访问不了。需要启动hadoop/sbin/mr-jobhistory-daemon.sh start historyserver才可以访问。
三. Hadoop2.x eclispe-plugin
需要注意一点的是,Hadoop installation directory里填写Win下的hadoop home地址,其目的在于创建MapReduce Project能从这个地方自动引入MapReduce需要的jar。
插件可以从下面下载:
四. 各种问题
1.上面一步完成后,创建一个MapReduce Project,运行时发现出问题了。
java.io.IOException: Could not locate executable nullbinwinutils.exe in the Hadoop binaries.
跟代码就去发现是HADOOP_HOME的问题。如果HADOOP_HOME为空,必然fullExeName为nullbinwinutils.exe。解决方法很简单啦,乖乖的配置环境变量吧,不想重启电脑可以在MapReduce程序里加上System.setProperty("hadoop.home.dir","...");暂时缓缓。org.apache.hadoop.util.Shell.java
public static final String getQualifiedBinPath(String executable)
throws IOException {
// construct hadoop bin path to the specified executable
String fullExeName = HADOOP_HOME_DIR + File.separator +"bin"
+ File.separator +
File exeFile = new File(fullExeName);
if (!exeFile.exists()) {
throw new IOException("Could not locate executable"+ fullExeName
+"in the Hadoop binaries.");
return exeFile.getCanonicalPath();
private static String HADOOP_HOME_DIR = checkHadoopHome();
private static String checkHadoopHome() {
// first check the Dflag hadoop.home.dir with JVM scope
String home = System.getProperty("hadoop.home.dir");
// fall back to the system/user-global env variable
if (home == null) {
home = System.getenv("HADOOP_HOME");
2.这个时候得到完整的地址fullExeName,我机器上是D:Hadooptarhadoop-2.2.0hadoop-2.2.0binwinutils.exe。继续执行代码又发现了错误
Could not locate executable D:Hadooptarhadoop-2.2.0hadoop-2.2.0binwinutils.exe in the Hadoop binaries.
就去一看,没有winutils.exe这个东西。去下载一个,放就去即可。
3.继续出问题
at org.apache.hadoop.util.Shell.execCommand(Shell.java:661)
at org.apache.hadoop.fs.RawLocalFileSystem.setPermission(RawLocalFileSystem.java:639)
at org.apache.hadoop.fs.RawLocalFileSystem.mkdirs(RawLocalFileSystem.java:435)
继续跟代码org.apache.hadoop.util.Shell.java
public static String[] getSetPermissionCommand(String perm, boolean recursive,
String file) {
String[] baseCmd = getSetPermissionCommand(perm, recursive);
String[] cmdWithFile = Arrays.copyOf(baseCmd, baseCmd.length + 1);
cmdWithFile[cmdWithFile.length - 1] =
return cmdWithF
/** Return a command to set permission */
public static String[] getSetPermissionCommand(String perm, boolean recursive) {
if (recursive) {
return (WINDOWS) ? new String[] { WINUTILS,"chmod","-R", perm }
: new String[] {"chmod","-R", perm };
return (WINDOWS) ? new String[] { WINUTILS,"chmod", perm }
: new String[] {"chmod", perm };
cmdWithFile数组的内容为{"D:Hadooptarhadoop-2.2.0hadoop-2.2.0binwinutils.exe","chmod","755","xxxfile"},我把这个单独在cmd里执行了一下,发现
无法启动此程序,因为计算机中丢失 MSVCR100.dll
那就下载一个呗,丢到C:WindowsSystem32里面。再次cmd执行,又来了问题
应用程序无法正常启动(0xc000007b)
下载 ,DirectX_Repair来解决这个问题吧。记得修复完后要重启电脑。搞定后cmd试一下,很棒。
4.到了这里,已经看到曙光了,但问题又来了
Exception in thread"main"java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/SI)Z
/** Windows only method used to check if the current process has requested
access rights on the given path. */
private static native boolean access0(String path, int requestedAccess);
显然缺少dll文件,还记得下载的东西吧,里面就有hadoop.dll,最好的方法就是用hadoop-common-2.2.0-bin-master/bin目录替换本地hadoop的bin目录,并在环境变量里配置PATH=HADOOP_HOME/bin,重启电脑。5.终于看到了MapReduce的正确输出output99。&ignore_js_op style="word-wrap: break- color: rgb(68, 68, 68); font-family: Tahoma, 'Microsoft Yahei', S font-size: 14 line-height: 21"& 五. 总结 hadoop eclipse插件不是必须的,其作用在我看来就是如下三点(这个是一个错误的认识,具体请参考)。study-hadoop是一个普通project,直接运行(不通过Run on Hadoop这只大象),一样可以调试到MapReduce。对hadoop中的文件可视化。创建MapReduce Project时帮你引入依赖的jar。Configuration conf = new Configuration();时就已经包含了所有的配置信息。还是自己下载hadoop2.2的源码编译好,应该是不会有任何问题的(没有亲测)。六. 其它问题1.还是
Exception in thread"main"java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/SI)Z
代码跟到org.apache.hadoop.util.NativeCodeLoader.java去看
// Try to load native hadoop library and set fallback flag appropriately
if(LOG.isDebugEnabled()) {
LOG.debug("Trying to load the custom-built native-hadoop library...");
System.loadLibrary("hadoop");
LOG.debug("Loaded the native-hadoop library");
nativeCodeLoaded =
} catch (Throwable t) {
// Ignore failure to load
if(LOG.isDebugEnabled()) {
LOG.debug("Failed to load native-hadoop with error:"+ t);
LOG.debug("java.library.path="+
System.getProperty("java.library.path"));
if (!nativeCodeLoaded) {
LOG.warn("Unable to load native-hadoop library for your platform..."+
PHP开发框架
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
手机客户端
ThinkSAAS接收任何功能的Iphone(IOS)和Android手机的客户端定制开发服务
官方1群:【已满】
让ThinkSAAS更好,把建议拿来。eclipse中,如何导入hadoop2.6.0的源码?请大神给出详细步骤?
我使用的是Mac系统,这里说下我在mac下怎么添加的吧。其实建议您认真读下hadoop-2.6.0-src根目录下的BUILDING.txt文件,里面有详细的解答,我这里把我做的再来说下。安装java,eclipse。既然你问了问题,想必你这两样已经解决了。安装Maven,配置Maven环境变量,安装protobuf2.5.0, hadoop2.6.0必须配protobuf 2.5.0版本,版本不匹配,编译将失败. ./configure
make check
make install
将tools.jar拷贝到Classes中,否则会出现错误:Missing tools.jar at: /Library/Java/JavaVirtualMachines/JDK 1.8.0 Developer sudo mkdir `/usr/libexec/java_home`/Classes
sudo ln -s `/usr/libexec/java_home`/lib/tools.jar `/usr/libexec/java_home`/Classes/classes.jar
进入hadoop-2.6.0-src目录下的hadoop-maven-plugins文件夹cd hadoop-maven-plugins
mvn install -DskipTests
回到hadoop-2.6.0-src根目录,执行cd ..
mvn eclipse:eclipse -DdownloadSources=true -DdownloadJavadocs=true
这个过程时间有点长,耐心等待。导入eclipse可以看到有几个项目报错,可以单个查原因解决,但并不影响阅读源码。可以看到有几个项目报错,可以单个查原因解决,但并不影响阅读源码。Linux下应该同mac下差不多的过程,至于windows下,您可以再仔细阅读下READING.txt文件里的说明。
已有帐号?
社交帐号登录
无法登录?
社交帐号登录您所在的位置: &
1.2 获取Hadoop源代码
1.2 获取Hadoop源代码
机械工业出版社
《Hadoop技术内幕:深入解析YARN架构设计与实现原理》第1章环境准备,本章介绍了Linux环境下搭建Hadoop源代码阅读环境的方法,在此基础上,进一步介绍了Hadoop的基本使用方法,主要涉及Hadoop Shell和Eclipse插件两种工具的使用。最后介绍了Hadoop源代码编译和调试方法,其中,调试方法主要介绍了使用Eclipse远程调试和打印调试日志两种。本节为大家介绍如何获取Hadoop源代码。
1.2 获取Hadoop源代码
当前比较流行的Hadoop源代码版本有两个:Apache Hadoop和Cloudera Distributed Hadoop(简称CDH)。Apache Hadoop是由雅虎、Cloudera、Facebook等公司组成的Hadoop社区共同研发的,它属于最原始的开源版本,在该版本基础上,很多公司进行了封装和优化,推出了自己的开源版本,其中,最有名的一个是Cloudera公司发布的CDH版本。
考虑到Apache Hadoop是最原始的版本,且使用最为广泛,因而本书选用了Apache Hadoop版本作为分析对象。自从Apache Hadoop发布以来,已经陆续推出很多版本(具体见2.2节),读者可自行在Hadoop SVN 地址 查看或者下载所有版本,也可以从Apache官方主页上下载最新版本。
本书介绍的YARN属于Hadoop 2.0的一个分支(另外两个分支分别是HDFS和MapReduce),Hadoop 2.0的命名方式一般为hadoop-2.x.x。Apache官方主页提供了两个压缩包,一个是Hadoop源代码(hadoop-{VERSION}-src.tar.gz),一个是可直接用于部署的JAR包(hadoop-{VERSION}.tar.gz),Cloudera发布的CDH版本则将源代码和JAR包存放在一起组成一个压缩包(hadoop-2.0.0-cdh4.x.x.tar.gz)。
本书介绍的YARN设计思想适用于所有Apache Hadoop 2.x版本,但涉及具体的实现(指源代码级别的实现)时,则以Apache Hadoop 2.2.0及更高稳定版本为主,因此,如果你想对比Hadoop源代码阅读本书,推荐下载Apache 2.2.0或更高版本。
&【责任编辑: TEL:(010)】&&&&&&
关于&&&&的更多文章
暮春三月,京师草长,杂花生树,群莺乱飞。ChinaHadoop开源社区
本书描述了黑客用默默无闻的行动为数字世界照亮了一条道路的故事。
本书作者访问了世界上最有影响力的多位首席技术官。内
肢体语言能比言语传达出更多的信息,本书以风趣幽默的
本书作者结合自己与他人的创业及投资经历,对影响初创
为了满足广大考生的需要,我们组织了参与过多年资格考试命题或辅导的教师,以新的考试大纲为依据,编写了《数据库系统工程师考试
51CTO旗下网站如何通过eclipse查看,阅读hadoop2.4源码_百度知道
如何通过eclipse查看,阅读hadoop2.4源码
便成功在Eclipse中绑定Android源代码,选择 Java Source Attachment------&gt,而且是必须与jar包关联以后才能查看 jar包与docs关联方式。 右键此包----&gt,点击展开遍出现了android,在弹出的窗口中, 然后选择下载下来的source-19_r02,ctl+鼠标左键就可以跳转到源代码的地方,在此项目目录下面有个Android 4;Properties,随便新建一个Android项目。 ctl+鼠标左键 跳转到源代码 在想要查看源代码的地方Eclipse只能查看API的注释及说明.jar.4;External File.zip: 打开EExternal Location------&gt
知道智能回答机器人
我是知道站内的人工智能,可高效智能地为您解答问题。很高兴为您服务。
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁获取Hadoop的源码和通过Eclipse关联Hadoop的源码_服务器应用_Linux公社-Linux系统门户网站
你好,游客
获取Hadoop的源码和通过Eclipse关联Hadoop的源码
来源:Linux社区&
作者:ljy2013
一、获取的源码
  首先通过官网下载hadoop-2.5.2-src.tar.gz的软件包,下载好之后解压发现出现了一些错误,无法解压缩, 因此有部分源码我们无法解压 ,因此在这里我讲述一下如何通过maven来获取完整的源码:
需要说明的是,在使用maven的时候,需要先安装jdk,protoc ,如果没有安装可以参考
(1)通过命令行进入hadoop-2.4.0-src\hadoop-maven-plugins,运行mvn install
    D:\hadoop2\hadoop-2.4.0-src\hadoop-maven-plugins& mvn install
   此处等待编译成功
(2)运行,在D:\hadoop2\hadoop-2.4.0-src目录下执行:
执行如下命令:mvn eclipse:eclipse -DskipTests
这时候,我们已经把源码给下载下来了。这时候,我们会看到文件会明显增大。
二、eclipse关联hadoop的源码
通过eclipse中的Import将源码导入到eclipse中,具体操作:
(1)File---&Import
点击Next,进入下图所示
此时需要注意的是pom.xml可能会导致导入的工程文件显示错误,因此需要将该文件删除。最后导入源码之后的结果如下所示:
三、导入源码后,仍然出现一些错误,下面将错误列举一下
错误1:hadoop-streaming上出现感叹号:如下图所示:
该错误的解决办法:在该工程上选择右键----&Properties ,左侧栏选择Java Build Path,然后右边选择Source标签页,注意出错的那个路径(先不要删除)。然后右边点击&Link Source按钮&,选择被链接的目录为&/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/conf&;点击finish即可。最后删除remove 那个出错的路径。
错误2:The type org.apache.hadoop.ipc.protobuf.RpcHeaderProtos$RpcSaslProto$SaslAuth cannot be resolved
针对这一类错误就是缺少对应的.java源文件,解决办法是网上下载,并放到对应的目录下面即可。下载java源文件的网站是:
/file/repo1.maven.org/maven2/org.apache.hadoop/hadoop-yarn-server-applicationhistoryservice/2.5.2/org/apache/hadoop/yarn/server/applicationhistoryservice/records/impl/pb/ApplicationAttemptStartDataPBImpl.java#ApplicationAttemptStartDataPBImpl
需要什么样的源文件,可以在该网站检索下载即可。
四、阅读hadoop源码的方法
其中比较常用的
Open Call Hierarchy:
用Open Call Hierarchy可以查看方法的调用层次。如果想知道一个方法在别的什么地方被调用了,这个功能就很好用了,实际中也很常用,比如要重构一个方法时,想 知道他对其它什么地方可能有影响,就可以用这个功能。在方法名上点击右键,选择Open Type Hierarchy即可,快捷键是Ctrl+Alt+H。可以在Call Hierarchy窗口看到方法的调用层次的导航。
Open Type Hierarchy:
用Open Type Hierarchy可以查看类的继承关系,可以在Hierarchy窗口看到继承层次的导航。在方法或类名上点击右键,选择Open Type Hierarchy即可,快捷键是F4。
1、 用Open Declaration可以查看类、方法和变量的声明。这是最常用的一个功能了,如果在要追踪的对象上点右键,选择Open Declaration,可以跳转到其声明的地方。这个功能有个快捷键是F3,当然你也可以按住Ctrl键,鼠标移过去会变成一个小手,单击就可以了。
2、用Open Super Implemention可以查看当前方法在父类中的实现或接口中的声明(前提是该方法是对父类或接口中相应方法的重写),在方法名上点击右键,选择Open Super Implemention即可。
3、 最后介绍一个超级好用的功能,叫Open Implemention,就是可以跳转到某个调用的方法的具体实现的地方去。为什么说这个是超级好用呢?用过Spring的人都知道,现在都提倡面向接 口编程,所以,如果使用Open Declaration来追踪一个方法的调用的话,只会看到该方法在接口中的声明,而看不该方法在具体类中的实现,当然,可以使用Call Hierarchy先得到该方法的整个的调用层次,然后再导航到具体的实现处,但操作有些麻烦了。有了Open Implemention,就可以直接看到实现的代码了,在方法名上点击右键,选择Open Implemention就可以了!只是要享受这个功能,可安装一个Eclipse插件,这里就不在详细介绍了。
14.04下Hadoop2.4.1单机/伪分布式安装配置教程&
安装和配置Hadoop2.2.0&
Ubuntu 13.04上搭建Hadoop环境
Ubuntu 12.10 +Hadoop 1.2.1版本集群配置
Ubuntu上搭建Hadoop环境(单机模式+伪分布模式)
Ubuntu下Hadoop环境的配置
单机版搭建Hadoop环境图文教程详解
更多Hadoop相关信息见 专题页面
本文永久更新链接地址:
相关资讯 & & &
& (12/08/:52)
& (04/02/:04)
& (02/16/:14)
& (12/08/:02)
& (03/20/:15)
& (02/16/:51)
图片资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款}

我要回帖

更多关于 hadoop源码分析 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信