Рубрики
Без рубрики

Искра. Анатомия искровой приложения

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

Apache Spark считается мощным дополнением к Hadoop оригинальные технологии больших данных. Spark – это более доступный, мощный и способный большой инструмент данных для решения различных проблем с большими данными. Он стал мейнстримом и самым требовательным большим содержанием данных по всем основным отраслям промышленности. Искра стала частью Hadoop с 2.0. И является одной из самых полезных технологий для Python Big Signers.

Эта серия постов – это однократный ресурс, который дает обзор искровой архитектуры, и это хорошо для людей, которые хотят изучать искру.

Весь серия:

Архитектура

Компоненты зажимного приложения:

  • Водитель
  • Мастер приложений
  • Сисской контекст
  • Исполнители
  • Cluster Resource Manager (AKA Cluster Manager)

Spark использует архитектуру Master/Plave с центральным координатором, названным Водитель и набор исполняемого работника, называемый Исполнители , которые расположены на разных кластерных узлах.

Водитель

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

Зажиганный драйвер содержит различные компоненты – Dagscheduler , Планировщик заданий , BackenseCheDeLer и Блок менеджера . Они несут ответственность за перевод пользовательского кода в актуальные заправки, выполненные в кластере.

Другие свойства водителя:

  • может работать в независимом процессе или на одном из рабочих узла для высокой доступности (HA);
  • хранит метаданные обо всех упругих распределенных базах данных и их разделов;
  • создается после того, как пользователь подает искровое приложение в кластерный менеджер (пряжа в нашем случае);
  • бежит в своем собственном JVM;
  • Оптимизирует логический дистанцию преобразований и объединить их на этапы, если это возможно;
  • приносит искру Webui с деталями приложения;

Мастер приложений

Как мы описали в Первый пост – Application Master – это рамка-специфическая организация и поручено переговоры об ресурсах от ResourceManager и работает с NodeManager (ы) для выполнения и мониторинга задач приложений.

Spark Master создается одновременно с драйвером в том же узле (в случае режима кластера), когда пользователь представляет зажигание, используя Spark-Отправить Отказ

Водитель информирует Мастер приложений об требованиях к требованиям исполнителя к заявке, а Мастер приложений договаривается о ресурсах с руководителем ресурсов для размещения этих исполнителей.

В автономном режиме Spark Master играет роль Cluster Manager.

Сисской контекст

Контекст искры является основной точкой входа для искровой функциональности и, поэтому сердце любого зажигания. Это позволяет зажимать драйвер для доступа к кластеру через диспетчер ресурсов кластера, и его можно использовать для создания RDDS, Аккумуляторы и вещательные переменные на кластере. Spark Context также отслеживает живые исполнители, регулярно отправляя сообщения сердца.

Контекст искры создан от Spark Driver для каждого отдельного зажимного приложения, когда он сначала отправляется пользователем. Это существует на протяжении всей жизни искровой приложения.

Контекст искры завершается после завершения зажигания. Только один искримый контекст может быть активен на JVM. Вы должны Стоп () Активный контекст искры перед созданием нового.

Cluster Resource Manager

Cluster Manager в распределенном зажигании – это процесс, который контролирует, регулируется, резервирует ресурсы в форме контейнеров на узлах кластера рабочих мест. Эти контейнеры зарезервированы по запросу Masters приложений и выделены для мастера приложений при выпуске или доступных.

После того, как Cluster Cluster выделяет контейнеры, Application Master предоставляет ресурсы контейнера обратно в Spark Driver, и Spark Driver будет нести ответственность за выполнение различных этапов и задач искровой приложения.

Исполнители

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

Изучения запускаются один раз в начале зажигания приложения, а затем они проводятся на всю жизнь приложения, это явление известно как «статическое распределение исполнителей». Тем не менее, пользователи также могут выбрать динамические распределения исполнителей, в которой они могут динамически добавлять или удалять динамические исполнители, чтобы соответствовать общей рабочей нагрузке. Даже если искровой исполнитель не удается, зажигание может продолжаться.

Исполнители обеспечивают хранение в памяти для разделов RDD, которые кэшируются (локально) в Spark Applications (через BlockManager ).

Другие свойства исполнительника:

  • хранит данные в кеше в кучи JVM или на жестких дисках
  • Читает данные из внешних источников
  • Пишет данные на внешние источники
  • выполняет все обработку данных

Spark приложение работает

На этом уровне понимания давайте создадим и сломаем одно из самых простых искровых приложений.

    from pyspark.sql import SparkSession

    # initialization of spark context
    conf = SparkConf().setAppName(appName).setMaster(master) 
    sc = SparkSession\
            .builder\
            .appName("PythonWordCount")\
                    .config(conf=conf)
            .getOrCreate()

    # read data from HDFS, as a result we get RDD of lines
    linesRDD = sc.textFile("hdfs://...")

    # from RDD of lines create RDD of lists of words 
    wordsRDD = linesRDD.flatMap(lambda line: line.split(" ")

    # from RDD of lists of words make RDD of words tuples where 
    # the first element is word and the second is counter, at the
    # beginning it should be 1
    wordCountRDD= wordsRDD.map(lambda word: (word, 1))

    # combine elements with the same word value
    resultRDD = wordCountRDD.reduceByKey(lambda a, b: a + b)

    # write it back to HDFS
    resultRDD.saveAsTextFile("hdfs://...")
    spark.stop()
  1. Когда мы отправляем искровое приложение через режим кластера, Spark-Отправить Утилита будет взаимодействовать с помощью Cluster Resource Manager, чтобы запустить Master Application.
  2. Менеджер ресурсов получает ответственность за выделение необходимого контейнера, в котором будет запущен мастер приложений. Затем Manager Resource запускает мастер приложений.
  3. Мастер приложений регистрирует себя на диспетчере ресурсов. Регистрация позволяет клиентской программе задавать менеджер ресурсов для конкретной информации, которая позволяет ему напрямую связь со своим собственным мастером приложений.
  4. Следующий Spark Driver работает на контейнере Master Application (в случае режима кластера).
  5. Водитель неявно преобразует пользовательский код, который содержит преобразования и действия в логический план, называемый Dag of RDDS. Все RDDS создаются на драйвере и ничего не делают, пока не вызывается действие. На этом этапе драйвер также выполняет оптимизации, такие как трансформации по трубопроводу.
  6. После этого он преобразует Dag в физический план исполнения. После преобразования в план физического выполнения он создает физические исполнительные устройства, называемые задачами под каждым этапом.
  7. Теперь водитель разговаривает с руководителем кластера и ведет договаривает ресурсы. Cluster Manager затем выделяет контейнеры и запускает Executors на всех выделенных контейнерах и присваивает задачи работать от имени водителя. Когда исполнители начинаются, они зарегистрируются водителем. Таким образом, водитель будет иметь полный взгляд на исполнители, которые выполняют задачу.
  8. На данный момент водитель отправит задачи исполнителям на основе размещения данных. Manuster Manager отвечает за планирование и распределение ресурсов на рабочие машины, образующие кластер. На данный момент драйвер отправляет задачи в Cluster Manager на основе размещения данных.
  9. После успешного получения контейнеров Master Application запускает контейнер, предоставляя диспетчер узлов с конфигурацией контейнера.
  10. Внутри контейнера начинается код приложения пользователя. Он предоставляет информацию (этап выполнения, статуса) для мастера приложений.
  11. Итак, на этом шаге мы фактически начнем выполнять наш код. Наш первый RDD будет создан путем чтения данных HDFS в разные разделы на разных узлах параллельно. Таким образом, каждый узел будет иметь подмножество данных.
  12. После прочтения данных у нас есть два преобразования карты, которые будут выполняться параллельно на каждом разделу.
  13. Тогда у нас есть undedbykey Преобразование, это не стандартная работа трубы, такая как карта Следовательно, это создаст дополнительную стадию. Он сочетает в себе записи с одинаковыми клавишами, затем он перемещает данные между узлами (Shuffle) и разделами, чтобы объединить одни и те же ключи записи вместе.
  14. Тогда у нас есть операция действий – запись обратно к HDFS, что заставит целое исполнение DAG.
  15. Во время выполнения приложения пользователя клиент связывается с мастером приложения для получения состояния приложения.
  16. Когда приложение завершило выполнение, и вся необходимая работа была завершена, главных главных руководителей приложений от Resource Manager и отключается, освобождая свой контейнер для других целей.

Спасибо за чтение!

Любые вопросы? Оставьте свой комментарий ниже, чтобы начать фантастические обсуждения!

Проверить мой блог или прийти, чтобы сказать привет 👋 на Twitter или подписаться на Мой телеграмма канал . Спланируйте свой лучший!

Оригинал: “https://dev.to/luminousmen/spark-anatomy-of-spark-application-i1j”