Записываемый и WritableComparable в Hadoop?

Может ли кто-нибудь объяснить мне, что:

Что такое Writable и Writable Comparable interface в Hadoop?

Чем отличаются эти два?

Пожалуйста, объясните с помощью примера.

Спасибо, Advance,

Ответ 1

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 - это только субинтерфейс Writable и 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) называются промежуточными парами ключ-значение. Они передаются от преобразователя к редуктору. До того, как эти промежуточные пары ключевого значения достигнут редуктора, выполняется шаг перемешивания и сортировки.

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

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

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

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

Ответ 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>

A Writable, который также является сравнимым.

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

Ответ 3

Writable - это один интерфейс, который вам нужен для реализации пользовательского класса определения, используемого в hadoop map-Reduce. Необходимо реализовать/переопределить две функции:

         write() and readFields();

Однако WritableComparable - это еще один подчиненный интерфейс Writable и Comparable, для которого необходимо реализовать/переопределить три функции:

         write() and readFields()     |    compareTo()

Как нам нужно реализовать compareTo(),

поэтому класс, реализующий WritableComparable, может использоваться в качестве ключа или значения в hadoop map-Reduce.

Тем не менее, класс, реализующий Writable, может использоваться только в качестве значения в 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