Azure Data Lake Storage Gen2 (ADLS) is Microsoft's object storage built for analytics workloads. It is Azure Blob Storage with a hierarchical namespace added, which gives a data lake real directory semantics and fine-grained permissions on top of cheap, scalable object storage. It's the storage foundation for Azure Synapse, Databricks on Azure, and Fabric.

What the hierarchical namespace changes

Plain blob storage is a flat key-value store - "folders" are just prefixes in object names, and renaming or deleting a "directory" means touching every object under it. ADLS Gen2's hierarchical namespace makes directories first-class objects, so a directory rename or delete is a single atomic metadata operation instead of an N-object loop. That matters for analytic engines that rename output directories on commit (Spark, Hive), where flat-blob rename cost was a real bottleneck.

Access and security

ADLS supports both Azure RBAC (coarse, at the container/account level) and POSIX-style ACLs (read/write/execute on directories and files), so you can grant a team access to one folder tree without exposing the rest of the lake. Access is typically brokered through Azure Active Directory identities and managed identities rather than shared keys, and data is encrypted at rest by default.

How engines connect

Engines address ADLS via the abfss:// driver (ABFS = Azure Blob File System), authenticating with a service principal, managed identity, or SAS token.

# Spark reading Parquet from ADLS Gen2
df = spark.read.parquet(
  "abfss://lake@account.dfs.core.windows.net/events/"
)

Organizing a lake on ADLS

  • Zones - separate containers or top-level folders for raw / cleansed / curated (bronze/silver/gold) so lifecycle and permissions differ per zone.
  • Lifecycle management - tier cold data to cool/archive automatically to cut cost; analytics data is write-once, read-many, so tiering pays off.
  • Table formats - store curated data as Delta or Iceberg on ADLS to get transactions and time travel over the raw files.

Where it fits

ADLS is the natural lake storage when your stack is on Azure - it integrates with Synapse, Fabric, Databricks, and Azure AD identity. It is the Azure counterpart to Amazon S3 and Google Cloud Storage; the analytic patterns (zoned lake, columnar files, table formats, lifecycle tiering) are identical across the three, and the choice follows your cloud. Its one meaningful differentiator versus generic blob storage is the hierarchical namespace, which you should enable for any account used as a data lake.

Category note

ADLS is object storage, not a file format - it's the place your Parquet/Delta/Iceberg data lives. It's grouped here as part of the "where bytes are stored" layer.