Все успешно: файл _SUCCESS в рабочих процессах Apache Spark

разработка Spark-приложений примеры курсы обучение

Когда и зачем Spark-приложение создает файл _SUCCESS, почему в нем нет данных, как его использовать, можно ли обойтись без него и как это сделать. Пример запуска PySpark-приложения в Google Colab.

Когда и зачем Spark-приложение создает файл _SUCCESS

В Apache Spark при выполнении операций записи с использованием таких методов, как saveAsTextFile(), saveAsTable() или запись в DataFrame, выходные данные сохраняются в указанный каталог контрольных точек __cpLocation. При этом создается пустой файл _SUCCESS, который представляет собой файл маркера, указывающий на успешное завершение операции записи. Этот файл обычно используется в сценариях, где есть несколько выходных файлов или разделов.

Наличие файла _SUCCESS помогает внешним системам или процессам определить, успешно ли завершилось задание, без проверки каждого отдельного файла. Файл _SUCCESS сигнализирует о том, что выходные данные в нем завершены и готовы к дальнейшей обработке. Примечательно, что файл _SUCCESS не является обязательным для корректности данных. Его цель – внешний мониторинг и координация.

Можно отключить создание файла _SUCCESS, настроив следующее свойство в конфигурации фреймворка перед записью результатов в файлы:

spark.conf.set("spark.hadoop.mapreduce.fileoutputcommitter.marksuccessfuljobs", "false")

Однако, лучше этого не делать, поскольку _SUCCESS файл важен для Spark-приложения по следующим причинам:

  • Он является индикатором завершения задания, свидетельствуя о его успешном завершении. Это особенно важно в автоматизированных рабочих процессах, где последующие шаги зависят от успешного завершения предыдущих.
  • Гарантия согласованности данных, что очень важно в конвейерах обработки данных. По сути, файл _SUCCESS действует как контрольная точка, гарантируя, что данные, считываемые последующими приложениями, являются полными, а не частичными или поврежденными.
  • Координация рабочего процесса. В сложных ETL-процессах этот файл может служить простым, но эффективным способом координации между различными этапами конвейера или даже разными системами.

Практический пример

Рассмотрим создание файла _SUCCESS на практическом примере, написав простое PySpark-приложение, которое создает датафрейм и выполняет операцию записи, сохраняя его в CSV-файл. Код приложения, написанного и запущенного в Google Colab, выглядит так. Сперва установим библиотеки и импортируем пакеты:

!pip install pyspark
!apt-get install openjdk-8-jdk-headless -qq > /dev/null
!pip install faker

#импорт модулей
from pyspark.sql import SparkSession
import pyspark
import sys
import os
import random

os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-8-openjdk-amd64"

# Импорт модуля faker
from faker import Faker
from faker.providers.address.ru_RU import Provider

Создадим директорию, куда будем сохранять CSV-файлы:

!mkdir sp-us-files

Создадим приложение, которое генерирует случайные данные о клиентах с помощью библиотеки Faker:

spark = SparkSession.builder.appName("MySparkApp").getOrCreate()

fake = Faker('ru_RU')
fake.add_provider(Provider)

data1 = []

for i in range(100):
    k= random.randint(0, 1)
    name = fake.name()
    data1.append((i, name, random.randint(18, 100), random.randint(0, 100),random.randint(0, 100)))

df = spark.createDataFrame(data1, schema=['id', 'Client', 'age', 'income', 'debt'])
df.show()
df.write.format("csv").mode("overwrite").save("/content/sp-us-files")

Запустив этот PySpark-приложение, увидим в директории для сохранения файлов не только сами файлы с данными, но и пустой файл, свидетельствующий об успешном завершении операции записи.

Пример создания файла _SUCCESS при выполнении операций записи в Spark-приложении
Пример создания файла _SUCCESS при выполнении операций записи в Spark-приложении

Узнайте больше про возможности PySpark и других интерфейсов этого распределенного движка для разработки приложений аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://sharikrishnamedium.com/why-does-spark-write-output-a-success-file-83662e43b515
  2. https://www.waitingforcode.com/apache-spark-sql/apache-spark-success-anatomy/read
  3. https://medium.com/@tagnev.vengat/understanding-the-role-of-the-success-file-in-apache-spark-workflows-7c3389eca997
Поиск по сайту