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)。
出现的问题:
- 我的Ubuntu系统无法从gituhb上下载安装包,一直提示下载失败。
- 在Windows中下在到U盘里,然后放到Ubuntu系统中解压后发现没有了放置hadoop-eclipse-plugin-2.6.0.jar的release文件夹。
- 在Windows下解压完毕,只copy其中的jar插件,在Ubuntu中直接无法打开文件。
- 在Ubuntu下载时出现两种文件(如下),都没用,打不开。
(这就是我浪费时间的原因)
解决办法:
- 自行编译hadoop2.6.0的eclipse插件,参考下面网址
- 找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(大于) } }