Как хранятся партиционированные таблицы в HDFS?

«Как хранятся партиционированные таблицы в HDFS?» — вопрос из категории Hadoop и HDFS, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Типичная структура каталогов:

/user/hive/warehouse/sales_db/transactions/
    ├── year=2023/
    │   ├── month=01/
    │   │   └── part-00000.parquet
    │   ├── month=02/
    │   │   └── part-00000.parquet
    │   └── month=03/
    │       └── part-00000.parquet
    └── year=2024/
        ├── month=01/
        │   └── part-00000.parquet
        └── month=02/
            └── part-00000.parquet

Практический пример создания в Hive:

CREATE EXTERNAL TABLE transactions (
    transaction_id BIGINT,
    customer_id INT,
    amount DECIMAL(10,2),
    product_code STRING
)
PARTITIONED BY (year INT, month INT)
STORED AS PARQUET
LOCATION '/user/hive/warehouse/sales_db/transactions/';

Ключевые преимущества:

  • Производительность запросов: При фильтрации по year=2023 AND month=01 система читает только файлы из директории /year=2023/month=01/, исключая сканирование всех данных.
  • Управление жизненным циклом: Устаревшие партиции (например, за старый год) можно быстро удалить как целые директории командой ALTER TABLE transactions DROP PARTITION (year=2020);.
  • Гибкость форматов: Данные внутри партиций могут храниться в различных колоночных форматах (Parquet, ORC), что оптимизирует хранение и чтение.