2017-01-25 7 views
3

Я работаю над решением, в котором программа-драйвер будет читать xml-файл, и из этого я возьму путь к файлу HDFS, и это будет прочитано внутри операции с картой. У меня здесь несколько вопросов. Поскольку операция карты будет выполняться в контейнерах (контейнеры будут выделены при запуске задания).Что произойдет, если один файл больше, чем исполнитель в операции с картой в YARN - SPARK?

  1. Что представляет собой единственный входной файл больше, чем у исполнителя. Так как файл не читается в программе драйвера, он не может выделить больше ресурсов? ИЛИ хозяин приложения получит больше памяти от диспетчера ресурсов?

Любая помощь очень ценится.

+0

Вы используете HDFS как FS? – FaigB

+0

Я использую HDFS .. – Aru

ответ

3

Каков единственный входной файл больше, чем у исполнителя?

Так как файл находится в HDFS, Спарк создаст 1 раздел для 1 блока в HDFS. Каждый раздел будет обрабатываться рабочим.

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

+0

Спасибо за ответ Кишоре. Итак, не имеет значения, инициируется ли чтение файла с исполнителя? – Aru

+0

каждый Исполнитель Spark будет считывать только один блок данных только по умолчанию. – Kishore

1

Загруженный файл отображается как RDD. RDD представляет собой комбинацию фрагментов, так называемых разделов, которые находятся внутри кластера. Чтение файла не является проблемой, но после преобразования он может вызывать исключение OOM в зависимости от ограничений памяти исполнителя. Потому что могут быть некоторые операции тасования, которые потребуют переноса разделов в одно место. По умолчанию память исполнителя установлена ​​равной 512 МБ. Но для обработки большого объема данных пользовательский параметр памяти. Spark резервирует части этой памяти для хранения данных в кэше и для временных данных перемешивания. Задайте кучу для них параметрами spark.storage.memoryFraction (значение по умолчанию 0.6) и spark.shuffle.memoryFraction (значение по умолчанию 0.2). Поскольку эти части кучи могут расти до того, как Spark может измерить и ограничить их, необходимо установить два дополнительных параметра безопасности: spark.storage.safetyFraction (по умолчанию 0,9) и spark.shuffle.safetyFraction (по умолчанию 0,8). Параметры безопасности уменьшают долю памяти на указанную величину. Фактическая часть кучи, используемой для хранения по умолчанию, составляет 0,6 × 0,9 (доля безопасности умножается на долю памяти), что составляет 54%. Аналогично, часть кучи, используемой для данных тасования, составляет 0,2 × 0,8 (показатель безопасности, умноженный на долю памяти в случайном порядке), что составляет 16%. Затем у вас есть 30% кучи, зарезервированных для других объектов и ресурсов Java, необходимых для запуска задач. Вы должны, однако, рассчитывать только на 20%.