Файлы могут быть меньше блоков, в этом случае они не занимают весь размер блока в файловой системе. Прочитайте этот ответ: { ссылка }
Если вы используете Hive с динамической загрузкой раздела c, небольшие файлы часто создаются редукторами, которые пишут много разделов каждый.
insert overwrite table mytable partition(event_date)
select col1, col2, event_date
from some_table;
Например, если вы выполняете указанную выше команду и на последнем шаге всего 200 редукторов и 20 различных разделов event_date, то каждый редуктор создаст файл в каждом разделе. Это приведет к 200x20 = 4000 файлов.
Почему это происходит? Поскольку данные распределяются случайным образом между редукторами, каждый редуктор получает данные всех разделов и создает файлы в каждом разделе.
Если вы добавите distribute by partition key
insert overwrite table mytable partition(event_date)
select col1, col2, event_date
from some_table
distribute by event_date;
, то предыдущий шаг преобразования будет сгруппирован данные в соответствии с распределением по, и редукторы получат весь файл раздела и создадут один файл в каждой папке раздела.
Вы можете добавить что-то еще в дистрибутив, чтобы создать больше файлов (и запустить больше редукторов для лучшего параллелизм). Прочитайте следующие ответы: { ссылка }, { ссылка }, Укажите минимальное количество сгенерированных файлов из Hive insert