本文为您介绍如何通过MaxCompute管家设置包年包月项目使用包年包月CU资源,而项目中的某些作业使用按量计费CU资源。
概述
使用MaxCompute进行数据开发时,您通常需要按照业务需求选择包年包月或者按量计费CU资源,不同计费模式的CU资源具有不同的优劣。
包年包月CU资源为独享资源;按量计费CU资源为公共资源,按照需要弹性使用。某些情况下,会同时使用包年包月和按量计费的CU资源,对于资源需求量极高且优先级要求也很高的作业,包年包月CU资源远远不足,您需要使用按量计费CU资源来满足需求。
您可以先通过MaxCompute管家对使用包年包月计费模式的项目设置按量计费配额,然后在需要使用按量计费CU资源的SQL作业脚本中增加set odps.task.quota.preference.tag=payasyougo;
语句,与SQL语句同时提交,即可将SQL作业提交到按量计费弹性资源池。SQL执行成功则会按量计费。
说明 如果您的项目所属区域在华东2(上海)、华东1(杭州)、华北2(北京)、华南1(深圳)华北3(张家口)、西南1(成都)的其中一个,那么可以使用单作业级别指定Quota功能,详情请参见作业级别指定Quota。该功能不限制当前项目计费模式,同时支持所有作业类型。
使用限制
您在使用该功能前需要确保项目满足如下要求:
- 项目的计费模式为包年包月。
- 项目所在区域已开通按量计费服务,详情请参见开通MaxCompute。
- 只支持SQL和MapReduce类型作业。
注意事项
您在使用该功能时需要注意:
- 提交到按量计费CU资源中的SQL作业,会按量计费并在第二天出账,计费详情请参见计算费用(按量计费)。
- 建议您配置消费监控告警,监控SQL作业消费情况,详情请参见消费监控告警。
操作步骤
- 登录DataWorks控制台。
- 在左侧导航栏,单击 。
- 在计算引擎列表—MaxCompute页面上方选择您所在的区域。
- 在包年包月区域,单击CU管理,进入MaxCompute管家页面。
- 在左侧导航栏,单击项目,在包年包月项目区域,单击需要使用按量计费CU资源的项目右侧的增加按量付费配额。
配置成功后,按量付费属性值变为已添加。
- 在需要使用按量计费CU资源的SQL语句前增加
set odps.task.quota.preference.tag=payasyougo;
命令,与SQL语句一起提交。 - (可选)在左侧导航栏,单击作业,在作业快照页签,查看SQL作业运行情况。
- (可选)如果项目不再使用按量计费CU资源,您可以在左侧导航栏,单击项目,在包年包月项目区域,单击需要移除按量计费CU资源的项目右侧的移除按量付费配额。移除成功后,新提交的SQL作业不会再使用按量计费CU资源。
通过Java SDK使用示例
您可以通过Java SDK方式提交作业,实现包年包月项目使用按量计费资源。命令示例如下。Java SDK详情请参见Java SDK介绍。
import com.aliyun.odps.*;
import com.aliyun.odps.account.Account;
import com.aliyun.odps.account.AliyunAccount;
import com.aliyun.odps.task.SQLTask;
import java.util.HashMap;
import java.util.Map;
public class TestOdpsSdk {
public static void main(String args[]) throws OdpsException {
Account account = new AliyunAccount("AccessKey_id", "AccessKey_secret");
Odps odps = new Odps(account);
odps.setEndpoint("odps public cloud url");
odps.setDefaultProject("your_project_name");
String sqlText = "select count(*) from test_table1;";
Map<String, String> hints = new HashMap<>();
hints.put("odps.task.quota.preference.tag", "payasyougo"); /** 提示系统sqlText希望提交到按量计费资源组(只有当your_project_name是包年包月计费类型,且添加了按量计费资源组,该配置才生效)。*/
Instance instance = SQLTask.run(odps, odps.getDefaultProject(), sqlText, hints, null);
LogView logView = new LogView(odps);
System.out.println(logView.generateLogView(instance, 48));
instance.waitForSuccess();
}
}