Проблема производительности с таблицей Impala с объединенными файлами паркета
Здесь у меня есть утилита python для создания нескольких файлов паркета с использованием библиотеки Pyarrow для одного набора данных, так как размер набора данных огромен за один день. Здесь файл паркета содержит 10K групп строк паркета в каждом файле разделенного паркета, здесь в итоге мы объединяем разделенные файлы в один файл, чтобы создать большой отдельный файл паркета. Здесь я создаю две таблицы Impala с объединенным файлом и несколькими разделенными файлами.
Когда данные разделенного файла загружаются в таблицу Impala и пытаются выполнить запрос, результат приходит быстрее за несколько секунд, но когда таблица Impala создается на одном объединенном файле паркета. Это даст проблему производительности по сравнению с упомянутой таблицей Impala разделенных файлов. Я не могу определить разницу между этими двумя таблицами, когда пытаюсь вычислить статистику по таблицам Impala.
Любая идея, почему эта разница в производительности между многослойными паркетными файлами Impala table и одиночными слитными файлами Impala table.
1 ответ
Исторически, хорошие характеристики паркета ассоциировались с большими паркетными файлами. Тем не менее, на самом деле, хорошая производительность является результатом не больших файлов, а больших групп строк (вплоть до размера блока HDFS).
Размещение групп строк одна за другой без их слияния существенно не изменит производительность Spark, но сделает Impala намного медленнее.
Некоторые JIRA-ы в теме:
Вместо объединения небольших файлов Parquet вы можете поместить свежие данные в отдельную таблицу, которая может быть в менее эффективном формате (текстовый файл, Avro или множество небольших файлов Parquet), а затем использовать Hive, Spark или Impala для запроса содержимое этой таблицы и объем вставьте его в рабочую таблицу. Это создаст файлы Parquet правильного размера с эффективным размером группы строк.