Я читаю данные таблицы с сервера sql и сохраняю их как Dataframe в искре. Я хочу записать обратно df в паркетный файл в s3, так как таблица имеет около 30 столбцов и 204 миллиона строк, прямо сейчас с помощью Spark. 25-30 минут, чтобы записать обратно в s3 как паркетный файл, есть ли самый быстрый способ сделать то же самое?
Редактировать-1 Предложите мне, если у вас есть лучший подход к тому же самому, вместо прямой искры.
Каким может быть оптимальное количество разделов и есть ли другой способ сделать то же самое?
Трудно сказать, может это поможет составить представление: stackoverflow.com/questions/39381041/…
Также ограничивающим фактором может быть исходный SQL-сервер: если вы откроете слишком много подключений к нему, то есть разделов, у него может не хватить ресурсов для достаточно быстрого выпуска данных, и большинство ваших исполнителей могут просто бездействовать. Если вы примете во внимание транзакцию на исходном сервере sql, то соединения могут быть заблокированы блокировками транзакций. Вы можете провести серию экспериментов: сначала запустить только с одним исполнителем и указать, сколько времени потребуется, если больше 25 минут, увеличить количество исполнителей и сравнить время, если оно перестало уменьшаться, вы достигли предела БД. Также проверьте статистику БД.
Это может быть классический случай «Паркетный налог», я наткнулся на него ранее с Spark
. Чтобы преодолеть это, мне пришлось прибегнуть к записи данных на HDFS
, а затем distcp
, переписав их на S3
. Также см. Spark DirectOutputCommiter
.
Вы можете попробовать увеличить количество разделов при записи - в зависимости от ваших настроек это может быть быстрее.