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
реализация