Eclipse中MapReduce配置、应用以及Haoop的数据类型

本文详细记录了解决Hadoop Eclipse Plugin安装过程中遇到的问题,包括插件下载、编译及在Ubuntu系统下的配置步骤,并分享了一个有效的解决方法。此外,还介绍了如何运行WordCount实例及可能出现的错误解决办法。

前言: 本来计划昨天就写完这篇文章,但是由于hadoop-eclipse-plugin-2.6.0.jar插件的问题,耽误了一天,具体配置hadoop-eclipse-plugin的过程可以参考下面的网站:http://dblab.xmu.edu.cn/blog/hadoop-build-project-using-eclipse/,我分享一下自己在这个过程中的教训,免得大家像我一样浪费一天的时间。

hadoop2x-eclipse-plugi的下载:

要在 Eclipse 上编译和运行 MapReduce 程序,需要安装 hadoop-eclipse-plugin,可下载 Github 上的 hadoop2x-eclipse-plugin(备用下载地址:http://pan.baidu.com/s/1i4ikIoP)。

出现的问题:

  1. 我的Ubuntu系统无法从gituhb上下载安装包,一直提示下载失败。
  2. 在Windows中下在到U盘里,然后放到Ubuntu系统中解压后发现没有了放置hadoop-eclipse-plugin-2.6.0.jar的release文件夹。
  3. 在Windows下解压完毕,只copy其中的jar插件,在Ubuntu中直接无法打开文件。
  4. 在Ubuntu下载时出现两种文件(如下),都没用,打不开。
    在这里插入图片描述

(这就是我浪费时间的原因)

解决办法:

  1. 自行编译hadoop2.6.0的eclipse插件,参考下面网址
    https://www.cnblogs.com/myresearch/p/hadoop-eclipse-plugin-jar.html

  2. 找hadoop-eclipse-plugin-2.6.0.jar,我就是同学给了一个他的插件,有需要可以滴滴我,可能是上面网站压缩包中文件有问题。

注意
将hadoop-eclipse-plugin-2.6.0.jar插件放入eclipse下的dropins文件夹下,不要按照教程放入plugins下。其余的完全可以参照教程。

WordCount实例运行

代码在上述网站中可以找到,运行结果如下:
在这里插入图片描述看到一片红也别慌,真实结果在这个文件中
在这里插入图片描述在这里插入图片描述运行可能的报错
在这里插入图片描述
解决办法: 执行下面命令,删除output文件夹
/usr/loca/hadoop/bin/hadoop fs -rm -r output

Hadoop中数据类型

1、基本数据类型
Nullwritable:当< key, value>中的key或 value为空时使用
Text:使用UTF8格式存储的文本
LongWritable:长整型数
writable:整型数
Floatwritable:浮点数
Doublewritab|e:双字节数值
ByteWritable:单字节数值
BooleanWritable:标准布尔型数值

数据类型都实现 Writable接口,以便用这些类型定义的数据可以被序列化进行writable -value

2、用户自定义数据类型的实现

 1.继承接口Writable,实现其方法write()和readFields(), 以便该数据能被序列化后完成网络传输或文件输入/输出;
 2.如果该数据需要作为主键key使用,或需要比较数值大小时,则需要实现WritalbeComparable接口,实现其方法write(),readFields(),CompareTo() 
public class Point3D implements Writable<Point3D>

{

    private float x,y,z;

    public float getX(){return x;}

    public float getY(){return y;}

    public float getZ(){return z;}

 

    public void readFields(DataInput in) throws IOException

    {

        x = in.readFloat();

        y = in.readFloat();

        z = in.readFloat();

    }

 

    public void write(DataOutput out) throws IOException

    {

         out.writeFloat(x);

         out.writeFloat(y);

         out.writeFloat(z);

    }

}

 

 

 

public class Point3D implements WritableComparable<Point3D>

{

    private float x,y,z;

    public float getX(){return x;}

    public float getY(){return y;}

    public float getZ(){return z;}

    public void readFields(DataInput in) throws IOException

    {

        x = in.readFloat();

        y = in.readFloat();

        z = in.readFloat();

    }

    public void write(DataOutput out) throws IOException

    {

         out.writeFloat(x);

         out.writeFloat(y);

         out.writeFloat(z);

    }

 

    public int CompareTo(Point3D p)

    {

        //具体实现比较当前的空间坐标点this(x,y,z)与指定的点p(x,y,z)的大小

        // 并输出: -1(小于), 0(等于), 1(大于)

    }

}
1. 实验目的与任务 MapReduce 是谷歌公司的核心计算模型,Hadoop 开源实现了 MapReduceMapReduce 将复杂的、运行于大规模集群上的并行计算过程高度抽象到了两个函数:Map 和 Reduce, 并极大地方便了分布式编程工作,编程人员在不会分布式并行编程的情况下,也可以很容易 将自己的程序运行在分布式系统上,完成海量数据的计算。本实验要求掌握 MapReduce 的 相关操作。 2. 实验要求 掌握使用 MapReduce 的操作,完成词频统计的任务。 3. 实验内容 利用 eclipse,使用 Hadoop 的 MapReduce 完成词频统计。 词频统计任务,输入为多个包含大量单词的文本文件,输出文件中每个单词及其出现次 数(频数),并按照单词字母顺序排序,每个单词和其频数占一行,单词和频数之间有间隔。 具体如表 1 所示: 表 1 一个 WordCount 的输入和输出实例 输入 输出 Hello World Hello Hadoop Hello MapReduce Hadoop 1 Hello 3 MapReduce 1 World 1 4. 实验设备 一台装有 Windows10 系统的 pc 机,装有两个 Ubantu 虚拟系统,并且两个虚拟 Ubantu 系统已完成 Hadoop 集群的配置,装有 Eclipse 软件。 5. 实验步骤 5.1 Eclipse 中创建项目并添加 jar 包 MapReduce 依赖的 JAR 包都位于 Linux 系统的 Hadoop 安装目录下(假设安装目录为 “/usr/local/hadoop/share/hadoop”)。点击界面中的“Libraries”选项卡,然后,点击界面右侧的 “Add External JARs…”按钮,添加: (1)“/usr/local/hadoop/share/hadoop/common” 目录下的 hadoop-common-3.1.3.jar 和 haoop-nfs-3.1.3.jar; (2)“/usr/local/hadoop/share/hadoop/common/lib”目录下的所有 JAR 包; (3)“/usr/local/hadoop/share/hadoop/mapreduce”目录下的所有JAR包,但是,不包括jdiff、lib、lib-examples 和 sources 目录。 (4)“/usr/local/hadoop/share/hadoop/mapreduce/lib”目录下的所有 JAR 包。 5.2 编写 Map 处理逻辑 • Map 输入类型为<key,value> • 期望的 Map 输出类型为<单词,出现次数> • Map 输入类型最终确定为<Object,Text> Map 输出类型最终确定为<Text,IntWritable public static class MyMapper 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); } } } 5.3 编写 Reduce 处理逻辑 • 在 Reduce 处理数据之前,Map 的结果首先通过 Shuffle 阶段进行整理 • Reduce 阶段的任务:对输入数字序列进行求和 • Reduce 的输入数据为<key,Iterable 容器> Reduce 任务的输入数据: <”I”,<1,1>> <”is”,1> …… <”from”,1> <”China”,<1,1,1>> public static class MyReducer extends Reducer<Text,IntWritable,Text,IntWritable>{ private IntWritable
最新发布
10-15
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lqcStar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值