#hadoop #writable
#hadoop #доступный для записи
Вопрос:
У меня больше вопросов к дизайну, касающихся необходимости настраиваемого для моего варианта использования:
Итак, у меня есть пара документов, которые я буду обрабатывать по конвейеру и записывать промежуточные и окончательные данные в HDFS. Мой ключ будет чем-то вроде ObjectId — DocId — Pair — Lang. Я не понимаю, зачем / если мне понадобится настраиваемый файл для этого варианта использования. Я думаю, если бы у меня не было ключа, мне понадобился бы настраиваемый? Кроме того, когда я записываю данные в HDFS в редукторе, я использую пользовательский разделитель. Итак, это отчасти избавило бы меня от необходимости в пользовательской записи?
Я не уверен, правильно ли я понял концепцию необходимости настраиваемой записи. Может ли кто-нибудь указать мне правильное направление?
Комментарии:
1. Конечно, сейчас я собираюсь прочитать руководство Yahoo и книгу Тома Уайта.
Ответ №1:
Файлы для записи могут использоваться для де- / сериализации объектов. Например, запись в журнале может содержать временную метку, IP-адрес пользователя и агент браузера. Итак, вы должны реализовать свой собственный WritableComparable для ключа, который идентифицирует эту запись, и вы должны реализовать класс значений, который реализует Writable, который считывает и записывает атрибуты в вашей записи журнала.
Эти сериализации — просто удобный способ перенести данные из двоичного формата в объект. Некоторым фреймворкам, таким как HBase, по-прежнему требуются массивы байтов для сохранения данных. Таким образом, у вас будет много накладных расходов при самостоятельной передаче этого и это испортит ваш код.
Комментарии:
1. Спасибо, Томас. Я думаю, поскольку я имею дело со строковыми ключами, мне не нужно было бы реализовывать WritableComparable.
2. Нет, вы можете просто перейти к текстовому классу. GL
3. @Thomas Jungblut прав. Вы можете взглянуть на написание пользовательских файлов для записи
Ответ №2:
Ответ Томаса немного объясняет. Уже слишком поздно, но я хотел бы добавить следующее для потенциальных читателей:
Разделитель используется только между этапом сопоставления и уменьшения и не играет никакой роли при записи из reducer в выходные файлы.
Я не верю, что запись ПРОМЕЖУТОЧНЫХ данных в hdfs является обязательным требованием в большинстве случаев, хотя есть некоторые хаки, которые можно применить, чтобы сделать то же самое.
При записи из редуктора в hdfs ключи будут автоматически отсортированы, и каждый редуктор будет записывать в ОДИН ОТДЕЛЬНЫЙ файл. Ключи сортируются в зависимости от их compareTo
метода. Итак, если вы хотите выполнить сортировку на основе нескольких переменных, выберите пользовательский класс ключей, который расширяет WritableComparable
и реализует методы write
, readFields
и compareTo
. Теперь вы можете управлять способом сортировки ключей на основе compareTo
реализации