亚马逊AWS官方博客

新一代SageMaker+Databricks统一目录:机器学习与数据分析工作流打通方案

前言

在数据驱动决策的时代,企业正面临着两大核心挑战:如何打破数据孤岛实现跨平台协作,以及如何在复杂技术栈中保持治理一致性。这些挑战直接影响着企业从数据中获取价值的能力和速度。

Databricks作为领先的数据分析和机器学习平台,已经帮助众多企业实现了大规模数据处理和分析。与此同时,许多企业在AWS云上构建了完整的业务系统和机器学习工作流。如何让这两个强大的生态系统无缝协作,成为了释放数据价值的关键所在。

本文提出的解决方案:通过SageMaker Unified Studio与Databricks Unity Catalog的深度集成,企业既能充分利用Databricks强大的数据分析能力,又能与AWS上现有的业务系统深度融合,真正实现数据价值的最大化。这不是简单的技术对接,而是一种全新的数据协作范式。

本文将以真实业务场景为锚点,深度解析两大平台的协同价值:

  1. 技术融合性 – 零摩擦的数据访问

通过SageMaker Unified Studio中的托管JupyterLab环境,借助EMR Serverless的强大计算能力,直接访问Databricks Unity Catalog中的受治理数据。这种架构彻底消除了传统ETL的冗余,让数据科学家能够实时访问最新的业务数据,显著提升模型开发效率。

  1. 治理穿透力 – 企业级安全合规保障

在新一代SageMaker工作流中无缝继承Databricks预设的数据血缘追踪、细粒度访问控制和完整审计策略。这意味着企业无需重复构建治理体系,即可确保跨平台的数据安全性和合规性,大幅降低治理成本和风险。

实战导向的技术指南

我们不仅会深入剖析架构设计的核心要点,更重要的是分享在实际项目落地中积累的宝贵经验和避坑指南:

关键技术挑战与解决方案

  • 跨平台安全访问:如何在保证数据安全的前提下实现平台间的身份认证和授权
  • 混合云网络配置:企业混合云环境下的网络连通性最佳实践
  • 性能优化策略:大规模数据查询的性能调优技巧
  • 生产级部署考量:从POC到生产环境的平滑过渡路径

通过本文,您将获得一份经过实践验证的完整集成方案,帮助您的团队快速构建一个安全、高效、可扩展的跨平台数据科学工作流。

架构解析

此架构旨在整合 AWS SageMaker Notebook和Databricks Unity Catalog 的功能,以实现高效的数据处理、机器学习模型开发以及跨平台的数据共享和协作。

亚马逊云科技 Side

SageMaker Unified Studio: 作为AWS的核心组件之一,Sagemaker Unified Studio为数据科学家和开发者提供了一个集成的开发环境,用于构建、训练和部署机器学习模型。它支持多种编程语言和框架,并且可以无缝地与AWS其他服务进行集成。

EMR Studio Notebook: EMR Studio Notebook是Amazon EMR的一部分,它允许用户在云端运行交互式数据分析任务。通过EMR Studio Notebook,用户可以利用Apache Spark等大数据处理框架来处理大规模数据集。

Databricks Side

Open API: Databricks提供了丰富的API接口,使得外部系统能够与其进行通信和数据交换。这些API包括但不限于REST API,它们允许用户执行各种操作,如创建和管理集群、运行作业、查询数据等。

Unity Catalog: Databricks的 Unity Catalog是一个元数据管理解决方案,它帮助组织管理和治理其数据资产。通过 Unity Catalog,用户可以定义和应用细粒度的数据访问控制策略,确保数据的安全性和合规性。

Delta Lake: Delta Lake是Databricks推出的一个开源存储层,它提供了ACID事务、统一的数据治理和高性能的数据处理能力。Delta Lake可以存储结构化和半结构化的数据,并支持实时分析和批处理等多种工作负载。

Databricks 数据共享方式

Databricks提供了多种数据共享的方式,下面是一个列表,我们可以根据自己的需求来进行选择.

A B C D E
1 Option Cost Limitations Simplicity When to use?
2 Delta Sharing $ 🔴 🟠 只读模式:适用于小数据且由工作区管理员进行设置
3 Databricks Connect $$ 🟢 🟢 任何需要使用 Databricks 计算能力的情况
4 Databricks SQL client $$ 🟢 🟢 类似于 Databricks Connect,但仅适用于 SQL 用户。
5 Unity Catalog Open APIs $ 🟠 🟢 目前适用于只读用例,具有简单的设置,并且可以使用您选择的引擎。

本案例中我们使用 Unity Catalog Open APIs 来实现 Databricks 和 SageMaker Unified Studio的数据共享, 下面我们将逐步带大家完成所有的配置.

Databricks 侧配置

  1. 首先我们需要开启Databricks的Catalog External Access, 配置步骤如下.

Enable External data access

  1. 配置Databricks用户可以在外部访问Catalog的权限,使用以下示例语句.

GRANT EXTERNAL USE SCHEMA ON SCHEMA <catalog_name>.<schema_name> TO `xxxxx@xx.com`

  1. 配置对用Databricks 用户Personal Access Token,点击用户Settings 选项

一定要记录下来生成好的access token,它只能被记录一次,至此我们在 Databricks上配置就可以了.

Sagemaker Unified Studio 配置

在 Amazon SageMaker Unified Studio 中,域是用于连接您的资产、用户及其项目的组织实体。域代表组织内业务线 (LOB) 或业务领域的独特边界,这些业务领域可以管理自己的数据,包括自己的数据资产、自己的数据或业务术语定义,并可能有自己的治理标准。管理员创建域并与用户或组共享 URL。首次开始使用 Amazon SageMaker Unified Studio 时,首先要创建域以及域中存在的所有核心组件。

设置 Amazon SageMaker 统一工作室域

  1. 要开始创建域,请在 Amazon SageMaker 控制台上点击 创建统一工作室域 按钮。
  1. 选择快速设置功能,在 快速设置功能的设置页面上,修改域名。在虚拟私有云(VPC) 中请选择有私有子网存在的VPC,选择三个不同AZ的私有子网,私有子网必须配置 Nat Gateway,否则会影响后续功能使用。其他保持默认值。
  1. Amazon SageMaker Unified Studio 域默认支持 IAM 用户身份验证。在此输入IAM Identity Center中用户电子邮箱地址。
  1. 创建成功后通过url或者“打开统一工作室”按钮登陆Amazon SageMaker Unified Studio。点击后选择 SSO 方式登陆。输入在IAM 身份中心设置的用户名和密码。

创建项目

  1. 登陆后点击创建项目,在 Amazon SageMaker Unified Studio 中,通过项目汇集人员、数据和工具,使数据用户群体能够协作解决特定的业务用例。
  1. 修改项目名称,选择合适的项目配置文件。项目配置文件是用于创建项目的配置蓝图的集合。蓝图定义了项目成员在处理 Amazon SageMaker 目录中的数据时可以使用哪些 AWS 工具和服务。这里选择的是所有功能,选择后点击继续
  1. 可以按需更改日志保留期等配置,由于在此场景下已经禁用了glue catalog,可以忽略lakehouse database中的glue database name更改,这里保持默认设置。点击继续。跳转到下一页后再选择 创建项目。创建成功后,您将被重定向到项目主页。
  1. 下一步我们来添加EMR Serverless 计算资源。进入项目后,在左侧概览下选择compute,点击Data processing,点击 add compute。
  1. 您可以选择连接到现有计算资源。如果您为创建资源,可以选择Create new compute resources,点击 next
  1. 关于计算资源种类,我们选择EMR Serverless , 点击 next,修改compute name,其他保持默认值,点击 add compute

项目角色权限配置

最后我们还需要为项目角色添加权限,使其可以访问Databricks存储在S3的数据。

  1. 我们先在左侧概览下选择Project overview,在Project details找到Porject role arn,从 datazone_user字段开始复制
  1. 进入IAM服务控台页面,点击左侧角色,搜索复制的project role,点击查询结果查看角色详情。
  1. 为项目角色创建内联策略。输入以下策略,将amzn-s3-demo-bucket替换成您的存储桶名称
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "S3AdditionalObjectPermissions",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:GetObject*",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::<amzn-s3-demo-bucket>",
                "arn:aws:s3:::<amzn-s3-demo-bucket>/*"
            ]
        }
    ]
}

至此我们在Sagemaker Unified Studio上的开发环境已经Ready了.

EMR Serverless 配置

下面我们需要修改 EMR Serverless Application 的配置, 为了保证后面我们在 Sagemaker Unified Studio 中的配置一致,我们需要修改Application的  Application configuration 和 Additional configurations. 修改的内容如下

  1. Application configuration
{
    "runtimeConfiguration": [
        {
            "classification": "spark-defaults",
            "properties": {
                "spark.jars": "/usr/share/aws/delta/lib/delta-spark.jar,/usr/share/aws/delta/lib/delta-storage.jar",
                "spark.jars.packages": "io.unitycatalog:unitycatalog-spark_2.12:0.2.0",
                "spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension",
                "spark.sql.defaultCatalog": "<databricks uc>", # 此处修改为上面databricks中grant的UC
                "spark.sql.catalog.spark_catalog": "io.unitycatalog.spark.UCSingleCatalog",
                "spark.sql.catalog.<databricks uc>": "io.unitycatalog.spark.UCSingleCatalog",
                "spark.sql.catalog.<databricks uc>.uri": "https://<databricks workspace url>/api/2.1/unity-catalog"
            }
        }
    ]
}
  1. Disable Glue Catalog

Sagemaker Unified Studio JupyterLab配置

下面我们开始配置Sagemaker Unified Studio → JupyterLab, 如下图所示

在我们创建Sagemaker Unified Studio的时候,会默认选上Glue Catalog作为Catalog的默认选项,如何我们想在Notebook内使用Databricks Unified Catalog, 我们需要覆盖原有Glue Catalog配置信息,注意下面的catalog信息.

%%configure -n <EMR serverless application> -f 
{ 
    "conf": { 
        "spark.jars": "/usr/share/aws/delta/lib/delta-spark.jar,/usr/share/aws/delta/lib/delta-storage.jar",
        "spark.jars.packages": "io.unitycatalog:unitycatalog-spark_2.12:0.2.0",
        "spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension",
        "spark.sql.defaultCatalog": "<databricks uc>",
        "spark.sql.catalog.spark_catalog": "io.unitycatalog.spark.UCSingleCatalog",
        "spark.sql.catalog.<databricks uc>": "io.unitycatalog.spark.UCSingleCatalog",
        "spark.sql.catalog.<databricks uc>.uri": "https://<databricks workspace url>/api/2.1/unity-catalog",
        "spark.sql.catalog.<databricks uc>.token": "<databricks uc token>"
     }
}

创建Spark session, 下面步骤中一定要注意Compute的信息

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("EMR Serverless and Databricks Unity Catalog Demo") \
    .getOrCreate()

验证当前的 Spark Context Configuration

# Verify the configuration
essential_configs = [
    'spark.jars.packages', 'spark.executor.instances', 'spark.cores',
    'spark.driver.cores', 'spark.executor.cores', 'spark.memory',
    'spark.driver.memory', 'spark.executor.memory', 'spark.sql.catalog',
    'spark.sql.defaultCatalog', 'spark.master', 'spark.sql.extensions'
]
for item in spark.sparkContext.getConf().getAll():
    if any(config in item[0] for config in essential_configs):
        print(item)

如果想使用emr serverless计算资源,请在每个单元格上方进行选择,左侧选择pyspark,右侧选择创建好的emr serverless资源

查询当前Spark中的catalog List

# Try to use Unity Catalog
spark.sql("SHOW CATALOGS").show()

可以看到此时已经有 sean2 的catalog.

下面我们查询该catalog下的schema数据.

spark.sql("select * from sean2.myorder.sample_orders limit 1").show()

此时可以看到我们已经可以查询到数据了.

总结与展望

方案价值回顾

通过本文介绍的集成方案,我们成功打通了AWS 新一代SageMaker与Databricks两大平台的数据通道,实现了真正意义上的统一数据湖仓架构。这不仅是技术层面的集成,更是企业数据战略的重要布局。

关键收益总结

  1. 直接收益
  • 开发效率提升:消除重复的ETL开发工作
  • 数据延迟降低:从批处理ETL到实时查询的转变
  • 治理成本降低:统一的权限管理和审计体系
  • 资源利用率提升:EMR Serverless的弹性计算能力
  1. 战略价值
  • 打破组织壁垒:让数据工程师和数据科学家在各自熟悉的平台上协同工作
  • 加速AI落地:从数据洞察到模型部署的端到端流程优化
  • 降低合规风险:统一的数据治理框架确保合规性
  • 提升创新能力:释放团队精力专注于业务价值创造
  1. 适用场景

本方案特别适合以下场景:

  • 已有Databricks数据平台,需要扩展ML能力的企业
  • 需要在AWS生态系统中利用Databricks数据资产的团队
  • 对数据治理有严格要求的游戏、金融、医疗等行业
  • 追求成本优化的中大型数据团队

未来展望

随着Unity Catalog生态的不断完善和AWS对开放标准的持续支持,我们预见:

  1. 更深度的集成:期待看到新一代SageMaker与Databricks的直接集成,互为数据的生产者与消费者。在数据发现,可读可写和数据治理方面更加无缝
  2. 性能优化:通过缓存、预计算等技术进一步提升查询性能
  3. 智能化治理:基于ML的自动化数据分类和权限推荐
  4. 多云扩展:将这种集成模式扩展到其他云平台

参考文档

https://community.databricks.com/t5/technical-blog/how-to-access-data-in-databricks-from-amazon-sagemaker-notebooks/ba-p/83638

https://aws.amazon.com/blogs/big-data/run-interactive-workloads-on-amazon-emr-serverless-from-amazon-emr-studio/

*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。

本篇作者

郭俊龙

亚马逊云科技解决方案架构师,主要负责游戏行业客户解决方案设计,比较擅长云原生微服务以及大数据方案设计和实践。

杨希婷

亚马逊云科技技术客户经理,主要支持游戏行业企业级客户出海业务的架构优化、成本管理、技术咨询等工作,目前专注于大数据方向的技术选型、方案落地和实践。

杨文辉

亚马逊云科技 Redshift Specialist 解决方案架构师,负责基于 Redshift 等数据分析领域的解决方案咨询与设计, Analytics TFC 成员。在分布式系统、计算引擎、存储引擎、调度引擎、数据架构、性能优化、数据工程、数学优化、数据科学与机器学习等领域有着丰富的理论基础与实践经验。