DATA_ENGINEERETTE Telegram 407
Проблема мелких файлов на практике

Я игралась с iceberg-таблицами, и у меня странно долго работали запросы. Исходные данные: 2,8 млрд строк и 111гб. Я поресерчила, что запросы сильно тормозят на этапе чтения. Пошла смотреть, как лежат данные, и увидела в каждой партиции по 100 файлов размером 1кб 🥺

hdfs dfs -count /my_table
# 1825 182400


1825 партиций, 182400 файлов - представляете, сколько накладных расходов открыть каждый файлик?

В чем особенность айсберга - вы не можете просто взять и переложить/пересохранить данные. Потому что в мете лежат ссылочки на файлики с данными. У вас просто все поломается 😒 Для компакта есть процедура рерайта:

spark.sql("""CALL system.rewrite_data_files(
table => 'my_db.my_table',
options => map('target-file-size-bytes', '134217728') --128 мб
)""")


Проверено: на драйвере должно быть достаточно памяти, чтобы выполнить эту операцию. Иначе файлики создадутся, но мета не обновится. Это значит, что ничего не поменялось, вы просто теперь храните в 2 раза больше данных, которые придется удалять ручками

После процедуры стало 6283 актуальных файликов - теперь все лежит как надо 👍

На картинке - запрос spark.table().cache().count(), который до компакта проходился по 5730 партициям, а теперь всего 856

Что получилось:
- файлы уменьшились в 30 раз
- таски в 6,7 раз
- время в 1,8 раз
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥38👍11



tgoop.com/data_engineerette/407
Create:
Last Update:

Проблема мелких файлов на практике

Я игралась с iceberg-таблицами, и у меня странно долго работали запросы. Исходные данные: 2,8 млрд строк и 111гб. Я поресерчила, что запросы сильно тормозят на этапе чтения. Пошла смотреть, как лежат данные, и увидела в каждой партиции по 100 файлов размером 1кб 🥺

hdfs dfs -count /my_table
# 1825 182400


1825 партиций, 182400 файлов - представляете, сколько накладных расходов открыть каждый файлик?

В чем особенность айсберга - вы не можете просто взять и переложить/пересохранить данные. Потому что в мете лежат ссылочки на файлики с данными. У вас просто все поломается 😒 Для компакта есть процедура рерайта:

spark.sql("""CALL system.rewrite_data_files(
table => 'my_db.my_table',
options => map('target-file-size-bytes', '134217728') --128 мб
)""")


Проверено: на драйвере должно быть достаточно памяти, чтобы выполнить эту операцию. Иначе файлики создадутся, но мета не обновится. Это значит, что ничего не поменялось, вы просто теперь храните в 2 раза больше данных, которые придется удалять ручками

После процедуры стало 6283 актуальных файликов - теперь все лежит как надо 👍

На картинке - запрос spark.table().cache().count(), который до компакта проходился по 5730 партициям, а теперь всего 856

Что получилось:
- файлы уменьшились в 30 раз
- таски в 6,7 раз
- время в 1,8 раз

BY дата инженеретта




Share with your friend now:
tgoop.com/data_engineerette/407

View MORE
Open in Telegram


Telegram News

Date: |

Public channels are public to the internet, regardless of whether or not they are subscribed. A public channel is displayed in search results and has a short address (link). Among the requests, the Brazilian electoral Court wanted to know if they could obtain data on the origins of malicious content posted on the platform. According to the TSE, this would enable the authorities to track false content and identify the user responsible for publishing it in the first place. Telegram channels fall into two types: Telegram users themselves will be able to flag and report potentially false content.
from us


Telegram дата инженеретта
FROM American