Записать некоторые данные (строки) из моих картографов в отдельные каталоги в зависимости от логики в моем коде картографа
Я использую mrjob для своих нужд EMR.
Как мне записать некоторые данные (строки) из моих сопоставителей в "отдельные каталоги", в зависимости от некоторой логики в моем коде сопоставления, которую я могу:
тар гзип и
загрузить в отдельные сегменты S3 (в зависимости от имени каталога) после внезапного завершения / завершения задания?
Я думаю,--output-dir
'options только позволяет вам загружать окончательный вывод задания в этот каталог, но я бы хотел время от времени записывать и в другие каталоги из моих картостроителей.
3 ответа
Нет, ты не можешь в традиционном смысле.
Причина: MrJob внутренне использует потоковую передачу Hadoop для запуска сопоставления / сокращения заданий при работе с кластером Hadoop. Я предполагаю, что это то же самое для Amazon Elastic M/R, как и для кластера Hadoop.
--output-dir
фактически является входом для потоковой передачи Hadoop, которая указывает, где будут собираться выходные данные редукторов. Вы не можете использовать этот механизм для разделения данных в разные папки.
[Редактировать: в ответ на комментарий]
Насколько я понимаю, boto - это всего лишь библиотека для подключения к сервисам Amazon и доступа к ec2, s3 и т. Д.
Я думаю, что в нетрадиционном смысле вы все еще можете писать в разные каталоги.
Я не проверял эту идею и не рекомендую этот подход. Это все равно что открыть файл и записать его прямо в редукторы. Теоретически вы могли бы сделать это. Вместо того, чтобы просто записывать вывод редуктора в std.out. Вы можете открывать и писать в объекты S3 напрямую. Вы должны убедиться, что вы будете открывать различные файлы, так как он порождает несколько редукторов.
Это то, что я узнал, используя MrJob с кластером Hadoop: http://pyfunc.blogspot.com/2012/05/hadoop-map-reduce-with-mrjob.html
Я думаю, что Hadoop MultipleOutput
функция может помочь вам, в вашем обычае outputFormat
Вы можете указать путь и имя файла.
Вы можете следовать подходу создания собственного Jar и настроить свой OutputFormat
чтобы выводить мультиплекс в разные папки / файлы. Вы должны создать подкласс MultipleTextOutputFormat
и переопределить несколько методов в нем (generateFileNameForKeyValue(Text key, Text value, String leaf)
а также generateActualKey(Text key, Text value)
в основном).
Для получения более подробной информации вы можете обратиться к этому: http://www.infoq.com/articles/HadoopOutputFormat