Hadoop中的可写和可写比较?

Hadoop中的可写和可写比较?,hadoop,mapreduce,Hadoop,Mapreduce,谁能给我解释一下: Hadoop中的可写和可写可比接口是什么 这两者有什么不同 请举例说明 提前感谢,简言之,Hadoop中用作键的类型必须是可写可比的,而仅用作值的类型只能是可写的 一个可序列化的对象,它实现了一个简单、高效的, 序列化协议,基于数据输入和数据输出 Hadoop Map Reduce框架中实现的任何键或值类型 这个界面 Hadoop中接口中的可写,Hadoop中的类型必须实现此接口。Hadoop为几乎所有Java原语类型和一些其他类型提供了这些可写包装器,但有时我们需要传递自

谁能给我解释一下:

Hadoop中的可写和可写可比接口是什么

这两者有什么不同

请举例说明


提前感谢,

简言之,Hadoop中用作键的类型必须是
可写可比的
,而仅用作值的类型只能是
可写的

一个可序列化的对象,它实现了一个简单、高效的, 序列化协议,基于数据输入和数据输出

Hadoop Map Reduce框架中实现的任何键或值类型 这个界面


Hadoop中接口中的可写,Hadoop中的类型必须实现此接口。Hadoop为几乎所有Java原语类型和一些其他类型提供了这些可写包装器,但有时我们需要传递自定义对象,这些自定义对象应该实现Hadoop的可写接口。Hadoop MapReduce使用可写实现与用户提供的映射器和还原器进行交互

要实现可写接口,我们需要两种方法:

public interface Writable {
void readFields(DataInput in);
void write(DataOutput out);
}
为什么要使用Hadoop可写功能?

我们已经知道,在分布式计算环境中,数据需要在不同的节点之间传输。这需要对数据进行序列化和反序列化,以将结构化格式的数据转换为字节流,反之亦然。因此,Hadoop使用简单高效的序列化协议在map和reduce阶段之间序列化数据,这些称为可写。前面已经提到的一些可写的示例包括IntWritable、LongWritable、BooleanWritable和FloatWritable

参考:例如

WritableComparable接口只是Writable和java.lang.Comparable接口的子接口。为了实现WritableComparable,除了readFields和write方法之外,我们还必须有compareTo方法,如下所示:

public interface WritableComparable extends Writable, Comparable
{
    void readFields(DataInput in);
    void write(DataOutput out);
    int compareTo(WritableComparable o)
}
类型的比较对于MapReduce非常重要,在MapReduce中,存在一个排序阶段,在该阶段中,键之间进行比较

为org.apache.hadoop.io.rawcomarator接口等可写可比文件实现一个比较器肯定会帮助您加快Map/Reduce(MR)作业的速度。您可能还记得,MR作业由接收和发送键值对组成。该过程如下所示

(K1,V1) –> Map –> (K2,V2)
(K2,List[V2]) –> Reduce –> (K3,V3)
键值对(K2,V2)称为中间键值对。它们从映射器传递到减速器。在这些中间键值对到达reducer之前,执行洗牌和排序步骤

洗牌是将中间键(K2)分配给还原器,排序是对这些键进行排序。在本博客中,通过实现RawComparator来比较中间键,这一额外的工作将大大改进排序。排序得到了改进,因为RawComparator将按字节比较键。如果不使用RawComparator,则必须完全反序列化中介键才能执行比较

注意(简而言之):

1) 可写可比数据通常通过比较器相互比较。在Hadoop Map Reduce框架中用作键的任何类型都应该实现此接口


2) 在Hadoop Map Reduce框架中用作值的任何类型都应该实现可写接口。

Writable是实现Hadoop Map Reduce中使用的自定义定义类所需的一个接口。需要实现/覆盖两个功能:

         write() and readFields();
         write() and readFields()     |    compareTo()
但是,WritableComparable是Writable和Comparable的另一个子接口,需要实现/覆盖三个功能:

         write() and readFields();
         write() and readFields()     |    compareTo()
由于我们需要实现compareTo()

因此,类实现WritableComparable,可以用作hadoop map reduce中的键或值

但是,类实现可写,只能在hadoop map reduce中用作值。

您可以在官方网站上找到这两个界面的示例: