Статьи

Использование Spark Listeners

В последнем квартале 2019 года я разработал движок приема метаданных, использующий Spark. Каркас / библиотека имеет несколько шаблонов для обслуживания нескольких комбинаций источника и назначения. Например, для загрузки плоских файлов в облачное хранилище доступны два шаблона (один для загрузки данных в AWS S3, а другой для загрузки данных в BLOB-объект Azure).

Поскольку принципы загрузки данных изменились с Extract-Transform-Load (ETL) на Extract-Load-Transform (ETL) , такая структура очень полезна, поскольку сокращает время, необходимое для настройки заданий приема.

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

Но операция подсчета в DataFrame может быть дорогой. Есть ли альтернатива? Как оказалось, есть. Альтернативой является регистрация на события Spark. Это делается путем расширения нашего класса от th- SparkListenerкласса и переопределения либо OnStageCompletedметода, либо OnTaskEndметода (в зависимости от того, что мы хотим сделать).

Всякий раз, когда действие завершается, Spark вызывает OnStageCompletedметод на зарегистрированном слушателе. Этот метод позволяет нам отслеживать время выполнения и время ЦП, затраченное исполнителем. Когда задача завершена, Spark вызываетOnTaskEndметод на слушателе Spark. Этот метод можно использовать для определения количества прочитанных и записанных записей.


Вам также может понравиться:
Понимание модели исполнения Apache Spark с использованием SparkListeners — часть 1 .

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

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


Scala