hadoop CustomWritables - PullRequest
       36

hadoop CustomWritables

1 голос
/ 12 апреля 2011

У меня есть вопрос о необходимости разработки CustomWritable для моего варианта использования:

Итак, у меня есть пара документов, которую я буду обрабатывать по конвейеру и записывать промежуточные и окончательные данные в HDFS.Мой ключ будет что-то вроде ObjectId - DocId - Pair - Lang.Я не понимаю, почему / если мне понадобится CustomWritable для этого варианта использования.Я думаю, если бы у меня не было ключа, мне понадобился бы CustomWritable?Кроме того, когда я записываю данные в HDFS в Reducer, я использую Custom Partitioner.Итак, это как бы исключило мою потребность в Custom Writable?

Я не уверен, понял ли я идею о необходимости Custom Writable права.Может ли кто-нибудь указать мне правильное направление?

Ответы [ 2 ]

1 голос
/ 13 апреля 2011

Writables могут быть использованы для де / сериализации объектов. Например, запись в журнале может содержать метку времени, IP-адрес пользователя и агент браузера. Поэтому вы должны реализовать свой собственный WritableComparable для ключа, который идентифицирует эту запись, и вы должны реализовать класс значений, который реализует Writable, который читает и записывает атрибуты в вашей записи журнала.
Эти сериализации являются просто удобным способом передачи данных из двоичного формата в объект. Некоторым фреймворкам, таким как HBase, по-прежнему требуются байтовые массивы для сохранения данных. Таким образом, вы будете вынуждены переносить это самостоятельно и портить ваш код.

0 голосов
/ 11 февраля 2016

Томас ответ объясняет немного. Уже слишком поздно, но я хотел бы добавить следующее для будущих читателей:

Partitioner вступает в игру только между картой и фазой сокращения и не играет никакой роли при записи от редуктора к выходным файлам.

Я не верю, что запись промежуточных данных в hdfs является обязательным требованием в большинстве случаев, хотя есть некоторые методы, которые можно применить для того же.

Когда вы пишете из редуктора в hdfs, ключи автоматически сортируются, и каждый редуктор записывает в ОДИН РАЗДЕЛИТЕЛЬНЫЙ файл. Основываясь на методе compareTo, ключи сортируются. Поэтому, если вы хотите выполнить сортировку по нескольким переменным, перейдите к классу пользовательских ключей, который расширяет WritableComparable, и реализуйте методы write, readFields и compareTo. Теперь вы можете контролировать способ сортировки ключей, основываясь на реализации compareTo

...