谁能给我解释一下:什么是hadoop中的可写和可写可比接口?这两者有什么不同?请举例说明。提前谢谢,
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框架中用作值的任何类型都应该实现可写接口。
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.htmlhttps://hadoop.apache.org/docs/current/api/org/apache/hadoop/io/writable.html
pkwftd7m3#
简而言之,hadoop中用作键的类型必须是 WritableComparable ,而仅用作值的类型只能是 Writable .http://hadoop.apache.org/docs/current/api/org/apache/hadoop/io/writablecomparable.html
WritableComparable
Writable
@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框架中的任何键或值类型都实现这个接口。
3条答案
按热度按时间myzjeezk1#
在hadoop的接口中是可写的,hadoop中的类型必须实现这个接口。hadoop为几乎所有java原语类型和其他一些类型提供了这些可写 Package 器,但有时我们需要传递自定义对象,这些自定义对象应该实现hadoop的可写接口。hadoop mapreduce使用可写实现与用户提供的Map器和还原器进行交互。
要实现可写接口,我们需要两种方法:
为什么使用hadoop可写?
我们已经知道,在分布式计算环境中,数据需要在不同的节点之间传输。这需要对数据进行序列化和反序列化,以便将结构化格式的数据转换为字节流,反之亦然。因此,hadoop使用简单高效的序列化协议在map和reduce阶段之间序列化数据,这些称为可写的。前面提到的一些可写示例包括intwritable、longwritable、booleanwritable和floatwritable。
参考:https://developer.yahoo.com/hadoop/tutorial/module5.html 例如
writablecomparable接口只是可写接口和java.lang.comparable接口的子接口。为了实现writablecomparable,除了readfields和write方法之外,我们还必须有compareto方法,如下所示:
类型的比较对于mapreduce来说是至关重要的,在mapreduce中有一个排序阶段,在这个阶段中键之间进行比较。
为org.apache.hadoop.io.rawcomarator接口这样的可写可比文件实现一个比较器肯定会帮助加快map/reduce(mr)作业的速度。您可能还记得,mr作业由接收和发送键值对组成。过程如下所示。
键值对(k2,v2)称为中间键值对。它们从Map器传递到减速器。在这些中间键值对到达reducer之前,将执行洗牌和排序步骤。
shuffle是将中间密钥(k2)分配给reducer,sort是对这些密钥的排序。在本博客中,通过实现rawcomparator来比较中间密钥,这一额外的工作将极大地改进排序。排序得到了改进,因为rawcomarator将按字节比较键。如果不使用rawcomparator,则必须完全反序列化中介键才能执行比较。
注(简而言之):
1) 可写可比数据可以相互比较,通常通过比较器进行比较。在hadoop map reduce框架中用作键的任何类型都应该实现这个接口。
2) 在hadoop map reduce框架中用作值的任何类型都应该实现可写接口。
mgdq6dx12#
writable是实现hadoop map reduce中使用的自定义定义类所需的一个接口。需要实现/覆盖两个功能:
然而,writablecomparable是writable和comparable的另一个子接口,需要实现/覆盖三个功能:
因为我们需要实现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
pkwftd7m3#
简而言之,hadoop中用作键的类型必须是
WritableComparable
,而仅用作值的类型只能是Writable
.http://hadoop.apache.org/docs/current/api/org/apache/hadoop/io/writablecomparable.html
也可比较的可写文件。
可写可比数据可以相互比较,通常通过比较器进行比较。在hadoop map reduce框架中用作键的任何类型都应该实现这个接口。
http://hadoop.apache.org/docs/current/api/org/apache/hadoop/io/writable.html
基于数据输入和数据输出实现简单、高效的序列化协议的可序列化对象。
hadoop map reduce框架中的任何键或值类型都实现这个接口。