2015-09-11 5 views
11

誰でも教えてください:HadoopのWritableおよびWritableComparable?

Hadoopの書き込み可能で書き込み可能な比較可能なインターフェイスは何ですか?

これら2つの違いは何ですか?

例を挙げてください。唯一として使用されるタイプがちょうどWritableことができるが、事前に

おかげで、要するに

答えて

2

は、Hadoopの中でキーとして使用されるタイプは、WritableComparableでなければなりません。また、匹敵する

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> 

A書き込み可能。

WritableComparablesは、通常、 コンパレータを介して互いに比較することができます。 Hadoop Map-Reduceフレームワークでキーとして使用されるタイプは、このインターフェイスを実装する必要があります。

http://hadoop.apache.org/docs/current/api/org/apache/hadoop/io/Writable.html

@InterfaceAudience.Public 
@InterfaceStability.Stable 
public interface Writable 

DataInput内とDataOutput内に基づいて簡単、効率的、 シリアライゼーションプロトコルを実装するシリアライズオブジェクト。

Hadoop Map-Reduceフレームワーク内の任意のキーまたは値のタイプは、このインターフェイスを実装します。 Hadoopの中のHadoopや種類のインターフェイスで

17

書き込み可能は、このインタフェースを実装する必要があります。 HadoopはほとんどすべてのJavaプリミティブ型やその他のタイプの書き込み可能なラッパーを提供しますが、カスタムオブジェクトを渡す必要がある場合があります。これらのカスタムオブジェクトはHadoopのWritableインターフェイスを実装する必要があります.Headop MapReduceはWritableの実装を使用してユーザーが提供するMappersおよびReducersと相互作用します。なぜHadoopの書き込み可能(複数可)を使用し

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

:我々は2つのメソッドを必要と書き込み可能なインタフェースを実装する

すでにわかっているように、データは分散コンピューティング環境内の異なるノード間で転送する必要があります。これには、構造化された形式のデータをバイトストリームに変換するためのデータのシリアル化と逆シリアル化が必要です。 Hadoopは、シンプルで効率的なシリアライズプロトコルを使用して、マップとデクリメントフェーズ間でデータをシリアライズし、これらを書き込み可能と呼びます。前述の書き込み可能ファイルの例には、IntWritable、LongWritable、BooleanWritable、およびFloatWritableがあります。

参照してください。https://developer.yahoo.com/hadoop/tutorial/module5.html例えば

WritableComparableインタフェースが書き込み可能とjava.lang.Comparableとインターフェイスのサブインターフェイスだけです。以下に示すようにWritableComparableを実現するため、我々は、readFields別にcompareToメソッドを持っていると方法を記述する必要がありますタイプの

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

比較キーが互いに比較され、その間ソーティング相が存在するのMapReduce、のために重要です。

org.apache.hadoop.io.RawComparatorインターフェイスのようなWritableComparablesのコンパレータを実装すると、間違いなくMap/Reduce(MR)ジョブのスピードアップに役立ちます。思い出すかもしれませんが、MRジョブは、キーと値のペアを送受信することで構成されています。プロセスは次のようになります。

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

キーと値のペア(K2、V2)は、中間のキーと値のペアと呼ばれます。それらはマッパーから減速機に渡されます。これらの仲介キー - 値ペアがレデューサーに到達する前に、シャッフルおよびソートステップが実行される。

シャッフルは、仲介キー(K2)をレデューサーに割り当てたもので、ソートはこれらのキーのソートです。このブログでは、仲介キーを比較するためのRawComparatorを実装することで、この余計な作業がソートを大幅に改善します。 RawComparatorがキーをバイト単位で比較するため、並べ替えが改善されました。 RawComparatorを使用しなかった場合は、仲介キーを完全に非直列化して比較する必要があります。

注(要するに):

1)WritableComparablesは、典型的には、コンパレータを介して、相互に比較することができます。 Hadoop Map-Reduceフレームワークでキーとして使用されるタイプは、このインタフェースを実装する必要があります。

2)Hadoop Map-Reduceフレームワークの値として使用されるタイプはすべて、Writableインターフェイスを実装する必要があります。