Как происходит сериализация данных в Spark

курсы hadoop sql, big data обучение, bigdata курсы, hadoop spark, анализ с использование spark, bigdata курсы,аналитика больших данных курсы, курсы spark, основы spark, основы hadoop, обучение администраторов spark

В прошлый раз мы говорили про популярные инструменты для сборки распределенных Spark-приложений. Сегодня поговорим про сериализацию данных распределенных приложений, созданных на базе Big Data фреймворка Apache Spark. Читайте далее про особенности механизма сериализации данных Spark-приложений для работы с Big Data в распределенной среде.

Особенности сериализации данных в Apache Spark

Сериализация (serialization) — это перевод данных (структуры данных или объектов) в последовательность байтов (единица хранения и обработки цифровой информации). Механизм сериализации используется в распределенных приложениях при передачи данных по сети (или в пределах вычислительного кластера) [1]. Например, при совместной обработке наборов RDD (Resilient Distributed Dataset) узлы в кластере обмениваются данными между собой для предоставления друг другу информации о последних внесенных изменениях.

курсы hadoop sql, big data обучение, bigdata курсы, hadoop spark, анализ с использование spark, bigdata курсы,аналитика больших данных курсы, курсы spark, основы spark, основы hadoop, обучение администраторов spark
Процесс сериализации при обмене данными

Настройка параметров сериализации Spark-приложений: несколько практических примеров

Параметры сериализации данных Spark-приложения настраиваются при настройке базовой конфигурации среды выполнения (во время запуска Spark-сессии). Следующий код на языке Python задает базовую конфигурацию Spark-приложения и запускает Spark-сессию [2]:

from pyspark.sql import SparkSession
# В качестве примера используется порт по умолчанию (local)
conf = pyspark.SparkConf().setAppName('appName').setMaster('local')
# Развертывапние среды с указанными настройками
sc = pyspark.SparkContext(conf=conf)
# Запуск Spark-сессии
spark = SparkSession(sc)

В вышеописанном фрагменте кода не указаны параметры сериализации данных. В этом случае Spark будет использовать параметры по умолчанию, а именно базовый сериализатор (default pickle serializator). Этот сериализатор можно использовать при обмене небольшим количеством одновременно передаваемых данных (до 100 Мб). В противном случае, скорость передачи может существенно снизиться, что замедлит работу приложения. Для того, чтобы этого избежать, можно использовать специальный маршал-сериализатор (Marshal Serializer), который использует механизм маршалинга (marshaling). Маршалинг — это процесс преобразования данных, которые могут быть переданы по сети, минуя сетевые ограничители (сетевые экраны или балансировщики нагрузки) без потерь путем деления на части (пакеты) и сжатия (для уменьшения размера). За использование маршал-сериализатора отвечает специальный класс MarshalSerializer. Для установки этого сериализатора необходимо передать класс MarshalSerializer в конструктор класса SparkContext как значение поля serializer. Следующий код на языке Python отвечает за установку маршал-сериализатора в качестве основного сериализатора данных приложения [2]:

from pyspark.serializers import MarshalSerializer
sc = SparkContext('local', 'test', serializer=MarshalSerializer())

По умолчанию Spark сериализует объекты, распределяя их по пакетам. Таким образом, чем больше пакетов, тем меньше объектов в каждом из пакетов и тем выше скорость сериализации. Количество пакетов можно задать через поле batchsize в конструкторе класса SparkContext (по умолчанию создается 1024 пакета). Следующий код на языке Python отвечает за установку параметров сериализации с распределением объектов на 800 пакетов [2]:

from pyspark.serializers import MarshalSerializer
sc = SparkContext('local', 'serializationApp', serializer=MarshalSerializer(), batchSize=800)

Таким образом, благодаря поддержке механизма сериализации данных, Spark-приложения могут обмениваться данными в распределенной среде без потерь скорости передачи, а также отдельных частей данных при передаче через сеть, что весьма повышает надежность и скорость этих приложений. Все это делает фреймворк Apache Spark весьма полезным средством для Data Scientist’а и разработчика распределенных Big Data приложений. В следующей статье мы поговорим про управление распределениями в Spark.

Больше подробностей про применение Apache Spark в проектах анализа больших данных, разработки Big Data приложений и прочих прикладных областях Data Science вы узнаете на практических курсах по Spark в нашем лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве:

Записаться на курс

Смотреть раcписание

 

Источники

  1. https://javarush.ru/groups/posts/2022-serializacija-i-deserializacija-v-java
  2. https://spark.apache.org/docs/0.9.0/api/pyspark/pyspark.serializers-module.html

Добавить комментарий

Поиск по сайту