指尖世界

分享的乐趣

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料

类别: 动态 更新时间: 2017-09-14

  • 一 eclipse 中 hadoop 环境部署概览
  • 二 前期准备
  • 三 配置 Hadoop 开发环境
  • 四 Eclipse 中直接提交 MapReduce任务
    • 1 新建 MapReduce工程
    • 2 新建 java 工程
  • 五 以 Jar 包方式运行
    • 1 系统 Export 输出 jar 包
    • 2 使用第三方插件 FatJar
  • 六 参考资料
    • 1 FatJar 安装
    • 2 参考链接


一. eclipse 中 hadoop 环境部署概览

eclipse 中部署 Hadoop 包括两大部分:Hdfs 环境部署和 MapReduce 任务执行环境部署。一般 Hdfs 环境部署比较简单,部署后就可以在 eclipse 中像操作 windows 目录一样操作 Hdfs 文件。而 MapReduce 任务执行环境的部署就比较复杂一点,不同版本对环境的要求度高低不同就导致部署的复杂度大相径庭。例如 Hadoop1 包括以前的版本部署就比较简单,可在 Windows 和 Linux 执行部署运行,而 Hadoop2 及以上版本对环境要求就比较严格,一般只能在 Linux 中部署,如果需要在 windows 中部署需要使用 cygwin 等软件模拟 Linux 环境,该篇介绍在 Linux 环境中部署 Hadoop 环境。该篇假设 hadoop2.5.0-cdh5.3.2 集群已经部署完成,集群访问权限为 hadoop5 用户。这种在 eclipse 上操作 Hdfs 和提交 MapReduce 任务的方式为 Hadoop 客户端操作,故无须在该机器上配置 Hadoop 集群文件,也无须在该机器上启动 hadoop 相关进程。



二. 前期准备

1. 下载部署 eclipse
下载 eclipse ,笔者所用版本为 eclipse-jee-juno-SR2-linux-gtk-x86_64.tar

下载地址为:链接:http://pan.baidu.com/s/1qWVQbLi 密码:ea08

解压后,将 eclipse 压缩包放置在当前用户的 /home/hadoop5/softwares/tar_packages 路径下,然后解压到 ~/softwares/ 的路径下

tar -zxvf eclipse-jee-juno-SR2-linux-gtk-x86_64.tar.gz -C ~/softwares/

解压后的 eclipse 的路径目录如下图所示:

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image0


2. 下载插件

插件用的是 hadoop-eclipse-plugin-2.5.1.jar

下载地址:http://download.csdn.net/detail/u011414200/9390800

将自己打包或者下载的 hadoop-eclipse 直接的插件导入 eclipse 的 plugins 目录(复制进去即可),该篇使用直接下载的插件 hadoop-eclipse-plugin-2.5.1.jar,然后启动 eclipse。

./eclipse 

打开 eclipse 后,出现进程 org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar

Note: 建议安装第三方插件 FatJar,点击这里查看



三. 配置 Hadoop 开发环境

1. 切换到 Hadoop 的编程主界面

Window -> Show View -> Other -> Map/Reduce Locations

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image1

然后恢复到初始的 MapReduce 的编程界面

Window -> Reset Perspective -> Yes

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image2


2. 可见 Hadoop-eclipse 插件已生效

将下载的 hadoop-eclipse-plugin-2.5.1.jar 文件放到 Eclipse 的 plugins 目录下,重启 Eclipse 即可看到该插件已生效,一个是 DFS 显示的位置,一个是 mapreduce 显示的位置,具体如下图所示:

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image3


3. 选择 Hadoop 安装目录

在 eclipse 中配置 hadoop 安装目录:

Window—>Preference,选择 Hadoop Map/Reduce

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image4

红线圈出的部分为 Hadoop 的安装目录


4. 创建 New hadoop location

在 MapReduce Locations 出处点击右键新建 mapreduce 配置环境,具体图示如下:

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image5


5. 配置新建的 New hadoop location

进入 mapreduce 配置环境,具体如下图所示。

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image6

  • Location name 可任意填写
  • Map/Reduce(V2) Master 中 Host 为 ResourceManager 机器 ip
  • Map/Reduce(V2) Master 中 Port 为 ResourceManager 接受任务的端口号,即 yarn-site.xml 文件中yarn.resourcemanager.scheduler.address配置项中端口号

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image7

  • DFS Master 中的 Host 为 NameNode 机器 ip,Port 为 core-site.xml 文件中 fs.defaultFS 配置项中端口号

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image8


6. 查看最终连接效果

上一步骤配置完成后,我们看到的界面如下图所示。左侧栏中即为 hdfs 目录,在每个目录上可点击右键操作

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image9

当然,上面的 data 的目录是预先创建好的,而 tmp 和 hbase 是开始历史服务器和 HBase 后自动生成的



四. Eclipse 中直接提交 MapReduce任务

eclipse 中直接提交 mapreduce 任务(此处以 wordcount 为例,同时注意 hadoop 集群防火墙需对该机器开放相应端口,关闭防火墙最省事了)

如果我们将 hadoop 自带的 wordcount 在 eclipse 中执行是不可以的,调整后具体操作如下。


4.1 新建 Map/Reduce工程

新建Map/Reduce工程的特点就是 无须手动导入 hadoop jar 包

1. 创建 Map/Reduce 工程

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image10


2. 点击 next 输入 hadoop 工程名即可

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image11 配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image12 配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image13


3. 新建 Wordcount 类

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image14

在新建的 WordCount 类中添加如下代码:

package net.csdn.blog.zephyr.main;  import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.util.GenericOptionsParser;  public class WordCount {  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);     }      Job job = Job.getInstance(conf);     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);   }    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);     }  }  }

4. 运行程序

首先上传文件到 HDFS 上,这步骤笔者我就不赘述了,笔者我上传的是 slaves 文件

  • 先设置运行参数

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image15

  • 运行 Hadoop 程序

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image16

  • 刷新 HDFS 的最新情况

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image17

要么 右击文件夹 -> Refresh ,要么 右击蓝色小象 -> Reconnect ,或者 右击 “DFS Locations” -> Disconnect ,这样才能看到最新的输出结果目录。右击 “蓝色小象”和 “DFS Locations” 的 Refresh 是没有作用的。

  • 最终输出结果显示

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image18


4.2 新建 java 工程

1. 新建 java 工程

新建 java 工程的特点就是 需要手动导入 hadoop 相应 jar 包,具体如下图所示:

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image19

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image20

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image21 配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image22

  • hadoop_project2 是自定义的项目名称
  • 选择 no 是保持 MapReduce 的编程界面

2. 添加默认的 JRE

新建 java 工程完成后,下面添加 hadoop 相应 jar 包,hadoop2.5.0-cdh5.3.2 相应 jar 包在 ${HADOOP_HOME}/share/hadoop 目录中。

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image23

进入 Libraries,点击 Add Library ,点击 JRE System Library 添加 Eclipse 默认的 JRE 环境

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image24


3. 添加 hadoop jar 包
新建 hadoop 相应 library 成功后添加 hadoop 相应 jar 包到该 library下面即可。

进入 Libraries,点击 Add Library,点击 User Library 添加 hadoop 相应 jar 包

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image25

自定义 library 的名字

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image26

笔者我创建了 4 个 Library ,分别取名为 hadoop-common、hadoop-yarn、hadoop-hdfs、hadoop-mapreduce


4. 需要添加的 hadoop 相应 jar 包有

${HADOOP_HOME}/share/hadoop/common下所有jar包,及里面的lib目录下所有jar包 ${HADOOP_HOME}/share/hadoop/hdfs下所有jar包,及里面lib下的jar包 ${HADOOP_HOME}/share/hadoop/mapreduce下所有jar包,及里面lib下的jar包 ${HADOOP_HOME}/share/hadoop/yarn下所有jar包,及里面lib下的jar包

在上述的 4 个自定义的 Library 中添加相应的 jar 包。选中某一个 User Library,然后点击旁边的 “Add External JARs”,然后根据 ${HADOOP_HOME}/share/hadoop 路径下选择与之对应的 jar 包。

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image27


5. 运行 Java 工程

步骤和代码和之前是一样的。唯一区别的启动选项,选择的是 Java Application

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image28

与 Hadoop 运行方式不同的是,在 Console 控制台上,能看到更加详细的输出信息,这里就不上图了,且运行的方式却是本地运行模式。用线程模拟 map,reduce 的过程。



五. 以 Jar 包方式运行

5.1 系统 Export 输出 jar 包

1. 导出 Jar 包

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image29

所要填的就是 Jar 的输出路径以及文件名


2. 运行 Jar 包

可以在相应输出目录下生成 WordCount.jar 的 Jar 包,运行之

hadoop jar WordCount.jar net.csdn.blog.zephyr.main.WordCount /data/wordcount/slaves /output

这里需要填类名,如果是在包下,请确保填写详细的包名,如这里的 net.csdn.blog.zephyr.main,否则会报找不到类的错误。

/data/wordcount 为 HDFS 存放文本的目录,如果指定一个目录为 MapReduce 输入的路径,则 MapReduce 会将该路径下的所有文件作为输入。如果指定一个文件,则 MapReduce 只会将该文件作为输入。/output 为作业输出路径,该路径在作业运行之前必须不存在,否则会报错。


5.2 使用第三方插件 FatJar

1. File -> Export ->Other -> Fat Jar Exporter

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image30


2. 配置各种参数

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image31

Note: 注意别选中 Merge individual-sections of all MANIFEST.MF Files,如果选中的话,很有可能在运行有 fat jar 打包的 JAR 文件时控制台出现各种警告,原因:在 MANIFEST.MF 文件中,有多个 SHA1-Digest,导致控制台报错。

在运行有fat jar打包的JAR文件时控制台出现各种警告: 008-12-2 8:55:20 java.util.jar.Attributes read 警告: Duplicate name in Manifest: SHA1-Digest. Ensure that the manifest does not have duplicate entries, and that blank lines separate individual sections in both your manifest and in the META-INF/MANIFEST.MF entry in the jar file. 2008-12-2 8:55:20 java.util.jar.Attributes read 警告: Duplicate name in Manifest: SHA1-Digest. Ensure that the manifest does not have duplicate entries, and that blank lines separate individual sections in both your manifest and in the META-INF/MANIFEST.MF entry in the jar file.

3. 选择要打包的第三方 JAR 文件,这些文件会打包进最终的 readXml_fat.jar

配置 hadoop 开发环境+运行 wordcount 程序 一. eclipse 中 hadoop 环境部署概览 二. 前期准备 三. 配置 Hadoop 开发环境 四. Eclipse 中直接提交 MapReduce任务 五. 以 Jar 包方式运行 六. 参考资料_image32


4. 运行新生成的 jar 文件

cd /home/hadoop5/workspace/hadoop_project hadoop jar hadoop_project_fat.jar /data/wordcount/slaves /output/

注意:此时就不用再写执行的主类了,因为在打包的时候已经设置啦~



六. 参考资料

6.1 FatJar 安装

FatJar 是一个非常简单的软件打包解决方案,它利用 Java 的定制类装入器,动态地从单一档案文件中装入应用程序所有的类,同时保留支持 JAR 文件的结构。随着 FatJar Eclipse 插件 FJEP 的推出, Eclipse 的用户现在只要在向导中选中一个复选框,就可以创建 One-JAR 应用程序。依赖的库被放进 lib/ 目录,主程序和类被放进 main/main.jar,并自动写好 META-INF/MANIFEST.MF 文件。

1. 下载 FatJar
链接献上:http://download.csdn.net/detail/u011414200/9403413


2. 安装 FatJar
将该插件直接放置在 eclipse目录下的 plugin 目录下即可!然后重启 eclipse 就 OK 了。


6.2 参考链接

  • 在 eclipse 上安装 hadoop2.2.0 插件 :http://blog.csdn.net/gyqjn/article/details/49536801
  • eclipse 中 hadoop2.3.0 环境部署及在 eclipse 中直接提交 mapreduce 任务:http://my.oschina.net/mkh/blog/340112?fromerr=UdiAOqq3
  • hadoop-eclipse-plugin-2.5.0 插件:http://www.aboutyun.com/thread-8780-1-1.html
  • 运行由fat jar打包后的jar文件出现警告的处理方法 :http://blog.csdn.net/wyp_810618/article/details/7168099