hadoop中的可写和可写比较?

vohkndzv  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(447)

谁能给我解释一下:
什么是hadoop中的可写和可写可比接口?
这两者有什么不同?
请举例说明。
提前谢谢,

myzjeezk

myzjeezk1#

在hadoop的接口中是可写的,hadoop中的类型必须实现这个接口。hadoop为几乎所有java原语类型和其他一些类型提供了这些可写 Package 器,但有时我们需要传递自定义对象,这些自定义对象应该实现hadoop的可写接口。hadoop mapreduce使用可写实现与用户提供的Map器和还原器进行交互。
要实现可写接口,我们需要两种方法:

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

为什么使用hadoop可写?
我们已经知道,在分布式计算环境中,数据需要在不同的节点之间传输。这需要对数据进行序列化和反序列化,以便将结构化格式的数据转换为字节流,反之亦然。因此,hadoop使用简单高效的序列化协议在map和reduce阶段之间序列化数据,这些称为可写的。前面提到的一些可写示例包括intwritable、longwritable、booleanwritable和floatwritable。
参考:https://developer.yahoo.com/hadoop/tutorial/module5.html 例如
writablecomparable接口只是可写接口和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)称为中间键值对。它们从Map器传递到减速器。在这些中间键值对到达reducer之前,将执行洗牌和排序步骤。
shuffle是将中间密钥(k2)分配给reducer,sort是对这些密钥的排序。在本博客中,通过实现rawcomparator来比较中间密钥,这一额外的工作将极大地改进排序。排序得到了改进,因为rawcomarator将按字节比较键。如果不使用rawcomparator,则必须完全反序列化中介键才能执行比较。
注(简而言之):
1) 可写可比数据可以相互比较,通常通过比较器进行比较。在hadoop map reduce框架中用作键的任何类型都应该实现这个接口。
2) 在hadoop map reduce框架中用作值的任何类型都应该实现可写接口。

mgdq6dx1

mgdq6dx12#

writable是实现hadoop map reduce中使用的自定义定义类所需的一个接口。需要实现/覆盖两个功能:

write() and readFields();

然而,writablecomparable是writable和comparable的另一个子接口,需要实现/覆盖三个功能:

write() and readFields()     |    compareTo()

因为我们需要实现compareto(),
所以类实现writeablecomparable,既可以用作hadoop中的键,也可以用作hadoop中的值reduce。
但是,类实现可写,只能作为hadoop map reduce中的值使用。
您可以在官方网站上找到这两个界面的示例:https://hadoop.apache.org/docs/current/api/org/apache/hadoop/io/writablecomparable.html
https://hadoop.apache.org/docs/current/api/org/apache/hadoop/io/writable.html

pkwftd7m

pkwftd7m3#

简而言之,hadoop中用作键的类型必须是 WritableComparable ,而仅用作值的类型只能是 Writable .
http://hadoop.apache.org/docs/current/api/org/apache/hadoop/io/writablecomparable.html

@InterfaceAudience.Public
@InterfaceStability.Stable
public interface WritableComparable<T>
extends Writable, Comparable<T>

也可比较的可写文件。
可写可比数据可以相互比较,通常通过比较器进行比较。在hadoop map reduce框架中用作键的任何类型都应该实现这个接口。
http://hadoop.apache.org/docs/current/api/org/apache/hadoop/io/writable.html

@InterfaceAudience.Public
@InterfaceStability.Stable
public interface Writable

基于数据输入和数据输出实现简单、高效的序列化协议的可序列化对象。
hadoop map reduce框架中的任何键或值类型都实现这个接口。

相关问题