Какие форматы хранения данных в Hadoop вы знаете кроме Parquet?
Что проверяют
Понимаете ли вы разницу между строковым и колоночным хранением и как формат влияет на скорость ваших запросов в Hive, Impala или Spark SQL. Следом часто спрашивают, чем ORC отличается от Parquet и куда в эту картину вписываются Iceberg и Delta Lake.
Как отвечать
Разложите форматы на группы:
- ORC: колоночный, как Parquet. Данные лежат страйпами, в файле хранится статистика min/max по колонкам и по желанию bloom-фильтры, поэтому движок пропускает ненужные блоки. Тесно связан с Hive: полноценные транзакционные таблицы Hive работают только на ORC;
- Avro: строковый бинарный формат, схема хранится в заголовке файла. Удобен для записи и приёма потоков, например выгрузок из Kafka, хорошо переносит эволюцию схемы. На аналитических запросах по нескольким колонкам медленнее колоночных форматов, потому что читает строку целиком;
- SequenceFile: бинарные пары ключ-значение, родной формат Hadoop. Встречается в старых пайплайнах и как способ склеить множество мелких файлов;
- RCFile: предшественник ORC, в новых проектах не используется;
- CSV и JSON: читаются чем угодно, но без типов, без статистики и с разбором текста при каждом запросе.
Отдельно скажите про сжатие. Кодеки snappy и zstd внутри Avro, ORC и Parquet не мешают делить файл на части для параллельной обработки, а текстовый файл, сжатый целиком в gzip, не делится: его прочитает одна задача.
Сильный завершающий штрих: Iceberg, Delta Lake и Hudi это не форматы файлов, а табличные форматы поверх Parquet, ORC или Avro. Они добавляют транзакции, версии данных и эволюцию схемы на уровне таблицы. Практический вывод для аналитика: сырые данные часто приходят в Avro или JSON, а витрины для запросов держат в ORC или Parquet с партициями по дате.
Где спотыкаются
Называют CSV и JSON наравне с ORC, не упоминая, что для больших таблиц это самый медленный и дорогой вариант.
Говорят, что ORC «лучше» Parquet или наоборот. Корректнее сказать, что оба колоночные, а выбор обычно диктует движок и то, что уже принято в хранилище.
Путают Iceberg с форматом файла и не могут объяснить, где физически лежат данные такой таблицы.