Ожидаемое потребление дескрипторов открытых файлов в Hadoop 0.21.0 - PullRequest
2 голосов
/ 05 декабря 2010

Учитывая Hadoop 0.21.0, Какие предположения делает структура в отношении количества дескрипторов открытых файлов относительно каждой отдельной карты и сокращения операций?В частности, какие подоперации заставляют Hadoop открывать новый файловый дескриптор во время выполнения задания или разливать на диск?

(Это преднамеренно игнорирует использование MultipleOutputs, так как оно очень четко описывает гарантии, предоставляемые системой.)

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

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

1 Ответ

1 голос
/ 10 декабря 2010

Вот пост , который предлагает некоторое представление о проблеме:

Это происходит потому, что при использовании класса MultipleOutputs создается больше небольших файлов. Допустим, у вас есть 50 сопоставителей, а затем предполагается, что у вас нет искаженных данных, Test1 всегда будет генерировать ровно 50 файлов, а Test2 - от 50 до 1000 файлов (50Mappers x 20TotalPartitionsPossible), и это приводит к снижению производительности при вводе-выводе. В моем тесте было сгенерировано 199 выходных файлов для Test1 и 4569 выходных файлов для Test2.

Это подразумевает, что для нормального поведения число картографов точно эквивалентно количеству дескрипторов открытых файлов. MultipleOutputs очевидно искажает это число на количество картографов, умноженное на количество доступных разделов. Затем редукторы работают в обычном режиме, генерируя один файл (и, следовательно, один файловый дескриптор) на операцию сокращения.

Затем возникает проблема: во время операции spill большинство этих файлов остаются открытыми каждым картографом, так как вывод весело обрабатывается разделением. Отсюда проблема доступных файловых дескрипторов.

Таким образом, предполагаемый в настоящее время максимальный предел дескриптора файла должен составлять:

Фаза карты: number of mappers * total partitions possible

Уменьшить фазу: number of reduce operations * total partitions possible

И это, как мы говорим, вот что.

...