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

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

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插件,参考下面网址
  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(大于)

    }

}
经验分享 程序员 微信小程序 职场和发展