Являются ли исполнители ноутбуков Jupyter динамически распределенными в Apache Spark?

У меня возник вопрос, чтобы лучше понять концепцию больших данных в Apache Hadoop Spark. Не уверен, что это вне темы на этом форуме, но дайте мне знать.

Представьте себе кластер Apache Hadoop с 8 серверами, управляемыми менеджером ресурсов Yarn. Я загрузил файл в HDFS (файловая система), который настроен с размером блока размером 64 МБ и числом репликации 3. Этот файл затем разбивается на блоки размером 64 МБ. Теперь давайте представим, что блоки распределены HDFS на узлы 1, 2 и 3.

Но теперь я кодирую код Python с ноутбуком Jupyter. Поэтому ноутбук запускается с помощью этой команды:

PYSPARK_DRIVER_PYTHON = jupyter PYSPARK_DRIVER_PYTHON_OPTS = "notebook" pyspark –master yarn-client –num-исполнители 3 – исполнительные ядра 4 – память-исполнитель 16G

Внутри ноутбука я загружаю файл из HDFS, чтобы сделать некоторые аналитики. Когда я выполнил свой код, я могу видеть в веб-интерфейсе YARN, что у меня есть 3 исполнителя и как задания передаются (распределяются) исполнителям.

Интересная часть состоит в том, что мои исполнители привязаны к определенным вычислительным узлам сразу после команды запуска (см. Выше). Например, узлы 6, 7 и 8.

Мои вопросы:

  1. Является ли мое предположение правильным, что узлы-исполнители привязаны к вычислительным узлам, а блоки HDFS будут переданы исполнителям, когда я получаю (загружая) файл из HDFS?
  2. Или, исполнители динамически назначаются и запускаются в узлах, где находятся данные (узлы 1, 2 и 3). В этом случае мое наблюдение на веб-сайте YARN должно быть неправильным.

Мне действительно интересно понять это лучше.

настройка кластера

One Solution collect form web for “Являются ли исполнители ноутбуков Jupyter динамически распределенными в Apache Spark?”

Являются ли исполнители ноутбуков Jupyter динамически распределены в Apache Spark

Для ясности, давайте различать

  • Ноутбуки Jupyter и связанные с ними ядра – ядро ​​- это процесс Python за пользовательским интерфейсом ноутбука. Ядро выполняет любой код, который вы вводите и отправляете в свой ноутбук. Ядром управляет Юпитер, а не Спарк.

  • Spark executors – это вычислительные ресурсы, выделенные в кластере YARN для выполнения искровых заданий

  • Узлы данных HDFS – это то место, где находятся ваши данные. Узлы данных могут быть или не быть такими же, как узлы-исполнители.

Является ли мое предположение правильным, что узлы-исполнители привязаны к вычислительным узлам, а блоки HDFS будут переданы исполнителям после того, как я получаю (загружая) файл из HDFS

Да и нет – да, Spark учитывает местность данных при расчете заданий. Нет, нет никакой гарантии. Согласно документации Spark :

(…) есть два варианта: a) дождаться, пока занятый ЦП освободится, чтобы запустить задачу на данных на том же сервере, или b) немедленно запустить новую задачу в более удаленном месте, где требуется перемещение данных. То, что Spark обычно делает, это немного подождать в надежде, что занятый процессор освободится. По истечении этого таймаута он начинает перемещать данные издалека в свободный процессор. (…)

Или, исполнители динамически назначаются и запускаются в узлах, где находятся данные (узлы 1, 2 и 3).

Это зависит от конфигурации. В целом исполнители выделяются на искровое приложение (т.е. SparkContext) динамически и освобождаются, когда больше не используются. Тем не менее, исполнители сохраняются в течение некоторого времени в соответствии с документацией планирования заданий :

(…) Приложение Spark удаляет исполнителя, когда он простаивает больше, чем spark.dynamicAllocation.executorIdleTimeout seconds. (…)

Чтобы получить больше контроля над тем, что работает там, вы можете использовать пулы планировщиков .

  • Как Spark работает в YARN для использования памяти Python?
  • Лучший способ получить максимальное значение в столбце Dataframe Spark
  • тип данных для обработки больших чисел в pyspark
  • Как построить разреженную матрицу в PySpark?
  • KeyError: SPARK_HOME во время инициализации SparkConf
  • PySpark: как преобразовать столбец массива (т.е. список) в вектор
  • Переполнение стека при обработке нескольких столбцов с помощью UDF
  • Фильтрация столбцов в PySpark
  • Python - лучший язык программирования в мире.