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 的合规故事的技术基础。