(2)Hadoop笔记:hadoop-eclipse-plugin插件的安装和mapReduce小栗子

注:
1.eclipse所在环境为windows
2.hadoop版本2.8.3
3.hadoop-eclipse-plugin版本2.8.3
4.eclipse版本Luna Service Release 1 (4.4.1)
5.JDK 1.7

  • 插件安装

hadoop-eclipse-plugin编译
因为我本地使用的JDK为1.7,而现在网上能找到的hadoop-eclipse-plugin-2.8.3都是基于JDK1.8编译的,所以都不能使用,因此需要下载hadoop-eclipse-plugin的源码然后在本地编译,过程中需要Hadoop-2.8.3的支持。当然如果你能找到符合自己环境的插件包,这步就可以跳过了。
Hadoop-2.8.3.tar.gz
hadoop2x-eclipse-plugin (github托管的源码)
apache-ant-1.9.11-bin.zip
下载完后解压apache-ant-1.9.11-bin.zip,并配置环境变量。
新建ANT_HOME=E:apache-ant-1.9.4
在PATH后面加;%ANT_HOME%\bin
测试下

ant -version

这里写图片描述

解压Hadoop-2.8.3.tar.gz,hadoop2x-eclipse-plugin
编辑E:\hadoop2x-eclipse-plugin-master\src\contrib\eclipse-plugin\build.xml
添加下图红框中的部分,3项代表的意思应该都懂,就不多说了。
这里写图片描述

然后往下翻能发现有一堆这个东西,之后编译时大概会出错的地方。先打开放在这,不用修改。①
这里写图片描述

然后编辑E:\hadoop2x-eclipse-plugin-master\ivy\libraries.properties.xml
一般来讲只要修改下红框中的版本即可,然后这里有一大堆版本,而上面①图中那些都是在引用这里的版本。这里的版本又对应着Hadoop-2.8.3中的资源。在编译时可能会出现这里写的版本和Hadoop实际用的版本不一样导致找不到jar包的报错,这时就可以根据报错信息来修改下方的版本号,使得符合实际。基本都在${hadoop.home}/share/hadoop/common/lib文件夹中
这里写图片描述

进入hadoop2x-eclipse-plugin-master\src\contrib\eclipse-plugin目录,运行cmd命令行

ant jar

编译完成,遇到错误就根据提示修改,最大可能遇到的就是我上面提到的问题,还有当编译时长时间卡在ivy-resolve-common: 处时,大概率已经编译失败。
这里写图片描述

编译完成后的文件在
hadoop2x-eclipse-plugin-master\build\contrib\eclipse-plugin文件夹中
这里写图片描述

将jar包放入eclipse/plugins文件夹中,重启eclipse
可以看到如下图标
这里写图片描述
添加
window->show view->other
这里写图片描述

配置连接,如下图所示,随便取个名字就行
这里写图片描述

然后如果连接成功的话就如下图所示,这里刚新搭建的Hadoop环境的话应该一开始就是空的,所以可能会抛空指针异常,没什么影响的,直接新建东西就行。
这里写图片描述

这里写图片描述

新建后需要刷新一下,同时可以访问http://xx.xx.xx.xx:50070/explorer.html#/网址查看是否真的新建了。
这里写图片描述

通过这个我们可以轻松快捷的将文件上传给Hadoop文件系统,方便本地调试。

window->preferences,选择Hadoop文件,这里主要目的是可以直接引用相关jar包
这里写图片描述

  • 使用例子,单词计数
    首先需要下载hadoop.dll,这个网上找找对应版本的吧,我用的是2.X的,放在C/windows/System32下。

File->New->other
next,填写名字,finish
这里写图片描述

这里写图片描述

新建4个文件
这里写图片描述
WordCountMapper.java

package com.hadoop.demo;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

/*
 * KEYIN:输入kv数据对中key的数据类型
 * VALUEIN:输入kv数据对中value的数据类型
 * KEYOUT:输出kv数据对中key的数据类型
 * VALUEOUT:输出kv数据对中value的数据类型
 */
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{

    /*
     * map方法是提供给map task进程来调用的,map task进程是每读取一行文本来调用一次我们自定义的map方法
     * map task在调用map方法时,传递的参数:
     *      一行的起始偏移量LongWritable作为key
     *      一行的文本内容Text作为value
     */
    @Override
    protected void map(LongWritable key, Text value,Context context) throws IOException, InterruptedException {
        //拿到一行文本内容,转换成String 类型
        String line = value.toString();
        //将这行文本切分成单词
        String[] words=line.split(" ");

        //输出<单词,1>
        for(String word:words){
            context.write(new Text(word), new IntWritable(1));
        }
    }
}

WordCountReducer.java

package com.hadoop.demo;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

/*
 * KEYIN:对应mapper阶段输出的key类型
 * VALUEIN:对应mapper阶段输出的value类型
 * KEYOUT:reduce处理完之后输出的结果kv对中key的类型
 * VALUEOUT:reduce处理完之后输出的结果kv对中value的类型
 */
public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
    @Override
    /*
     * reduce方法提供给reduce task进程来调用
     * 
     * reduce task会将shuffle阶段分发过来的大量kv数据对进行聚合,聚合的机制是相同key的kv对聚合为一组
     * 然后reduce task对每一组聚合kv调用一次我们自定义的reduce方法
     * 比如:<hello,1><hello,1><hello,1><tom,1><tom,1><tom,1>
     *  hello组会调用一次reduce方法进行处理,tom组也会调用一次reduce方法进行处理
     *  调用时传递的参数:
     *          key:一组kv中的key
     *          values:一组kv中所有value的迭代器
     */
    protected void reduce(Text key, Iterable<IntWritable> values,Context context) throws IOException, InterruptedException {
        //定义一个计数器
        int count = 0;
        //通过value这个迭代器,遍历这一组kv中所有的value,进行累加
        for(IntWritable value:values){
            count+=value.get();
        }

        //输出这个单词的统计结果
        context.write(key, new IntWritable(count));
    }
}

WordCountJobSubmitter.java

package com.hadoop.demo;

import java.io.IOException;
import java.util.Date;

import org.apache.hadoop.conf.Configuration;
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.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class WordCountJobSubmitter {

    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        Configuration conf = new Configuration();
        Job wordCountJob = Job.getInstance(conf);

        //重要:指定本job所在的jar包
        wordCountJob.setJarByClass(WordCountJobSubmitter.class);

        //设置wordCountJob所用的mapper逻辑类为哪个类
        wordCountJob.setMapperClass(WordCountMapper.class);
        //设置wordCountJob所用的reducer逻辑类为哪个类
        wordCountJob.setReducerClass(WordCountReducer.class);

        //设置map阶段输出的kv数据类型
        wordCountJob.setMapOutputKeyClass(Text.class);
        wordCountJob.setMapOutputValueClass(IntWritable.class);

        //设置最终输出的kv数据类型
        wordCountJob.setOutputKeyClass(Text.class);
        wordCountJob.setOutputValueClass(IntWritable.class);

        Long fileName = (new Date()).getTime();

        //设置要处理的文本数据所存放的路径
        FileInputFormat.setInputPaths(wordCountJob, "hdfs://xx.xx.xx.xx:9002/test/1.data");
        FileOutputFormat.setOutputPath(wordCountJob, new Path("hdfs://xx.xx.xx.xx:9002/test/"+fileName));

        //提交job给hadoop集群
        wordCountJob.waitForCompletion(true);
    }
}

log4j.properties

log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

然后准备下1.data的数据(就是个txt编辑后修改后缀为data的文件),将该文件通过DFS上传

hello tom
hello jim
how are you
i love you
i miss you
i love you

这里写图片描述

因为我这里放的路径是test下,实际使用时请在WordCountJobSubmitter .java中替换为自己的路径和文件名。

运行,选中WordCountJobSubmitter.java(有main函数的),右键run as ->run configurations。hdfs第一行为输入,第二行为输出
这里写图片描述

运行,可以看见生成了新的文件,点击查看,可以看到单词计数的结果了。
这里写图片描述

因为大部分都是根据记忆写的,所以过程中如果出现错误,望指正 _ (:з」∠*)_。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: hadoop-eclipse-plugin2.10.1是一个适用于eclipse集成开发环境的Hadoop插件Hadoop是一个开源的分布式计算框架,用于处理大规模数据集。在处理大数据时,Hadoop提供了高可靠性、高可扩展性和高容错性的架构。而hadoop-eclipse-plugin2.10.1插件的作用就是方便开发人员在eclipse中进行Hadoop应用程序的开发和调试。 使用hadoop-eclipse-plugin2.10.1插件,我们可以在eclipse中创建和管理Hadoop项目,可以方便地编写、调试和运行Hadoop应用程序。该插件提供了一个Hadoop图形界面,在eclipse的界面中显示Hadoop集群的状态和作业信息,使开发人员可以更加直观地了解Hadoop集群的运行情况。 此外,hadoop-eclipse-plugin2.10.1还通过提供Hadoop项目的模板和代码自动生成工具,简化了Hadoop应用程序的开发过程。开发人员可以选择合适的模板,根据自己的需求生成Hadoop应用程序的基本骨架,从而加快应用程序的开发速度。 总之,hadoop-eclipse-plugin2.10.1是一个强大的Hadoop开发工具,它使得在eclipse中进行Hadoop应用程序的开发和调试变得更加简单和高效。无论是初学者还是熟练的开发人员,都可以通过这个插件来更好地利用Hadoop的强大功能,处理和分析大规模的数据集。 ### 回答2: hadoop-eclipse-plugin 2.10.1 是一款用于在 Eclipse IDE 中开发和调试 Hadoop 应用程序的插件Hadoop 是一个开源的分布式计算框架,可实现高容错性和高可伸缩性,用于处理大规模数据集的分布式计算。 该插件提供了一系列工具和功能,使开发人员可以更轻松地在 Eclipse 中编写和调试 Hadoop 应用程序。使用该插件,开发人员可以在 Eclipse 中创建和管理 Hadoop 项目,编写 MapReduce 任务,并进行本地调试和单元测试。 hadoop-eclipse-plugin 2.10.1 支持各种 Hadoop 版本,包括 Hadoop 1.x 和 Hadoop 2.x。它包含了与 Hadoop 兼容的文件系统和作业操作的 API,可以在 Eclipse 中连接到 Hadoop 集群。该插件还提供了一个可视化的用户界面,用于管理 Hadoop 集群和作业的监控和调度。 使用 hadoop-eclipse-plugin 2.10.1,开发人员可以方便地创建和管理 Hadoop 集群,上传和下载文件,运行和监控作业等。此外,该插件还提供了一键进行本地调试的功能,方便开发人员在开发过程中快速验证和调试代码。 总结而言,hadoop-eclipse-plugin 2.10.1 是一个功能强大的插件,为开发人员提供了在 Eclipse 中开发和调试 Hadoop 应用程序的便利。通过该插件,开发人员可以更高效地开发和测试 Hadoop 应用程序,提高开发效率和应用程序的质量。 ### 回答3: hadoop-eclipse-plugin2.10.1是一款HadoopEclipse集成的插件Hadoop是一个用于存储和处理大规模数据集的开源框架,而Eclipse是一种流行的集成开发环境(IDE),用于开发各种应用程序。 hadoop-eclipse-plugin2.10.1提供了一系列功能,使开发人员能够在Eclipse中更方便地进行Hadoop应用程序的开发和调试。它提供了Hadoop项目模板,可以帮助我们快速创建和配置Hadoop项目。同时,插件还提供了Hadoop任务以及作业的运行和监视功能,让开发人员可以直接在Eclipse中执行和监控Hadoop任务。 除了基本功能外,hadoop-eclipse-plugin2.10.1还提供了一些高级功能,包括对Hadoop文件系统的浏览和管理、Hadoop集群的状态监控、Hadoop任务的调试功能等。这些功能使得开发人员能够更加高效地开发、测试和调试Hadoop应用程序。 要使用hadoop-eclipse-plugin2.10.1,首先需要在Eclipse安装插件安装完成后,可以通过创建Hadoop项目或导入现有的Hadoop项目来开始开发。在项目中,可以使用插件提供的各种功能来进行Hadoop任务的执行和监视,以及文件系统的管理和调试等操作。 总之,hadoop-eclipse-plugin2.10.1是一个方便的插件,能够帮助开发人员更好地在Eclipse中开发和调试Hadoop应用程序。它提供了一系列功能,使得Hadoop的开发工作更加高效和便捷。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值