阿里云首页 数据湖构建 相关技术圈

数据湖构建之MaxCompute湖仓一体最佳实践

MaxCompute + DLF湖仓一体方案打破数据湖与数据仓库割裂的体系,架构上将数据湖的灵活性、生态丰富与数据仓库的企业级能力进行融合,构建数据湖和数据仓库融合的数据管理平台。本文介绍湖仓一体的具体方案。

背景信息

大数据计算服务MaxCompute(原名ODPS)是一种快速、完全托管的EB级数据仓库解决方案。与数据湖相比数据仓库具备易优化、易治理等优点,但同时面临数据种类单一,灵活性低,仅向特定引擎开放等不足,提高了数据存储和加工的成本,不利于数据的共享。依托数据湖构建产品(DLF)提供的企业级元数据能力,MaxCompute数仓可以通过共享元数据的方式访问湖上的存储,与湖上引擎打通,实现MaxCompute湖仓一体。

MaxCompute+DLF湖仓一体方案介绍

MaxCompute 湖仓一体方案打破数据湖与数据仓库割裂的体系,架构上将数据湖的灵活性、生态丰富与数据仓库的企业级能力进行融合,构建数据湖和数据仓库融合的数据管理平台,其具备以下特性:

  • 企业级高性能数据仓库,通过云原生大数据服务以更低成本满足业务高弹性和敏捷性需求。

  • 与数据湖(OSS、EMR、DDI、HOLO等)联动,无需数据搬迁即可无缝处理和分析数据湖数据。

湖仓一体方案的整体架构如下图所示:

整个方案以OSS存储为基础、通过配套使用数据湖构建DLF(Data Lake Formation)产品,MaxCompute、其他湖上引擎与OSS可以互通,数据湖的元数据(Schema)全部位于DLF中。MaxCompute可以利用DLF对湖数据的元数据管理能力,提升对OSS半结构化格式(AVRO、CSV、JSON、PARQUET、ORC)数据的处理能力。

前提条件

请您确认已满足以下条件:

  • 已创建标准存储类型的OSS存储空间,并准备好OSS目录及数据文件。 更多创建OSS存储空间、OSS目录及上传数据文件信息,请参见创建存储空间新建目录上传文件

  • 已创建MaxCompute项目(非External Project)。

使用限制

MaxCompute湖仓一体方案的使用限制如下:

  • 仅华东1(杭州)、华东2(上海)、华北2(北京)、华南1(深圳)地域支持构建湖仓一体能力。

  • MaxCompute可以部署在与OSS和DLF不同的地域,但OSS和DLF必须部署在同一地域。

操作流程

您需要基于已创建的MaxCompute项目、DLF元数据库、DLF元数据表、OSS路径来创建External Project,实现访问数据湖OSS中的数据。同时,您还可以基于已创建的MaxCompute项目对External Project执行表相关操作。

具体操作步骤

  • 步骤一:获取支持湖仓一体功能的MaxCompute客户端

  • 步骤二:在DLF中创建元数据库和元数据表

  • 步骤三:授权MaxCompute访问DLF

  • 步骤四:创建External Project

步骤一:获取支持湖仓一体功能的MaxCompute客户端

下载支持湖仓一体功能的MaxCompute客户端,并完成安装和配置。

更多安装和配置MaxCompute客户端信息,请参见安装并配置客户端

步骤二:在DLF中创建元数据库和元数据表

基于准备好的OSS信息,在DLF中创建元数据库和元数据表,用于存放OSS数据的元数据信息。操作步骤如下:

  1. 登录元数据库管理控制台,在左上角选择与OSS相同的地域,例如华东2(上海)。

  2. 创建元数据库。例如shanghai。

    1. 在左侧导航栏,单击元数据库。

    2. 在元数据库页面,单击新建元数据库。

    3. 在新建元数据库对话框,配置元数据库参数。

  3. 单击确定,完成元数据库创建

  4. 创建元数据表。例如sh_rt。

    1. 在元数据库页面,在目标元数据库的操作列单击表。

    2. 在元数据表页面,单击新建元数据表。

    3. 在新建元数据表页面,配置元数据表的基本信息。

  5. 单击确定,完成元数据表创建。

步骤三:授权MaxCompute访问DLF

操作MaxCompute项目的账号未经授权无法访问DLF,您需要执行授权操作。授权方式包含如下两种:

  • 方式一:一键授权。当创建MaxCompute项目的账号和部署DLF的账号相同时,推荐使用该方式。您可以单击此处完成一键授权

  • 方式二:自定义授权。当需要自定义授权信息时,使用该方式。创建MaxCompute项目的账号和部署DLF的账号相同或不相同,都可以使用该方式。

更多内容请参考:授权MaxCompute访问DLF

步骤四:创建External Project

基于已创建的MaxCompute项目、DLF元数据库,创建External Project,用于关联DLF和OSS,并映射至已创建的MaxCompute项目。后续可通过映射的MaxCompute项目对External Project进行操作。仅MaxCompute项目的所有者(Project Owner)或具备Admin、Super_Administrator角色的用户可以创建External Project。操作步骤如下:

  1. 登录MaxCompute客户端,在映射的MaxCompute项目下,执行create externalproject命令创建External Project。

    create externalproject -source dlf -name <external_project_name> 
        -ref <project_name> 
       [-comment <comment>]
        -region <dlf_region> 
        -db <dlf_database_name>
        -endpoint "<dlf_endpoint>" 
       [-ramRoleArn "<ram_role_arn>"]
        -ossEndpoint "<oss_endpoint>" 
       [-T <table_properties>];
    • 参数说明:

      • external_project_name:必填。待创建External Project的名称。

      • project_name:必填。已创建的MaxCompute项目名称。

      • comment:可选。External Project的注释信息。

      • dlf_region:必填。DLF所在地域的RegionID。各地域RegionID信息,请参见获取RegionID及VPC ID

      • dlf_database_name:必填。DLF元数据库的名称。

      • dlf_endpoint:必填。DLF的Endpoint信息。当前支持的地域对应的Endpoint信息如下:

      • 华东1(杭州):dlf-share.cn-hangzhou.aliyuncs.com

      • 华东2(上海):dlf-share.cn-shanghai.aliyuncs.com

      • 华北2(北京):dlf-share.cn-beijing.aliyuncs.com

      • ram_role_arn:可选。RAM角色的ARN信息。采用自定义授权方式时,需要配置该参数。该参数还可以通过-D odps.properties.rolearn=<ram_role_arn>方式进行配置。

      • oss_endpoint:必填。OSS所属地域的Endpoint。更多OSS Endpoint信息,请参见访问域名和数据中心

      • table_properties:可选。指定External Project中表的相关属性。

  2. 创建externalproject命令示例:

    create externalproject -source dlf -name ext_mcdlf_ddl      
        -ref doc_test_prod      
          -comment "DLF"      
          -region "cn-shanghai"      
          -db shanghai      
          -endpoint "dlf-share.cn-shanghai.aliyuncs.com"      
          -ossEndpoint "oss-cn-shanghai-internal.aliyuncs.com";
  3. 进入新创建的External Project空间,查看External Project下的表。命令示例:

    --进入新创建的External Project。
    odps@ doc_test_prod>use ext_mcdlf_ddl;
    Project timezone: Asia/Shanghai
    --查看空间下的表。
    odps@ ext_mcdlf_ddl>show tables;
    
    ALIYUN$xxxxx@test.aliyunid.com:sh_rt
    
    OK
  4. 进入映射的MaxCompute项目,跨项目查询External Project中的表数据。

    --进入映射的MaxCompute项目。
    odps@ ext_dlf_ddl1>use doc_test_prod;
    Project timezone: Asia/Shanghai
    --在访问表数据前,需要设置如下属性。属性值固定配置如下。
    odps@ doc_test_prod>
    set odps.sql.hive.compatible=true;
    set odps.sql.unstructured.oss.commit.mode=true;
    set odps.sql.unstructured.file.pattern.black.list=r".*/_SUCCESS$,.*/[.]hive-staging/.*";
    set odps.ext.oss.orc.native=true;
    set odps.ext.parquet.native=true;
    set odps.sql.split.hive.bridge=true;
    --查询表数据。
    odps@ doc_test_prod> select * from ext_mcdlf_ddl.sh_rt limit 10;
    
    +------------+------------+------------+------------+------------+
    | col1       | col2       | col3       | col4       | col5       |
    +------------+------------+------------+------------+------------+
    | 2019/1/1   | 0          | 12TH       | 12TH       | 3          |
    | 2019/1/1   | 0          | 12TH       | 16TH       | 4          |
    | 2019/1/1   | 0          | 12TH       | ANTC       | 1          |
    | 2019/1/1   | 0          | 12TH       | BAYF       | 1          |
    | 2019/1/1   | 0          | 12TH       | CIVC       | 2          |
    | 2019/1/1   | 0          | 12TH       | COLM       | 1          |
    | 2019/1/1   | 0          | 12TH       | COLS       | 1          |
    | 2019/1/1   | 0          | 12TH       | CONC       | 1          |
    | 2019/1/1   | 0          | 12TH       | DALY       | 1          |
    | 2019/1/1   | 0          | 12TH       | DELN       | 2          |
    +------------+------------+------------+------------+------------+
    10 records (at most 10000 supported) fetched by instance tunnel. 

更多内容请参考:MaxCompute 通过ExternalProject访问DLF

首页 数据湖构建 最佳实践 数据湖构建之MaxCompute湖仓一体最佳实践