2010-07-30 3 views
4

Я запускаю Hadoop 0.20.1 под SLES 10 (SUSE).Где Карта должна помещать временные файлы при работе под Hadoop

Задача «Моя карта» принимает файл и генерирует еще несколько, я затем генерирую результаты из этих файлов. Я хотел бы знать, где я должен размещать эти файлы, чтобы производительность была хорошей и конфликтов не было. Если Hadoop может удалить каталог автоматически - это было бы хорошо.

Прямо сейчас, я использую временную папку и идентификатор задачи, чтобы создать уникальную папку, а затем работать в подпапках этой папки.

reduceTaskId = job.get("mapred.task.id"); 
reduceTempDir = job.get("mapred.temp.dir"); 
String myTemporaryFoldername = reduceTempDir+File.separator+reduceTaskId+ File.separator;  
File diseaseParent = new File(myTemporaryFoldername+File.separator +REDUCE_WORK_FOLDER); 

Проблема такого подхода заключается в том, что я не уверен, что это является оптимальным, и я должен удалить каждую новую папку или я начинаю бежать из космоса. Благодаря akintayo

(редактировать) я обнаружил, что лучшее место для хранения файлов, которые вы не хотите за пределами жизни карты будут job.get («job.local.dir»), который обеспечивает путь, который будет удален при завершении задач карты. Я не уверен, что удаление выполняется на основе ключа или для каждого tasktracker.

ответ

0

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

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

$ {mapred.local.dir}/TaskTracker/архив /: Распределенный кэш. Этот каталог содержит локализованный распределенный кеш. Таким образом, локализованный распределенный кэш распределяются между всеми задачами и рабочих местами

http://www.cloudera.com/blog/2008/11/sending-files-to-remote-task-nodes-with-hadoop-mapreduce/

«Это является общим для программы MapReduce требовать один или несколько файлов для чтения каждой карты или уменьшить задачу перед выполнением. Например, у вас может быть таблица поиска, которая должна быть проанализирована перед обработкой набора записей.Для решения этого сценария реализация Hadoop MapReduce включает в себя распределенный кеш-файл, который будет управлять копированием ваших файлов на узлы выполнения задач.

DistributedCache был представлен в Hadoop 0.7.0, см. HADOOP-288 для более подробной информации о его происхождении. Существует много существующих документов natation для DistributedCache: см. FAQ Hadoop, учебное пособие по MapReduce, Hadoop Javadoc и учебное пособие по Hadoop Streaming. После того, как вы прочитали существующую документацию и поняли, как использовать DistributedCache, вернитесь назад ».

+0

Я понимаю, что DistributedCache используется только для файлов только для чтения, или, скорее, для файлов, которые одинаковы во всех узлах по заданному например, файл конфигурации или банку. Моя проблема заключается в том, что я генерирую файлы во время обработки, которые я могу или не могу сохранить, например, если я беру jpg и сжимаю его. Где бы я поместил эти файлы, когда я я работаю над ними. Спасибо – akintayo

+0

Как вы загружаете файлы в HDFS или у вас есть они уже на S3 или уже в HDFS? Вы можете использовать mapper для потоковой передачи файла (так что файл, который вы хотите вытащить извне HDFS будет во входном файле, вы можете прочитать строку) и выписать t он сжимал версию до HDFS в картографе или записывал из задания в другой магазин (например, Cassandra или MongoDB), и вообще нет HDFS. Что вы делаете с файлами после их сжатия? Речь идет только о хранении файлов в HDFS для резервного копирования и резервирования и сжатия для экономии места? –

+0

Файлы содержатся в моем файле входных последовательностей, я воссоздаю его, затем обрабатывая его поэтапно. После завершения обработки я копирую результат в файл выходной последовательности. Я должен использовать этот рабочий процесс, я пытаюсь выяснить, где я могу разместить файлы, чтобы они были доступны для задач, без замедления производительности. Спасибо – akintayo

Смежные вопросы