为了更好地融入大数据生态,并支持外部引擎访问MaxCompute中的数据,MaxCompute提供了开放存储(Storage API)。第三方主流计算引擎可通过调用Storage API直接访问MaxCompute的底层存储,从而显著提升数据访问和交互效率(本功能处于公测阶段)。
开放存储介绍
开放存储(Storage API)是一种数据服务接口,提供了高效、低延迟、安全的数据读方式,支持第三方主流计算引擎(Spark on EMR、StarRocks、Presto、PAI)直接访问MaxCompute的底层存储系统,提升了MaxCompute与开源计算引擎的机器学习引擎的集成度和数据处理效率。其中,Spark on EMR、StarRocks和Presto还可通过Connector直接读取MaxCompute的数据,更加简化了读取数据的过程,提高了数据访问性能。架构图如下:
应用场景
开放存储(Storage API)可应用于数据开放与多引擎计算场景,当企业或开发者需要在不同的计算框架间灵活切换,或者利用特定引擎的特性处理MaxCompute中的数据时,Storage API可以作为桥梁促进数据流通和处理的多样化。
关键特性
高吞吐:具备列级高效读取的能力,支持在数据传输前通过谓词下推来过滤数据,同时支持Arrow格式。
安全易用:提供Table语义直读底层存储,屏蔽存储细节,同时满足项目隔离、权限控制、数据加密等安全策略。
生态融合:Spark on EMR和StarRocks可通过Connector直接读取MaxCompute的数据,简化了计算引擎的集成过程。
使用限制
第三方引擎访问MaxCompute时,支持读取分区表、聚簇表、物化视图;不支持读取MaxCompute的外部表、逻辑视图、Delta Table。
不支持读JSON数据类型。
开放存储(按量付费)每个租户的请求并发数限制默认为1000个,并且每个并发传输速率为10 MB/s。
数据传输资源
第三方引擎通过MaxCompute开放存储进行数据传输任务时,可选择使用数据传输服务独享资源组(包年包月)和开放存储(按量付费)资源。以下是对这两类资源的详细介绍。
资源组名称 | 费用说明 | 支持地域 | 使用说明 |
数据传输服务独享资源组(包年包月) | 包年包月,按购买并发数的数量计费,详情请参见数据传输独享资源费用(包年包月)。 |
| |
开放存储(按量付费) | 按量计费,当前每个租户每月可享有1 TB的免费数据读写额度,超过1 TB的部分按照实际读写数据的逻辑大小进行计费,详情请参见开放存储(按量计费)。 |
|
您可以在资源观测页面,查看数据传输服务独享资源组(包年包月)和开放存储(按量付费)资源的使用详情,请参见资源观测。
使用开放存储(按量付费)
登录MaxCompute控制台,在左侧导航栏选择租户管理>租户属性,开启开放存储。
开放存储资源名称为
pay-as-you-go
,详情请参见租户属性。授权。
当前针对作业级别指定Quota功能的鉴权默认是所有账号(包括阿里云账号)和角色都没有权限,需要进行授权操作。
新增角色。
在MaxCompute控制台,单击左侧导航栏的租户管理。
在租户管理页面,单击角色管理。
在角色管理页签,单击新增角色。
在新增角色对话框,自定义角色名称和使用如下权限策略内容。
{ "Statement": [{ "Action": [ "odps:List", "odps:Usage"], "Effect": "Allow", "Resource": ["acs:odps:*:regions/*/quotas/pay-as-you-go"]}], "Version": "1" }
参数说明如下。
参数
说明
Action
指定被授予的操作权限名称。单次授权可以指定多个操作,可根据实际情况自行添加操作权限名称。当有多个操作时,多个操作名称之间使用半角逗号(,)分隔。操作取值请参见MaxCompute权限。
说明权限策略参数的详细内容请参见权限策略基本元素。
Resource
指定被授权的资源范围,格式为
["acs:odps:Tenant/${tenant_id}:regions/${region_id}/quotas/${quota_name}"]
。["acs:odps:*:regions/*/quotas/pay-as-you-go"]
含义为当前租户下所有Region下的开放存储后付费Quota。单击确定,完成新增角色。
将角色授权给需要进行作业级别指定Quota的账号。
说明默认主账号或者拥有账户级别(tenant)Super_Administrator的子账号可进行授权操作。
由于授权对象的差别,会出现如下两种场景。
对阿里云账号授权。
目前需要通过如下命令对阿里云账号授权。
-- 将阿里云账号加到租户内并给阿里云账号授权角色 Add tenant user <Aliyun$xxxx>; Grant tenant role <role_name> to user <Aliyun$xxxx>; -- 查看租户role/user的权限 Show grants for tenant role <role_name>; Show grants for tenant user <user_name>; Show principals for tenant [role] <role_name>;
对RAM用户授权。
在MaxCompute控制台左侧导航栏,单击租户管理>用户管理。
在对应RAM用户的操作列,单击修改角色。
在编辑角色对话框,选择待添加角色区域中的目标角色至已添加角色区域。
单击确定,完成授权。
使用开放存储(按量付费)资源。
第三方引擎访问MaxCompute时,将Quota名称设置为
pay-as-you-go
。本文以Java SDK为例,代码示例如下。// 阿里云账号或RAM用户的AccessKey ID和AccessKey Secret // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户 // 此处以把AccessKey 和 AccessKeySecret 保存在环境变量为例说明。您也可以根据业务需要,保存到配置文件里 // 强烈建议不要把 AccessKey 和 AccessKeySecret 保存到代码里,会存在密钥泄漏风险 private static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); private static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); //访问MaxCompute使用的后付费Quota名称 String quotaName = "pay-as-you-go"; //MaxCompute项目名称 String project = "<project>"; //创建Odps对象来连接MaxCompute服务 Account account = new AliyunAccount(accessId, accessKey); Odps odps = new Odps(account); odps.setDefaultProject(project); //MaxCompute服务的连接地址,当前仅支持使用阿里云VPC网络 odps.setEndpoint(endpoint); Credentials credentials = Credentials.newBuilder().withAccount(odps.getAccount()).withAppAccount(odps.getAppAccount()).build(); EnvironmentSettings settings = EnvironmentSettings.newBuilder().withCredentials(credentials).withServiceEndpoint(odps.getEndpoint()).withQuotaName(quotaName).build();
说明您需要根据创建MaxCompute项目时选择的地域以及网络连接方式配置Endpoint,各地域及网络对应的Endpoint值,请参见Endpoint。
使用示例
通过Connector访问MaxCompute,详情请参见:
通过SDK访问MaxCompute,详情请参见: