Что такое режим пряжи-клиента в Spark?

Apache Spark недавно обновил версию до 0.8.1, в которой yarn-client режим доступен. У меня вопрос, что на самом деле означает режим пряжи-клиента? В документации сказано:

В режиме Yarn-Client приложение будет запускаться локально. Так же, как запуск приложения или спарк-оболочки в режиме Local / Mesos / Standalone. Метод запуска также схож с ними, просто убедитесь, что когда вам нужно указать основной URL, используйте вместо этого "yarn-client"

Что значит "запущен локально"? Локально где? На кластере Спарк?
В чем отличие от режима пряжи?

6 ответов

Решение

Приложение Spark состоит из драйвера и одного или нескольких исполнителей. Драйвер программы является основной программой (где вы создаете экземпляр SparkContext), который координирует исполнителей для запуска приложения Spark. Исполнители запускают задачи, назначенные водителем.

Приложение YARN имеет следующие роли: клиент Yarn, мастер приложения Yarn и список контейнеров, запущенных на менеджерах узлов.

Когда приложение Spark работает на YARN, оно имеет собственную реализацию клиента Yarn и мастера приложения Yarn.

На этом фоне основное отличие заключается в том, где запускается программа драйвера.

  1. Автономный режим Yarn: ваша драйверная программа работает как нить мастера приложения Yarn, который сам работает на одном из менеджеров узлов в кластере. Клиент Yarn просто получает статус от мастера приложения. Этот режим аналогичен заданию mapreduce, где мастер MR-приложения координирует контейнеры для запуска карты / сокращения задач.
  2. Режим клиента Yarn: ваша драйверная программа выполняется на клиенте Yarn, где вы вводите команду для отправки приложения spark (возможно, это не машина в кластере Yarn). В этом режиме, хотя приводная программа выполняется на клиентском компьютере, задачи выполняются на исполнителях в менеджерах узлов кластера YARN.

Ссылка: http://spark.incubator.apache.org/docs/latest/cluster-overview.html

Таким образом, в искре у вас есть два разных компонента. Есть водитель и рабочие. В режиме кластера пряжи драйвер работает удаленно на узле данных, а рабочие работают на отдельных узлах данных. В режиме клиента пряжи драйвер находится на компьютере, с которого началось задание, а рабочие находятся на узлах данных. В локальном режиме водитель и рабочие находятся на машине, которая начала работу.

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

Для себя я обнаружил, что режим кластера пряжи лучше, когда я дома на виртуальной частной сети, но режим клиента пряжи лучше, когда я запускаю код из центра обработки данных.

Режим Yarn-client также означает, что вы подключаете на один драйвер меньше рабочего узла.

Приложение Spark работает в

режим клиента пряжи:

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

  2. Распределение ресурсов выполняется менеджером ресурсов YARN на основе локальности данных на узлах данных, а программа драйвера с локальной машины будет контролировать исполнителей на искровом кластере (менеджеры узлов).

Пожалуйста, обратитесь к этой статье Cloudera для получения дополнительной информации.

Разница между автономным режимом и режимом развертывания пряжи,

  1. Оптимизация ресурсов не будет эффективной в автономном режиме.
  2. В автономном режиме программа-драйвер запускает исполнителя в каждом узле кластера независимо от местоположения данных.
  3. standalone подходит для случая использования, когда выполняется только ваше искровое приложение, и кластеру не нужно выделять ресурсы для других заданий эффективным образом.

введите описание изображения здесь

И искра, и пряжа - это распределенные рамки, но их роли разные:

Пряжа - это структура управления ресурсами, для каждого приложения она выполняет следующие роли:

ApplicationMaster: управление ресурсами одного приложения, в том числе запрос / освобождение ресурса от Yarn для приложения и монитор.

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

Обычный процесс саммита приложения для пряжи:

  1. Клиент подает заявку на подачу пряжи. В запросе Yarn должен знать класс ApplicationMaster; Для SparkApplication этоorg.apache.spark.deploy.yarn.ApplicationMaster, для работы MapReduce, это org.apache.hadoop.mapreduce.v2.app.MRAppMaster,

  2. Yarn выделяет некоторый ресурс для процесса ApplicationMaster и запускает процесс ApplicationMaster на одном из узлов кластера;

  3. После запуска ApplicationMaster ApplicationMaster будет запрашивать ресурс у Yarn для этого приложения и запускать рабочий;

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

Итак, проблема возникает, когда Spark использует Yarn в качестве инструмента управления ресурсами в кластере:

  • В режиме кластера пряжи клиент Spark подает искру заявку на пряжу, и Spark Driver, и Spark Executor находятся под наблюдением пряжи. С точки зрения пряжи, Spark Driver и Spark Executor не имеют никакой разницы, кроме обычных процессов Java, а именно рабочего процесса приложения. Таким образом, когда клиентский процесс завершен, например, клиентский процесс завершен или остановлен, приложение Spark на пряже все еще работает.

  • В режиме клиента пряжи только Spark Executor находятся под
    наблюдение за пряжей. Yarn ApplicationMaster запросит ресурс только для искрового исполнителя. Драйверная программа выполняется в клиентском процессе, который не имеет ничего общего с пряжей, просто процесс, отправляющий приложение на пряжу. Так что, когда клиент уходит, например, клиент
    процесс завершается, драйвер не работает, а вычисления прекращаются.

Прежде всего, давайте выясним, в чем разница между запуском Spark в автономном режиме и запуском Spark в диспетчере кластеров (Mesos или YARN).


При запуске Spark в автономном режиме у вас есть:

  • главный узел Spark
  • некоторые узлы Spark Slave, которые были "зарегистрированы" мастером Spark

Так:

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

При использовании менеджера кластера (я опишу для YARN, который является наиболее распространенным случаем), у вас есть:

  • Менеджер ресурсов YARN (работает постоянно), который принимает запросы на новые приложения и новые ресурсы (контейнеры YARN)
  • Менеджеры узлов YARN (работают постоянно), которые состоят из пула рабочих, в котором менеджер ресурсов будет распределять контейнеры.
  • Мастер приложений (работает в течение всего срока действия приложения YARN), который отвечает за запрос контейнеров у менеджера ресурсов и отправку команд в выделенные контейнеры.

Обратите внимание, что в этом случае есть 2 режима: cluster-mode а также client-mode, В режиме клиента, который вы упомянули:

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

Итак, вернемся к вашим вопросам:

Что значит "запущен локально"? Локально где? На кластере Спарк?

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

В чем отличие от режима пряжи?

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

В режиме yarn-client ваше искровое приложение работает на вашем локальном компьютере. В автономном режиме пряжи ваше искровое приложение будет отправлено в ResourceManager YARN как пряжа ApplicationMaster, а ваше приложение будет запущено в узле пряжи, где работает ApplicationMaster. В обоих случаях пряжа служит диспетчером кластера искры. Ваше приложение (SparkContext) отправляет задачи на пряжу.

Другие вопросы по тегам