Databricks 端到端完整平台全景:从数据工程到 AI 工程

思维框架:先从"为什么"出发

在深入细节之前,我想先给你一个更高层级的思维方式。平台架构师看 Databricks 的视角,不是"这个工具能做什么",而是**"这个平台解决了什么根本性的架构矛盾"**。

Databricks 解决的核心矛盾是:数据工程、ML 工程、分析师三个群体,历史上用完全不同的工具栈(Spark/Kafka、Python/TensorFlow、SQL/BI),导致数据孤岛、治理混乱、重复计算。Databricks 的答案是:一个统一的 Lakehouse 计算层,底层是开放格式(Delta Lake),上层是统一的 Unity Catalog 治理,计算层是弹性 Spark/GPU 集群。理解了这个,你才能解释为什么 SoloLakehouse 的架构决策是有意义的。


第一层:数据摄入与存储(Data Engineering 的地基)

Delta Lake 是一切的核心

Databricks 所有功能的基础是 Delta Lake,一个构建在 Parquet 之上的开放表格式。它解决了传统数据湖的三个致命问题:没有 ACID 事务(写到一半数据损坏)、没有 schema 强制(垃圾数据进来)、没有时间旅行(无法审计历史)。

Delta Lake 的核心机制是事务日志(Transaction Log),每次写操作都记录一条 JSON 日志,这使得它可以支持 ACID、Time Travel(VERSION AS OF 10)、以及 Change Data Feed(增量变化追踪)。

对你的 SoloLakehouse 设计意义:你用 MinIO 作为对象存储,Apache Iceberg 或 Delta Lake 格式作为表格式,这已经是 80% 的 Databricks 存储层能力。

数据摄入:Auto Loader

Databricks 的 Auto Loader 是一个结构化流式摄入工具,它监控云存储目录(S3/ADLS/GCS),用文件通知机制(而非轮询)检测新文件,自动推断 schema,并支持 schema evolution。其底层是 Spark Structured Streaming。

# Auto Loader 的典型模式
(spark.readStream
  .format("cloudFiles")
  .option("cloudFiles.format", "json")
  .option("cloudFiles.schemaLocation", "/checkpoint/schema")
  .load("/landing/raw/")
  .writeStream
  .option("checkpointLocation", "/checkpoint/bronze/")
  .toTable("bronze.orders_raw"))

对你的 SoloLakehouse:可以用 Spark Structured Streaming + MinIO 事件通知(MinIO 支持 S3 Event Notifications)来复现这个功能。

Medallion Architecture(Bronze-Silver-Gold)

这是 Databricks 官方推荐的数据组织架构,也是你 SoloLakehouse 的骨架。Bronze 层是原始数据,保留所有字段和历史;Silver 层是清洗、去重、标准化后的数据,有 schema 约束;Gold 层是面向业务的聚合数据,直接支持 BI 和 ML 特征。


第二层:数据工程 Pipeline(ETL/ELT 的全貌)

Delta Live Tables(DLT)

DLT 是 Databricks 的声明式 ETL 框架,是数据工程最核心的生产力工具。你用 Python 或 SQL 声明表的定义,Databricks 自动处理依赖关系、错误处理、数据质量检查、增量更新。

import dlt

@dlt.table(comment="Bronze layer: raw taxi rides")
def bronze_taxi():
    return spark.readStream.format("cloudFiles").load("/landing/taxi/")

@dlt.table
@dlt.expect_or_drop("valid_distance", "trip_distance > 0")  # 数据质量约束
def silver_taxi():
    return (dlt.read_stream("bronze_taxi")
              .withColumn("duration_min", 
                          (col("dropoff_time") - col("pickup_time")) / 60))

@dlt.expect_or_drop 这个装饰器背后是一个完整的数据质量监控系统,每条规则的通过率都会被记录并可视化。这对你的法兰克福机场 taxi time 项目来说,是天然的框架——从 ADS-B 原始数据进 Bronze,清洗后进 Silver,特征工程结果进 Gold。

对 SoloLakehouse:DLT 是 Databricks 专有的,但你可以用 Apache Spark + Great Expectations(数据质量)+ Airflow/Prefect(编排) 的组合来复现这个能力。

Workflows(任务编排)

Databricks Workflows 是平台内置的任务编排器,支持 DAG 定义、条件分支、参数传递、重试策略,并可以把 Notebook、Python 脚本、DLT pipeline、dbt 任务编排在一起。

对 SoloLakehouse:直接对应的是 Airflow 或 Prefect,你的 Docker Compose 架构中已经有了这个位置。


第三层:Unity Catalog(治理层,平台架构师最关注的)

Unity Catalog 是 Databricks 在 2022 年发布的统一数据治理层,也是区分"初级工程师"和"平台架构师"思维的关键概念。它解决的问题是:当你有多个 Databricks workspace,多个团队,数百个数据集,如何统一管理访问权限、数据血缘、数据发现?

Unity Catalog 的三层命名空间是 catalog.schema.table,类似 prod.finance.transactions。它在这个基础上提供:细粒度权限控制(列级别的 Row/Column 权限);数据血缘追踪(自动捕获哪张表读了哪张表);数据发现(搜索所有表的元数据);以及外部位置注册(把 MinIO/S3 的路径注册为受控资源)。

-- Unity Catalog 的权限控制示例
GRANT SELECT ON TABLE prod.silver.taxi_rides TO `data-analyst@company.com`;
GRANT MODIFY ON SCHEMA prod.ml_features TO `ml-engineer-group`;

对你的 SoloLakehouse 和 FinLakehouse:这是你最应该深度复现的层,因为这直接对应 EU AI Act 的数据治理要求。你可以用 Apache Atlas 或 OpenMetadata 作为元数据目录,用 Apache Ranger 或 Open Policy Agent(OPA) 做细粒度权限控制,用 Trino 的 Access Control 作为查询层的门卫。


第四层:ML Engineering(MLflow + Feature Store + Model Training)

MLflow:实验追踪与模型注册

MLflow 是 Databricks 开源并深度集成的 ML 生命周期管理工具,你的 SoloLakehouse 已经有了它,这非常好。Databricks 托管版的 MLflow 在开源版基础上增加了自动追踪(Auto Logging,对 sklearn/PyTorch/XGBoost 等框架自动记录参数和指标)、模型批准工作流(Staging → Production 的审核流程)以及与 Unity Catalog 的集成(模型作为一等公民被纳入治理)。

对你的 SmartPouch 项目(CBAM + CNN + Bi-LSTM):每次训练运行都应该是一个 MLflow experiment run,记录架构超参数(CBAM 通道数、LSTM 隐藏层维度)、训练指标(每个 epoch 的 F1-score per class)、以及模型 artifact(包含 ONNX 格式的导出版本)。这样你才能清晰地向面试官展示一个"可追溯、可重现"的 ML 工程实践。

Databricks Feature Store(现在叫 Feature Engineering in Unity Catalog)

Feature Store 是解决"特征一致性"问题的架构组件,这个问题比大多数 ML 工程师想象的更严重。训练时用的特征和推理时用的特征如果来自不同的计算逻辑,就会产生 training-serving skew,这是生产 ML 系统最常见的静默失败原因。

Databricks Feature Store 的解决方案是:你用 Python 定义一个特征函数,它会被注册到中央目录,训练时通过 FeatureStoreClient.create_training_set() 读取,推理时用相同的特征逻辑自动关联。

from databricks.feature_engineering import FeatureEngineeringClient

fe = FeatureEngineeringClient()

# 定义特征表(一次定义,多处复用)
fe.create_table(
    name="prod.features.taxi_trip_features",
    primary_keys=["trip_id"],
    df=silver_taxi_with_features,
    description="Features for taxi time prediction at FRA airport"
)

# 训练时:自动关联特征,记录血缘
training_set = fe.create_training_set(
    df=labels_df,
    feature_lookups=[
        FeatureLookup(table_name="prod.features.taxi_trip_features",
                      lookup_key="trip_id",
                      feature_names=["wind_speed", "gate_congestion"])
    ],
    label="actual_taxi_time"
)

对你的 FinLakehouse:Feature Store 是你可以打的一张牌,因为在金融和医疗场景中,特征的可审计性("这个模型用了哪些特征,这些特征是如何计算的?")是合规要求,不是可选项。

对 SoloLakehouse:可以用 Feast(开源 Feature Store)来复现,或者自己用 Delta Lake 表 + MLflow 的 dataset tracking 来轻量实现。

分布式模型训练

Databricks 提供了两种分布式训练方式。第一种是 Horovod(现在推荐 TorchDistributor),用于数据并行训练,把 PyTorch 训练逻辑分发到多个 GPU 节点。第二种是 Hyperopt + SparkTrials,用 Spark 并行化超参数搜索。

from pyspark.ml.torch.distributor import TorchDistributor

def train_fn(learning_rate):
    # 你的 CBAM+CNN+BiLSTM 训练逻辑
    model = SmartPouchModel(...)
    # ... 训练代码 ...
    return model

distributor = TorchDistributor(num_processes=4, local_mode=False)
distributor.run(train_fn, learning_rate=0.001)

对你的 SmartPouch CBAM+CNN+BiLSTM:如果你有多块 GPU(或 Colab Pro+),可以在 SoloLakehouse 里用 Ray Train 来复现这个能力,这也是目前最热门的分布式 ML 训练框架之一。


第五层:AI Engineering(LLM 时代的新层)

Mosaic AI(前身是 Databricks 的 LLM 层)

Databricks 收购 MosaicML 后,将 LLM 相关能力统一为 Mosaic AI,包含以下核心组件。

**Model Serving(MLflow Models + GPU Serving)**是一个无服务器推理端点,可以部署任何 MLflow 注册的模型(包括 HuggingFace 模型),自动处理扩缩容、蓝绿部署、A/B 测试。

Mosaic AI Agent Framework 是 Databricks 进入 Agentic AI 的核心产品,提供了构建 RAG pipeline 和 multi-agent 系统的框架,与 Unity Catalog 深度集成(agent 调用的所有工具、读取的所有数据都被记录血缘)。

Vector Search 是一个托管的向量数据库,与 Delta Lake 表同步,当你更新 Delta 表时,向量索引自动更新。这是构建企业 RAG 系统的关键组件。

from databricks.vector_search.client import VectorSearchClient

vsc = VectorSearchClient()
# 创建一个与 Delta 表同步的向量索引
vsc.create_delta_sync_index(
    endpoint_name="my-vector-endpoint",
    index_name="prod.ml.document_embeddings",
    source_table_name="prod.silver.documents",
    pipeline_type="TRIGGERED",
    primary_key="doc_id",
    embedding_source_column="content",
    embedding_model_endpoint_name="databricks-bge-large-en"
)

对你的 FinLakehouse:这是最重要的差异化点。金融/医疗场景需要"可解释的 RAG"——不仅要给出答案,还要说明"这个答案基于哪份合规文件的哪个版本"。Databricks 的 Mosaic AI + Unity Catalog 血缘追踪正好解决这个问题,你的 FinLakehouse 应该把这个设计成核心 feature。

对 SoloLakehouse:可以用 Qdrant 或 Weaviate(开源向量数据库)+ LangChain/LlamaIndex + MLflow Tracing(开源版)来构建对应的 AI 工程层。


第六层:可观测性与运维(平台成熟度的标志)

Databricks 提供了完整的可观测性栈,包含 Cluster Event Logs(集群生命周期事件)、Spark UI 集成(SQL 查询的物理执行计划可视化)、Ganglia Metrics(资源利用率)以及 System Tables(平台级别的审计日志,记录所有查询、谁查了什么表、消耗了多少 DBU)。

对 SoloLakehouse:你的 Docker Compose 里应该有 Prometheus + Grafana(基础设施指标)+ Spark History Server(Spark 作业可观测性)+ MLflow 的 tracking(ML 实验可观测性)。这三层组合起来才是一个完整的平台可观测性栈。


SoloLakehouse 对应架构映射表

现在把上面所有内容整合成一张清晰的对应关系。每个 Databricks 能力,你都有一个可以自托管的开源替代方案。

Databricks 层 Databricks 组件 SoloLakehouse 替代方案
存储格式 Delta Lake Apache Iceberg(更开放)或 Delta Lake 开源版
对象存储 ADLS/S3 MinIO
查询引擎 Databricks SQL Warehouse Trino(你已有)
数据摄入 Auto Loader Spark Structured Streaming + MinIO Events
ETL 声明式 Delta Live Tables Spark + Great Expectations + Airflow
编排 Databricks Workflows Apache Airflow 或 Prefect
数据治理 Unity Catalog OpenMetadata + Apache Ranger/OPA
实验追踪 Managed MLflow MLflow(你已有)
Feature Store Databricks Feature Engineering Feast 或 自建 Delta Table
分布式训练 TorchDistributor / Horovod Ray Train
模型服务 Model Serving MLflow + BentoML 或 Seldon
向量数据库 Vector Search Qdrant 或 Weaviate
LLM/Agent Mosaic AI Agent Framework LangChain + MLflow Tracing
可观测性 System Tables + Spark UI Prometheus + Grafana + Spark History Server

对你职业目标的直接建议

这份知识对拿 100k+ offer 的贡献方式是这样的:懂 Databricks 的人很多,但能说清楚"为什么 Databricks 的 Unity Catalog 设计成三层命名空间,而不是两层"(答案:为了支持多云、多团队的联邦治理)的人很少。更稀缺的是:能设计出一个可以 self-host 的等价系统,并清楚地陈述每个架构决策的 trade-off 的人。

你的 SoloLakehouse 项目,如果能做到以下几点,就是一个真正能打动平台架构师面试官的作品:首先,要有架构决策文档(ADR),解释为什么选 Iceberg 而不是 Delta Lake,为什么选 Trino 而不是 Spark SQL;其次,要有从数据摄入到模型服务的完整 demo pipeline,哪怕是用你的法兰克福机场 taxi time 数据;最后,要有可观测性层,能实时看到 pipeline 的健康状态。

我建议你下一步把 SoloLakehouse 的**治理层(OpenMetadata + OPA)**作为优先级最高的模块来实现,因为这是最能体现"平台思维"而非"工程师思维"的差异点,也是 FinLakehouse 的合规故事的技术基础。