Spark Learning (1) - режим работы и процесс работы

Большое количество данных

Другие основные статьи по Java:
Базовое изучение Java (справочник)


Обзор

Spark — это общая среда обработки больших данных, такая же, как и традиционная технология обработки больших данных Hadoop MapReduce и механизм потоковой обработки данных Storm в реальном времени.
Spark включает в себя различные вычислительные платформы, распространенные в области больших данных, такие как:

  • Spark Core для автономных вычислений
  • Spark SQL для интерактивных запросов
  • Spark Streaming для потоковых вычислений в реальном времени
  • Spark MLlib для машинного обучения
  • Spark GraphX ​​для графовых вычислений

Spark VS MapReduce

Из-за ограниченного уровня этой части ее можно перенести только в сводку других великих богов.

Блог Woohoo.cn на.com/dead end/afraid/6…

blog.CSDN.net/05160711 онлайн-игр…

Кратко резюмируя:

  • Spark обеспечивает вычисления в памяти, которые могут помещать промежуточные результаты в память, что более эффективно для итерационных операций.
  • Механизм выполнения задач Spark на основе DAG превосходит механизм итеративного выполнения Hadoop MapReduce.
  • Используйте модель многопоточного пула, чтобы сократить время запуска задачи, избежать ненужных операций сортировки и уменьшить количество дисковых операций ввода-вывода во время процесса перемешивания, в то время как MapReduce использует модель многопроцессорности.
  • Spark обеспечивает поддержку нескольких языков, особенно scala, который удобен и прост в использовании.

Ключевые концепции Spark

  • Application: Приложение относится к написанному пользователем приложению Spark, которое включает в себяDriver功能Код и распределен для запуска на нескольких узлах в кластереExecutor代码
  • Driver: Драйвер в Spark запускает указанное выше приложение.main函数и создатьSparkContext, Целью создания SparkContext является подготовка рабочей среды приложения Spark.В Spark SparkContext отвечает за связь с ClusterManager, выполнение приложения ресурсов, распределение задач и мониторинг и т. д. Когда часть Executor завершена, Driver также отвечает за закрытие SparkContext.обычно используетсяSparkContext означает «драйвер».
  • Executor: приложение запущеноworker节点тот, что на进程, процесс отвечает за выполнение определенных задач и отвечает за сохранение данных в память или на диск, каждое Приложение имеет各自独立的一批Executor, в режиме Spark on Yarn его процесс называется CoarseGrainedExecutor Backend. CoarseGrainedExecutor Backend имеет один и только один объект Executor, который отвечает за перенос Task в taskRunner и извлечение незанятого потока из пула потоков для запуска Task.Количество задач, которые каждый CoarseGrainedExecutor Backend может выполнять параллельно, зависит от количество процессоров, выделенных ему.
  • Cluster Manager: относится к внешней службе, которая получает ресурсы в кластере. В настоящее время существует три типа
    • Standalone: Управление собственными ресурсами Spark, Master отвечает за распределение ресурсов.
    • Apache Mesos: структура планирования ресурсов с хорошей совместимостью с Hadoop MR.
    • Hadoop Yarn: в основном относится к ResourceManager в Yarn.
  • Worker: любой узел в кластере, на котором может выполняться код приложения. В автономном режиме это относится к рабочему узлу, настроенному с помощью подчиненного файла. В режиме Spark on Yarn это узел NodeManager.
  • Task: рабочая единица, отправляемая исполнителю, аналогична концепции MapTask и ReduceTask в hadoopMR. Это основная единица запуска приложения. Несколько задач образуют этап, а TaskScheduler отвечает за планирование и управление задачами.
  • Job: параллельные вычисления, состоящие из нескольких задач, часто запускаются и генерируются Spark Action.В приложении часто генерируются несколько заданий.
  • Stage: Каждое задание будет разделено на несколько наборов задач в виде набора задач, имя которого — «Этап», разделение и планирование этапов обрабатываются DAGScheduler, этапы имеют нефинальные этапы (этап «Перемешать карту») и финальные этапы (этап «Результат»). два вида, граница этапа - это место, где происходит перемешивание
  • DAGScheduler: на основе DAG на основе заданий (направленный ациклический граф с диаграммой без колец) STAGE передается в TasksCheduler. Его разделение STAGE основано на отношении между RDD для определения метода минимального планирования, как показано ниже.

  • TASKSedulter: Отправьте TaskSET рабочему для запуска, и здесь выделяется та задача, которую запускает каждый исполнитель. TaskScheduler поддерживает все наборы задач. Когда Executor сообщает драйверу, TaskScheduler выделяет соответствующую задачу в соответствии с оставшимися ресурсами. Кроме того, TaskScheduler также поддерживает текущие метки всех задач и повторяет невыполненные задачи. На следующем рисунке показана роль TaskScheduler.

  • Планировщик заданий в разных режимах работы выглядит следующим образом:
    • Spark в автономном режиме — это TaskScheduler.
    • Режим YARN-клиента — YarnClientClusterScheduler.
    • Режим YARN-кластера — YarnClusterScheduler.

Диаграмма уровня выполнения, связывающая эти термины вместе, выглядит следующим образом:

Краткое содержание:Job = несколько этапов, Stage = несколько задач одного типа, Task делится на ShuffleMapTask и ResultTask, Dependency делится на ShuffleDependency (широкая зависимость) и NarrowDependency (узкая зависимость)

  • ResultTask: для последней стадии (т. е. ResultStage) в графе DAG будет создано такое же количество разделов ResultTask, как и в последнем RDD (последнее ребро графа DAG) в графе DAG.
  • ShuffleMapTask: для непоследнего этапа (то есть ShuffleMapStage) будет создан ShuffleMapTask с таким же количеством разделов RDD в конце этапа.

Искровой режим работы

Spark имеет различные и гибкие режимы работы.При развертывании на одной машине он может работать как в локальном режиме, так и в псевдораспределенном режиме.При развертывании в распределенном кластере также существует множество режимов работы.Что касается вариантов, это зависит от фактического ситуации в кластере. Базовое планирование ресурсов может опираться на внешнюю структуру планирования ресурсов. В основном существуют следующие три типа:

  • локальный локальный режим
  • Встроенный автономный режим Spark.
  • Искра в режиме пряжи
  • Искра в режиме мезоса

локальный режим

В этом режиме нам нужно только распаковать пакет Spark, чтобы использовать его.При запуске запустите bin/spark-shell из каталога bin в каталоге Spark, что подходит для практики и тестирования.

Искровой режим работы (1) - - - Искронезависимый режим

Автономный режим

Spark (1): базовая архитектура и принципы

  • В автономном режиме используется собственная структура планирования ресурсов Spark.
  • Принята типичная архитектура Master/Slave, а ZooKeeper используется для реализации высокой доступности Master.
  • Схема структуры кадра выглядит следующим образом:

  • Основными узлами в этом режиме являются клиентский узел, главный узел и рабочий узел.Драйвер может работать как на главном узле, так и на стороне локального клиента.. При использовании интерактивного инструмента spark-shell для отправки задания Spark драйвер запускается на главном узле; при использовании инструмента spark-submit для отправки задания или при использовании «new SparkConf.setManager(»spark:// При запуске Spark задача в режиме master:7077")», Драйвер запускается на локальном клиенте

Процесс запуска выглядит следующим образом:

  1. SparkContext подключен к Мастеру,Зарегистрируйтесь в Master и подайте заявку на ресурсы(ядро процессора и память)
  2. Мастер решает, какому рабочему процессу выделить ресурсы в соответствии с требованиями приложения ресурсов SparkContext и информацией, сообщаемой в цикле пульса рабочего процесса, а затем распределяет ресурсы для рабочего процесса.Доступ к ресурсам, а затем запустите StandaloneExecutorBackend;
  3. StandaloneExecutorBackendЗарегистрируйтесь в SparkContext;
  4. SparkContext будет кодом приложенияОтправить в StandaloneExecutorBackend; и SparkContext анализирует код приложения,Построить граф DAGи отправить планировщику DAGРазложить на этапы(При обнаружении операции Action будет создано задание; каждое задание содержит один или несколько этапов, и этапы обычно генерируются до получения внешних данных и перемешивания), а затем используется этап (или называемый TaskSet).Отправить в планировщик заданий, Планировщик задач отвечает за назначение задачНазначить соответствующему работнику,наконецОтправить в StandaloneExecutorBackend для выполнения;
  5. StandaloneExecutorBackend будетСоздайте пул потоков Executor и начните выполнение задачи.и отчитываться перед SparkContext, пока задача не завершится.
  6. После выполнения всех задач SparkContext отправляет Masterвыйти, освободить ресурсы

Искра в режиме пряжи

Базовый фреймворк Yarn можно прочитать в предыдущей статьеОбучение Hadoop (2) — Архитектура MapReduce\Yarn.
Режим Spark on YARN делится на два режима в зависимости от расположения драйвера в кластере: один — это режим YARN-Client, а другой — YARN-Cluster (или YARN-Standalone).

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

  • В режиме Yarn-ClientДрайвер запускается локально на клиенте, этот режим позволяет приложению Spark взаимодействовать с клиентом. Поскольку драйвер находится на клиенте, доступ к состоянию драйвера можно получить через веб-интерфейс. По умолчаниюhttp://hadoop1:4040 и YARN через http://доступ к hadoop1:8088

  • Шаги рабочего процесса YARN-клиента:

  1. Клиент Spark Yarn для ResourceManager YARNПодать заявку на запуск мастера приложений. При этом в инициализации SparkContent будут созданы DAGScheduler и TASKScheduler.Так как мы выбираем режим Yarn-Client, программа выберет YarnClientClusterScheduler и YarnClientSchedulerBackend
  2. После того, как ResourceManager получает запрос, он выбирает NodeManager в кластере, назначает первый контейнер приложению и требует, чтобы он находился в этом контейнере.ApplicationMaster, который запускает приложение,Отличие от YARN-Cluster заключается в том, что ApplicationMaster не запускает SparkContext, а только обращается к SparkContext для выделения ресурсов.
  3. После инициализации SparkContext в клиентеУстановите связь с ApplicationMaster и зарегистрируйтесь в ResourceManager, согласно информации о задаче в ResourceManagerПодать заявку на ресурс (Контейнер)
  4. Как только ApplicationMaster подаст заявку на ресурс (то есть на контейнер), онСвязь с соответствующим NodeManager, требуя, чтобы он находился в полученном КонтейнереЗапустить CoarseGrainedExecutorBackend, после запуска CoarseGrainedExecutorBackend он отправит SparkContext в ClientЗарегистрируйтесь и подайте заявку на задание
  5. SparkContext в клиентеНазначить задачу CoarseGrainedExecutorBackend для выполнения, CoarseGrainedExecutorBackend запускает задачу иСообщать о рабочем состоянии и прогрессе водителю, чтобы клиент мог отслеживать статус выполнения каждой задачи, чтобы задачу можно было перезапустить в случае сбоя задачи.
  6. После запуска приложения SparkContext клиента применяется к ResourceManager.выйтии закрой себя

YARN-кластерный режим

  • В режиме YARN-Cluster после того, как пользователь отправит приложение в YARN, YARN запустит приложение в два этапа:

    1. Первый этап — запустить драйвер Spark в качестве ApplicationMaster в кластере YARN;
    2. Второй этап заключается в создании приложения ApplicationMaster, затем запросе ресурсов из ResourceManager для него и запуске Executor для запуска Task, при этом отслеживая весь его запущенный процесс, пока операция не будет завершена.
  • Рабочий процесс YARN-кластера делится на следующие этапы

  1. Spark Yarn Client отправляет приложения в YARN, включая программы ApplicationMaster, команды для запуска ApplicationMaster, программы, которые необходимо запустить в Executor и т. д.
  2. После того как ResourceManager получает запрос, он выбирает NodeManager в кластере, назначает первый Контейнер приложению и просит его запустить ApplicationMaster приложения в этом Контейнере, гдеApplicationMaster инициализирует SparkContext и т. д. (драйвер)
  3. ApplicationMaster в ResourceManagerрегистр, так что пользователь может просматривать статус выполнения приложения напрямую через ResourceManage, а затем оно будет использовать метод опроса для каждой задачи через протокол RPCРесурсы приложений, и следить за их рабочим статусом до конца прогона
  4. Как только ApplicationMaster подаст заявку на ресурс (то есть на контейнер), он свяжется с соответствующим NodeManager.коммуникация, требуя, чтобы он находился в полученном КонтейнереЗапустить CoarseGrainedExecutorBackend, после запуска CoarseGrainedExecutorBackend он отправит в SparkContext в ApplicationMasterЗарегистрируйтесь и подайте заявку на задание. Это то же самое, что и автономный режим, за исключением того, что когда SparkContext инициализируется в приложении Spark, CoarseGrainedSchedulerBackend используется для координации с YarnClusterScheduler для планирования задач YarnClusterScheduler — это просто простая оболочка для TaskSchedulerImpl, добавляющая логику ожидания для Executor и т. д.
  5. SparkContext в ApplicationMasterНазначить задачу CoarseGrainedExecutorBackend для выполнения, CoarseGrainedExecutorBackend запускает Task для ApplicationMasterСообщите о статусе и ходе запуска, чтобы ApplicationMaster мог отслеживать статус выполнения каждой задачи, чтобы задачу можно было перезапустить в случае сбоя задачи.
  6. После запуска приложения ApplicationMaster обращается к ResourceManager.выйтии закрой себя

Различия между клиентом Spark и кластером Spark:

  • Прежде чем понять глубокую разницу между YARN-Client и YARN-Cluster, давайте проясним концепцию: Application Master. В YARN каждый экземпляр приложения имеет процесс ApplicationMaster, которыйПервый контейнер, запущенный приложением. Он отвечает за работу с ResourceManager и запрос ресурсов.После получения ресурсов он сообщает NodeManager запустить для него Container. В более глубоком смысле разница между режимами YARN-Cluster и YARN-Client на самом деле является разницей между процессом ApplicationMaster.
  • В режиме YARN-кластераДрайвер работает в AM (Application Master), который отвечает за запрос ресурсов из YARN и наблюдение за работоспособностью заданий. После того, как пользователь отправит задание, клиент может быть отключен, а задание будет продолжать выполняться в YARN, поэтому режим YARN-Cluster не подходит для запуска интерактивных заданий.
  • В режиме YARN-клиентДрайвер работает в клиенте клиента, Мастер приложений запрашивает только Исполнителя из YARN, а Клиент будет связываться с запрошенным Контейнером для планирования своей работы, а это значит, что Клиент не может уйти

Запущенный процесс Spark

Основной рабочий процесс Spark

Схема работы искры выглядит следующим образом:

  1. Создайте рабочую среду приложения Spark и запустите SparkContext.
  2. SparkContext обращается к диспетчеру ресурсов (который может быть Standalone, Mesos, Yarn) для запуска ресурса Executor и запускает бэкэнд StandaloneExecutor.
  3. Исполнитель подает заявку на Task в SparkContext
  4. SparkContext распределяет приложения среди исполнителей
  5. SparkContext строит граф DAG, разбивает граф DAG на этапы, отправляет набор задач в планировщик заданий и, наконец, отправляет задачу исполнителю для запуска планировщиком заданий.
  6. Задача запускается на Executor и освобождает все ресурсы после запуска

Основной рабочий процесс RDD

  • Запуск RDD в Spark примерно разделен на следующие три шага:

    1. Создать объект RDD
    2. Модуль DAGScheduler вмешивается в операцию по вычислению зависимостей между RDD, а зависимости между RDD формируют DAG.
    3. Каждое задание разделено на несколько этапов. Основным основанием для разделения этапов является то, является ли ввод текущего коэффициента расчета детерминированным (широкая зависимость и узкая зависимость).Если это так, разделите его на один и тот же этап, чтобы избежать накладных расходов на передачу сообщений между несколькими этапами.
  • Примерная схема выглядит следующим образом:

Давайте рассмотрим пример сортировки по первой букве A-Z, чтобы найти общее количество разных имен под одной и той же начальной буквой, чтобы увидеть, как работает RDD.

Создание RDD В приведенном выше примере, за исключением того, что последний сбор — это действие, которое не создает RDD, первые четыре преобразования создадут новый RDD. Итак, первый шаг — создать все RDD (пять элементов информации внутри)? Создание плана выполнения Spark максимально конвейеризирует и разделяет этапы в зависимости от того, должны ли данные быть реорганизованы, например преобразование groupBy() в этом примере, которое делит весь план выполнения на двухэтапное выполнение. В конце концов DAG (ориентированный ациклический граф, направленный ациклический граф) будет сгенерирован как логический план выполнения.

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