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