ледник 1.1.0 установите write.distribution-mode на none, но это не имеет эффекта

Вопрос или проблема

версия iceberg: 1.1.0
версия spark: 3.3.0

Я создал новую таблицу, похожую на приведенную ниже.

CREATE TABLE prod.db.sample (
...
)
USING iceberg
PARTITIONED BY (day)
LOCATION '...'
TBLPROPERTIES (
  'write.format.default' = 'orc',
  'history.expire.max-snapshot-age-ms' = '432000000 ',
  'history.expire.min-snapshots-to-keep' = '24')

Затем я заметил, что при записи данных в эту таблицу в задании spark был добавлен дополнительный шаг сортировки.
Это увеличило время, необходимое для записи данных.
Поэтому я попытался установить write.distribution-mode в значение none, как показано ниже.

ALTER TABLE prod.db.sample SET TBLPROPERTIES (
    'write.distribution-mode'='none'
);

Кроме того, из последнего метаданных файла на hdfs видно, что эта настройка была успешной.

введите описание изображения здесь

Но когда я повторно запустил задание, все равно был дополнительный шаг сортировки.

Как я могу установить write.distribution-mode в значение none в этой ситуации, не изменяя версию spark&iceberg?

Ответ или решение

Проблема с установкой параметра write.distribution-mode в значение none в версии Iceberg 1.1.0 при использовании Apache Spark 3.3.0 может быть связана с несколькими аспектами. Рассмотрим все ключевые моменты и возможные решения.

Описание проблемы

Вы создали новую таблицу Iceberg с параметрами, из которых важно отметить, что вы ограничили запись форматом orc, а также установили определенные свойства таблицы. После этого вы заметили, что при записи данных в таблицу появляется дополнительный шаг сортировки, что увеличивает время обработки данных. Для устранения этой проблемы вы попытались установить параметр write.distribution-mode в значение none, чтобы отключить распределение данных.

Несмотря на успешное изменение метаданных таблицы, при повторном запуске задания, дополнительный шаг сортировки по-прежнему сохранялся.

Возможные причины проблемы

  1. Кэширование метаданных: Apache Spark может кэшировать метаданные таблицы. При изменении свойств таблицы через ALTER TABLE может потребоваться сброс этого кэша для применения новых настроек. Для этого вы можете выполнить команду:

    REFRESH TABLE prod.db.sample;
  2. Конфигурация Spark: Иногда настройки, применяемые на уровне таблицы, могут быть переопределены глобальными настройками Spark. Убедитесь, что у вас в конфигурации Spark не установлены свойства, которые конфликтуют с настройками Iceberg.

  3. Код самой задачи: Важно изучить код вашего Spark задания. Если в нем явно указаны дополнительные шаги сортировки или настройки, которые игнорируют распределение данных, это может приводить к нежелательным результатам. Проверьте, не указаны ли параметры-оптимизаторы, которые заставляют Spark изменять логику распределения.

Рекомендации по решению проблемы

  1. Сброс кэша метаданных:
    Убедитесь, что вы сбрасываете кэш метаданных после изменения свойств таблицы. Как было сказано ранее, используйте команду REFRESH TABLE.

  2. Проверка глобальных настроек:
    Проверьте библиотеку конфигурации Spark на предмет параметров, которые могут конфликтовать с определениями Iceberg. Особенно обратите внимание на параметры, связанные с оптимизацией выполнения задач.

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

  4. Обновление Iceberg:
    Хотя вы хотите избежать обновления версий, помните, что Iceberg имеет новые релизы, которые могут исправлять баги и улучшать производительность. Рассмотрите возможность проверки на наличие доступных обновлений, если проблема сохраняется.

Заключение

Проблема с тем, что параметр write.distribution-mode не функционирует должным образом, может быть вызвана кэшированием метаданных, конфликтом с глобальными настройками Spark и особенностями кода вашего задания. Следуя предложенным рекомендациями, вы сможете проанализировать и устранить возникшую проблему. Если трудности сохраняются, возможно, стоит провести более глубокий аудит вашей среды или рассмотреть обращение к сообществу разработчиков Iceberg для получения дополнительных советов и поддержки.

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

Капча загружается...