2015-09-11 3 views
11

Может ли кто-нибудь объяснить мне, что:Writable and WritableComparable в Hadoop?

Что такое Writable и Writable Сопоставимый интерфейс в Hadoop?

В чем разница между этими двумя?

Просьба пояснить на примере.

Спасибо заранее,

ответ

2

Короче говоря, тип, используемый в качестве ключа в 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> 

с возможностью записи, который также Сопоставимые.

WritableComparables можно сравнивать друг с другом, как правило, через Компараторы. Любой тип, который должен использоваться в качестве ключа в Hadoop Map-Reduce framework, должен реализовать этот интерфейс.

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 реализует этот интерфейс.

17

Writable в интерфейсе в Hadoop и типов в Hadoop должны реализовывать этот интерфейс. Hadoop предоставляет эти перезаписываемые оболочки практически для всех примитивных типов Java и некоторых других типов, но иногда нам нужно передавать пользовательские объекты, и эти пользовательские объекты должны реализовывать интерфейс Hadoop Writable. Hadoop MapReduce использует реализации Writables для взаимодействия с предоставленными пользователем Mappers и Reducers.

Для реализации интерфейса Writable мы требуем два метода:

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

Зачем использовать Hadoop Writable (s)?

Как мы уже знаем, данные должны передаваться между различными узлами в распределенной вычислительной среде. Это требует сериализации и десериализации данных для преобразования данных, которые находятся в структурированном формате, в байтовый поток и наоборот. Поэтому Hadoop использует простой и эффективный протокол сериализации для сериализации данных между картой и фазой уменьшения, и они называются Writable (s). Некоторые из примеров записываемых файлов, как уже упоминалось ранее, являются IntWritable, LongWritable, BooleanWritable и FloatWritable.

См: https://developer.yahoo.com/hadoop/tutorial/module5.html например

WritableComparable интерфейс просто подинтерфейс интерфейсов Записываемых и java.lang.Comparable. Для реализации WritableComparable мы должны иметь метод CompareTo отдельно от readFields и писать методы, как показано ниже:

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, определенно поможет ускорить работу с Map/Reduce (MR). Как вы помните, MR Job состоит из приема и отправки пар ключ-значение. Процесс выглядит следующим образом.

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

Ключи-значения (K2, V2) называются промежуточными парами ключа-значения. Они передаются от преобразователя к редуктору. До того, как эти промежуточные пары ключевого значения достигнут редуктора, выполняется шаг перемешивания и сортировки.

Shuffle - это назначение промежуточных ключей (K2) редукторам, а сортировка - сортировка этих ключей. В этом блоге, реализуя RawComparator для сравнения промежуточных ключей, это дополнительное усилие значительно улучшит сортировку. Сортировка улучшена, потому что RawComparator будет сравнивать ключи по байтам. Если мы не использовали RawComparator, промежуточные ключи должны были бы полностью десериализоваться для сравнения.

Примечание (коротко):

1) WritableComparables можно сравнить друг с другом, как правило, с помощью компараторов. Любой тип, который должен использоваться как ключ в структуре Hadoop Map-Reduce, должен реализовывать этот интерфейс.

2) Любой тип, который должен использоваться как значение в структуре Hadoop Map-Reduce, должен реализовать интерфейс Writable.

Смежные вопросы