gpt4 book ai didi

hadoop - Hadoop 中的 Writable 和 WritableComparable?

转载 作者:可可西里 更新时间:2023-11-01 14:09:21 26 4
gpt4 key购买 nike

谁能给我解释一下:

什么是Hadoop中的Writable和Writable Comparable接口(interface)?

这两者有什么区别?

请举例说明。

提前致谢

最佳答案

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

要实现 Writable 接口(interface),我们需要两个方法:

public interface Writable {
void readFields(DataInput in);
void write(DataOutput out);
}

为什么要使用 Hadoop Writable(s)?

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

引用:https://developer.yahoo.com/hadoop/tutorial/module5.html例如

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

public interface WritableComparable extends Writable, Comparable
{
void readFields(DataInput in);
void write(DataOutput out);
int compareTo(WritableComparable o)
}

类型比较对于 MapReduce 至关重要,其中有一个排序阶段,在此期间将键相互比较。

为 WritableComparables 实现比较器,例如 org.apache.hadoop.io.RawComparator 接口(interface),肯定有助于加速您的 Map/Reduce (MR) 作业。您可能还记得,MR 作业由接收和发送键值对组成。该过程如下所示。

(K1,V1) –> Map –> (K2,V2)
(K2,List[V2]) –> Reduce –> (K3,V3)

键值对 (K2,V2) 称为中间键值对。它们从映射器传递到缩减器。在这些中间键值对到达 reducer 之前,执行洗牌和排序步骤。

shuffle 是将中间键 (K2) 分配给 reducer,sort 是对这些键进行排序。在这篇博客中,通过实现 RawComparator 来比较中间键,这种额外的努力将大大提高排序。排序得到改进,因为 RawComparator 将按字节比较键。如果我们不使用 RawComparator,则必须完全反序列化中间键才能执行比较。

注意(简而言之):

1)WritableComparables 可以相互比较,通常是通过比较器。任何要在 Hadoop Map-Reduce 框架中用作键的类型都应实现此接口(interface)。

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

关于hadoop - Hadoop 中的 Writable 和 WritableComparable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32517171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com