Подтвердить что ты не робот

Почему Hadoop нуждается в таких классах, как Text или IntWritable, вместо String или Integer?

Почему Hadoop нужно вводить эти новые классы? Они просто усложняют интерфейс

4b9b3361

Ответ 1

Для обработки объектов в режиме Hadoop. Например, hasoop использует Text вместо java String. Класс Text в hadoop похож на java String, однако Text реализует такие интерфейсы, как Comparable, Writable и WritableComparable.

Эти интерфейсы необходимы для MapReduce; интерфейс Comparable используется для сравнения, когда редуктор сортирует ключи, а Writable может записать результат на локальный диск. Он не использует java Serializable, потому что java Serializable слишком большой или слишком тяжелый для hadoop, Writable может сериализовать объект hadoop очень простым способом.

Ответ 2

Поскольку в большом мире данных структурированные объекты должны быть сериализованы в потоке байтов для перемещения по сети или сохранения на диске в кластере... и затем десериализоваться обратно по мере необходимости. Когда вы храните и перемещаете огромные объемы данных на такой же шкале Facebook, ваши данные должны быть эффективными и занимать как можно меньше места для хранения и времени для перемещения, насколько это возможно.

String и Integer просто слишком "жирные". Text и IntWritable, соответственно, обеспечивают намного более легкую абстракцию поверх байт-массивов, представляющих один и тот же тип информации.

Ответ 3

Дополнительная информация:

у них есть две функции, релевантные

у них есть "Writable" интерфейс - они знают, как писать в поток DataOutput и читать из потока DataInput - неявно.

у них есть обновления содержимого через операцию set(). Это позволяет повторно использовать одно и то же значение, многократно, без создания новых экземпляров. Его гораздо эффективнее, если один и тот же картограф или редуктор вызывается многократно: вы просто создаете экземпляры записываемых объектов в конструкторе и повторно используете их

В сравнении, Javas Serializable framework "волшебным образом" сериализует объекты, но делает это так, чтобы он был немного хрупким и, как правило, невозможно читать в значениях, генерируемых более старыми версиями класса. поток объектов Java предназначен для отправки графика объектов назад - он должен помнить, что все ссылки на объекты уже вытеснены, и делайте то же самое на обратном пути. Записи предназначены для самостоятельного использования.

Это от: http://hortonworks.com/community/forums/topic/why-hadoop-uses-default-longwritable-or-intwritable/

Ответ 4

Из документации Apache страница:

Интерфейс

Writable описывается как

Сериализуемый объект, который реализует простой, эффективный протокол сериализации на основе DataInput и DataOutput.

С помощью этого нового API у вас нет осложнений. Процесс сериализации с этими новыми классами - crisp и compact.

Для эффективности Hadoop процесс сериализации/де-сериализации должен быть оптимизирован, поскольку между узлами кластера происходит огромное количество удаленных вызовов. Поэтому формат сериализации должен быть быстрым, компактным, расширяемым и совместимым. По этой причине инфраструктура Hadoop придумала один класс ввода-вывода для замены примитивных типов данных Java. например IntWritbale для int, LongWritable для long, Text для String и т.д.

Более подробную информацию об этой теме вы можете найти в Hadoop. Окончательное руководство: 4-е издание