Другие основные статьи по Java:
Базовое изучение Java (справочник)
Обзор
Spark — это общая среда обработки больших данных, такая же, как и традиционная технология обработки больших данных Hadoop MapReduce и механизм потоковой обработки данных Storm в реальном времени.
Spark включает в себя различные вычислительные платформы, распространенные в области больших данных, такие как:
- Spark Core для автономных вычислений
- Spark SQL для интерактивных запросов
- Spark Streaming для потоковых вычислений в реальном времени
- Spark MLlib для машинного обучения
- Spark GraphX для графовых вычислений
Spark VS MapReduce
Из-за ограниченного уровня этой части ее можно перенести только в сводку других великих богов.
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, что подходит для практики и тестирования.
Автономный режим
- В автономном режиме используется собственная структура планирования ресурсов Spark.
- Принята типичная архитектура Master/Slave, а ZooKeeper используется для реализации высокой доступности Master.
- Схема структуры кадра выглядит следующим образом:
- Основными узлами в этом режиме являются клиентский узел, главный узел и рабочий узел.Драйвер может работать как на главном узле, так и на стороне локального клиента.. При использовании интерактивного инструмента spark-shell для отправки задания Spark драйвер запускается на главном узле; при использовании инструмента spark-submit для отправки задания или при использовании «new SparkConf.setManager(»spark:// При запуске Spark задача в режиме master:7077")», Драйвер запускается на локальном клиенте
Процесс запуска выглядит следующим образом:
- SparkContext подключен к Мастеру,Зарегистрируйтесь в Master и подайте заявку на ресурсы(ядро процессора и память)
- Мастер решает, какому рабочему процессу выделить ресурсы в соответствии с требованиями приложения ресурсов SparkContext и информацией, сообщаемой в цикле пульса рабочего процесса, а затем распределяет ресурсы для рабочего процесса.Доступ к ресурсам, а затем запустите StandaloneExecutorBackend;
- StandaloneExecutorBackendЗарегистрируйтесь в SparkContext;
- SparkContext будет кодом приложенияОтправить в StandaloneExecutorBackend; и SparkContext анализирует код приложения,Построить граф DAGи отправить планировщику DAGРазложить на этапы(При обнаружении операции Action будет создано задание; каждое задание содержит один или несколько этапов, и этапы обычно генерируются до получения внешних данных и перемешивания), а затем используется этап (или называемый TaskSet).Отправить в планировщик заданий, Планировщик задач отвечает за назначение задачНазначить соответствующему работнику,наконецОтправить в StandaloneExecutorBackend для выполнения;
- StandaloneExecutorBackend будетСоздайте пул потоков Executor и начните выполнение задачи.и отчитываться перед SparkContext, пока задача не завершится.
- После выполнения всех задач 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-клиента:
- Клиент Spark Yarn для ResourceManager YARNПодать заявку на запуск мастера приложений. При этом в инициализации SparkContent будут созданы DAGScheduler и TASKScheduler.Так как мы выбираем режим Yarn-Client, программа выберет YarnClientClusterScheduler и YarnClientSchedulerBackend
- После того, как ResourceManager получает запрос, он выбирает NodeManager в кластере, назначает первый контейнер приложению и требует, чтобы он находился в этом контейнере.ApplicationMaster, который запускает приложение,Отличие от YARN-Cluster заключается в том, что ApplicationMaster не запускает SparkContext, а только обращается к SparkContext для выделения ресурсов.
- После инициализации SparkContext в клиентеУстановите связь с ApplicationMaster и зарегистрируйтесь в ResourceManager, согласно информации о задаче в ResourceManagerПодать заявку на ресурс (Контейнер)
- Как только ApplicationMaster подаст заявку на ресурс (то есть на контейнер), онСвязь с соответствующим NodeManager, требуя, чтобы он находился в полученном КонтейнереЗапустить CoarseGrainedExecutorBackend, после запуска CoarseGrainedExecutorBackend он отправит SparkContext в ClientЗарегистрируйтесь и подайте заявку на задание
- SparkContext в клиентеНазначить задачу CoarseGrainedExecutorBackend для выполнения, CoarseGrainedExecutorBackend запускает задачу иСообщать о рабочем состоянии и прогрессе водителю, чтобы клиент мог отслеживать статус выполнения каждой задачи, чтобы задачу можно было перезапустить в случае сбоя задачи.
- После запуска приложения SparkContext клиента применяется к ResourceManager.выйтии закрой себя
YARN-кластерный режим
-
В режиме YARN-Cluster после того, как пользователь отправит приложение в YARN, YARN запустит приложение в два этапа:
- Первый этап — запустить драйвер Spark в качестве ApplicationMaster в кластере YARN;
- Второй этап заключается в создании приложения ApplicationMaster, затем запросе ресурсов из ResourceManager для него и запуске Executor для запуска Task, при этом отслеживая весь его запущенный процесс, пока операция не будет завершена.
-
Рабочий процесс YARN-кластера делится на следующие этапы
- Spark Yarn Client отправляет приложения в YARN, включая программы ApplicationMaster, команды для запуска ApplicationMaster, программы, которые необходимо запустить в Executor и т. д.
- После того как ResourceManager получает запрос, он выбирает NodeManager в кластере, назначает первый Контейнер приложению и просит его запустить ApplicationMaster приложения в этом Контейнере, гдеApplicationMaster инициализирует SparkContext и т. д. (драйвер)
- ApplicationMaster в ResourceManagerрегистр, так что пользователь может просматривать статус выполнения приложения напрямую через ResourceManage, а затем оно будет использовать метод опроса для каждой задачи через протокол RPCРесурсы приложений, и следить за их рабочим статусом до конца прогона
- Как только ApplicationMaster подаст заявку на ресурс (то есть на контейнер), он свяжется с соответствующим NodeManager.коммуникация, требуя, чтобы он находился в полученном КонтейнереЗапустить CoarseGrainedExecutorBackend, после запуска CoarseGrainedExecutorBackend он отправит в SparkContext в ApplicationMasterЗарегистрируйтесь и подайте заявку на задание. Это то же самое, что и автономный режим, за исключением того, что когда SparkContext инициализируется в приложении Spark, CoarseGrainedSchedulerBackend используется для координации с YarnClusterScheduler для планирования задач YarnClusterScheduler — это просто простая оболочка для TaskSchedulerImpl, добавляющая логику ожидания для Executor и т. д.
- SparkContext в ApplicationMasterНазначить задачу CoarseGrainedExecutorBackend для выполнения, CoarseGrainedExecutorBackend запускает Task для ApplicationMasterСообщите о статусе и ходе запуска, чтобы ApplicationMaster мог отслеживать статус выполнения каждой задачи, чтобы задачу можно было перезапустить в случае сбоя задачи.
- После запуска приложения 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
Схема работы искры выглядит следующим образом:
- Создайте рабочую среду приложения Spark и запустите SparkContext.
- SparkContext обращается к диспетчеру ресурсов (который может быть Standalone, Mesos, Yarn) для запуска ресурса Executor и запускает бэкэнд StandaloneExecutor.
- Исполнитель подает заявку на Task в SparkContext
- SparkContext распределяет приложения среди исполнителей
- SparkContext строит граф DAG, разбивает граф DAG на этапы, отправляет набор задач в планировщик заданий и, наконец, отправляет задачу исполнителю для запуска планировщиком заданий.
- Задача запускается на Executor и освобождает все ресурсы после запуска
Основной рабочий процесс RDD
-
Запуск RDD в Spark примерно разделен на следующие три шага:
- Создать объект RDD
- Модуль DAGScheduler вмешивается в операцию по вычислению зависимостей между RDD, а зависимости между RDD формируют DAG.
- Каждое задание разделено на несколько этапов. Основным основанием для разделения этапов является то, является ли ввод текущего коэффициента расчета детерминированным (широкая зависимость и узкая зависимость).Если это так, разделите его на один и тот же этап, чтобы избежать накладных расходов на передачу сообщений между несколькими этапами.
-
Примерная схема выглядит следующим образом:
Давайте рассмотрим пример сортировки по первой букве A-Z, чтобы найти общее количество разных имен под одной и той же начальной буквой, чтобы увидеть, как работает RDD.
Создание RDD В приведенном выше примере, за исключением того, что последний сбор — это действие, которое не создает RDD, первые четыре преобразования создадут новый RDD. Итак, первый шаг — создать все RDD (пять элементов информации внутри)? Создание плана выполнения Spark максимально конвейеризирует и разделяет этапы в зависимости от того, должны ли данные быть реорганизованы, например преобразование groupBy() в этом примере, которое делит весь план выполнения на двухэтапное выполнение. В конце концов DAG (ориентированный ациклический граф, направленный ациклический граф) будет сгенерирован как логический план выполнения.
Планирование задач Разделите каждый этап на разные задачи, каждая из которых представляет собой комбинацию данных и вычислений. Прежде чем перейти к следующему этапу, необходимо выполнить все задачи текущего этапа. Поскольку первое преобразование следующего этапа должно реорганизовать данные, оно должно дождаться, пока будут вычислены все результирующие данные текущего этапа, прежде чем продолжить.