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