Нужна помощь в понимании исполнения pyspark на пряжу в качестве мастера - PullRequest
0 голосов
/ 03 ноября 2018

У меня уже есть некоторая картина архитектуры пряжи, а также искровой архитектуры. Но когда я пытаюсь понять их вместе (вот что происходит когда задание apark выполняется на YARN в качестве мастера) в кластере Hadoop, я сталкиваюсь с некоторыми недоразумениями. Сначала я скажу свое понимание на примере ниже, а затем приходите в замешательство

Скажем, у меня есть файл "orderitems", хранящийся в HDFS с некоторым коэффициентом репликации. Сейчас я обрабатываю данные, считывая этот файл в RDD-искру (скажем, для расчета дохода по заказу). Я написал код и настроил подачу искры, как указано ниже

    spark-submit \
    --master yarn \
    --conf spark.ui.port=21888 \
    --num-executors 2 \
    --executor-memory 512M \
    src/main/python/order_revenue.py

Предположим, что я создал СДР с разделом 5 и выполнил его в режиме клиента пряжи.

Теперь Согласно моему пониманию, как только я отправлю искровую работу на YARN,

  • Запрос отправляется в Диспетчер приложений, который является компонентом ресурса. менеджер.
  • Диспетчер приложений найдет один диспетчер узлов и попросит его запустить контейнер.
  • Это первый контейнер приложения, и мы будем называть его Мастер приложений.
  • Мастер приложений берет на себя ответственность за выполнение и мониторинг работа.

Поскольку я отправил в режиме клиента, программа драйвера будет работать на моем пограничном узле / узле шлюза. Я предоставил num-executors как 2 и executor memory как 512 mb

Также я предоставил 5 разделов для СДР как 5, что означает, что он создаст 5 разделов для чтения данных. и распределить по 5 узлам.

Теперь вот мои несколько недоразумений по поводу этого

  • Я прочитал в руководстве пользователя, что разделы rdd будут распределены по разным узлам. Являются ли эти узлы такими же, как «Узлы данных» кластера HDFS? Я имею в виду здесь 5 разделов, делает это означает, что в 5 узлах данных?

  • Я упомянул num-executors как 2. Так что для этих 5 разделов данных будет использоваться 2 executors (CPU). Так что мой следующий вопрос, откуда это 2 исполнителя (CPU) будут выбраны? Я имею в виду 5 разделов в 5 узлах верно, так эти 2 исполнителя также находятся в любом из этих узлов?

  • Планировщик отвечает за распределение ресурсов между различными запущенными приложениями с учетом ограничений возможностей, очереди и т. д. А также Контейнер - это Linux Control Group, которая функция ядра Linux, которая позволяет пользователям распределять Процессор, память, дисковый ввод-вывод и пропускная способность для пользовательского процесса. Итак, мой финал Вопрос: Контейнеры на самом деле предоставляются "планировщиком"?

Я запутался здесь. Я упомянул архитектуру, документацию к выпуску и некоторые видео и запутался.

Здесь ожидают помощи.

1 Ответ

0 голосов
/ 04 ноября 2018

Чтобы ответить на ваши вопросы в первую очередь:

1) Очень просто, Executor - это рабочий узел spark, а драйвер - это узел manager, и он не имеет ничего общего с узлами hadoop. Предположим, что исполнители являются единицами обработки (скажем, 2 здесь), а перераспределение (5) делит данные на 5 блоков, которые должны быть этими двумя исполнителями, и на некоторой основе эти блоки данных будут разделены между двумя исполнителями. Данные перераспределения не создают узлы

Архитектура Spark кластера:

enter image description here

Режим клиента Spark on Yarn: enter image description here

Режим работы Spark on пряжи: enter image description here

Другие подробности вы можете прочитать в блоге https://sujithjay.com/2018/07/24/Understanding-Apache-Spark-on-YARN/

и https://0x0fff.com/spark-architecture/

...