Обработка сжатых файлов в искре: может ли повторное разделение улучшить или снизить производительность

Я запускаю свою искровую оболочку с помощью команды start_pyspark_shell и задаю параметры cli как - 4 исполнителя, 2 ядра на исполнителя и 4 ГБ памяти для рабочих узлов и 4 ГБ для мастера

Хранение: HDFS

Входной файл: сжатый файл.csv.gz размером 221,3 МБ (2 блока в HDFS) и
версия Spart: 2.4.0.

Задача проста - подсчитать количество записей в файле. Единственная загвоздка в том, что это сжатый файл. Я загрузил файл, используя

df = spark.read.format("com.databricks.spark.csv").load(hdfs_path)

Когда я сделал df.count(), Я вижу, что существует задача с одним исполнителем и, вероятно, ожидается (?), Поскольку я работаю со сжатым файлом, который не может быть разделен и будет обрабатываться с одним разделом?

Проверил количество разделов - df.rdd.getNumPartitions() и он вернул 1, вероятно, как и ожидалось.

Время обработки составляло около 15-17 секунд при многократном запуске одной и той же команды.

Я думаю, мы можем сделать вывод, что параллелизма для вышеупомянутой обработки было не так много?

Я сейчас пробовал делать df.repartition(10).count()с ожиданием того, что данные будут перераспределены по 10 новым разделам и, возможно, по рабочим узлам. Я мог видеть, что количество ЗАДАЧ теперь соответствует количеству разделов, которые я указываю. Я надеялся на улучшение производительности с точки зрения времени выполнения. Теперь оказалось 25-26 секунд.

Когда я использовал .repartition(20), он работал больше 4 минут и мне пришлось его убить.

Производительность снижена. Я сделал что-то не так или пропустил какой-либо шаг для повышения производительности?

Примечание: я видел несколько хороших существующих сообщений по этому поводу, но до сих пор не получил ясности. Следовательно, отправляем новый запрос.

0 ответов

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

Похоже, это причина увеличения времени обработки.

Вывод: а) Если задача / действие простое, повторно разбивать данные сжатого файла не стоит. б) Если у нас много обработки, то повторное разделение будет стоить только один раз, но несколько операций обработки могут получить выгоду, и это стоит дополнительного времени обработки.

Другие вопросы по тегам