hadoop CustomWritables

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

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

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

2 ответа

Решение

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

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

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

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

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

Другие вопросы по тегам