在DataWorks标准模式下统计个人账号使用资源情况

背景
在使用MaxCompute的时候通常情况下,用户会通过Information Schema的task_history视图表来分析具体某个账号执行的SQL任务情况,来做到SQL成本分摊或SQL的时间成本优化。但大多数用户通过DataWorks标准模式下使用MaxCompute,这样在MaxCompute提供的元数据视图信息中将记录所有的生产作业执行账号为同一个主账号,只有小部分的开发作业执行账号为个人RAM子账号。本文主要介绍如何在DataWorks标准模式下统计个人账号使用资源情况。
image.png
如上图所示,这样大多数成本都无法升级到具体RAM账号上,进而做不到成本审计和分摊。
解决方案
在使用DataWorks开发MaxCompute作业时,每个节点都有一个责任人,默认为当前开发者即当前RAM子账号。如果能够获取到这个信息与Information Schema匹配即可。
获取节点责任人ID
在DataWorks页面中,一个节点的责任人如下示意图:
B8B63870-FAF6-4C86-A349-68E5A7DA11A0.png

以一个真实的生产环境执行的作业logview为例,如下:
image.png
其中"SKYNET_ONDUTY":"219292777233523137"即为我们要获取的值。SKYNET_ONDUTY表示该节点的责任人,后面的value为该节点责任人(云账号&子账号)的ID。或者我们可以通过Information Schema的task_history表去解析获取到该ID。该值被记录在Information Schema的task_history表的settings字段里,需要进行一次解析。解析得到的账号ID就是该节点责任人(云账号&子账号)的ID。
image.png

--示例代码:
SELECT  inst_id,settings,
REGEXP_EXTRACT(settings,'"SKYNET_ONDUTY":"(.*?)"',1) AS SKYNET_ONDUTY
FROM information_schema.tasks_history
WHERE ds = 20200402 and inst_id='20200402064857130g8zorjim';

获取RAM子账号
通过上述步骤只能获取一个ID,还需要通过RAM API 来获取ID对应的子账号或云账号是哪一个。

{"requestId":"1CFF97CC-DD17-4C69-9AC7-7E869B8857AC","isTruncated":false,"users":[{"userId":"219292777233523137","userName":"mc_oss","displayName":"mc_oss","comments":"","createDate":"2019-12-25T00:25:23Z","updateDate":"2020-02-24T03:44:04Z"},{"userId":"218915375439469278","userName":"bigdata_wei","displayName":"bigdata_wei","comments":"","createDate":"2019-12-04T06:04:29Z","updateDate":"2020-02-21T01:43:37Z"}]
}

这里需要我们自己将结果抓取下来存储并解析出UserName和UserId,UserId即为节点责任人ID。
API实现代码逻辑参考如下
(1)创建一张表用来存储获取到的UserName和UserID

create table users_list(UserName string,UserId string
);

(2)ListUsers.java


import Utils.Configurations;
import Utils.ODPS;
import com.aliyun.odps.Odps;
import com.aliyun.odps.Table;
import com.aliyun.odps.data.Record;
import com.aliyun.odps.data.RecordWriter;
import com.aliyun.odps.tunnel.TableTunnel;
import com.aliyun.odps.tunnel.TunnelException;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.ram.model.v20150501.ListUsersRequest;
import com.aliyuncs.ram.model.v20150501.ListUsersResponse;import java.io.IOException;
import java.util.List;
import java.util.Properties;public class ListUsers {public static void main(String[] args) {Properties properties = Configurations.properties();String ai = properties.getProperty("access_id");String ak = properties.getProperty("access_key");String project = properties.getProperty("project_name");DefaultProfile profile = DefaultProfile.getProfile("cn-beijing", ai, ak);IAcsClient client = new DefaultAcsClient(profile);ListUsersRequest request = new ListUsersRequest();request.setRegionId("cn-beijing");try {ListUsersResponse response = client.getAcsResponse(request);List<ListUsersResponse.User> users = response.getUsers();//打开表Odps odps = ODPS.newOdps(ai, ak, project);Table table = odps.tables().get("users_list");TableTunnel.UploadSession uploadSession = new TableTunnel(odps).createUploadSession(project, table.getName());//遍历写到表中RecordWriter writer = uploadSession.openBufferedWriter();for (ListUsersResponse.User user : users) {Record record = uploadSession.newRecord();record.setString("username", user.getUserName());record.setString("userid", user.getUserId());System.out.println("写入数据" + user.getUserId() + ":" + user.getUserName());writer.write(record);}writer.close();uploadSession.commit();System.out.println("写入完成...");} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {System.out.println("ErrCode:" + e.getErrCode());System.out.println("ErrMsg:" + e.getErrMsg());System.out.println("RequestId:" + e.getRequestId());} catch (TunnelException e) {System.out.println("创建table上传session失败");System.out.println(e.getMessage());} catch (IOException e) {System.out.println("写数据到表失败");System.out.println(e.getMessage());}}
}

(3)在src下创建一个Utils目录,放以下文件Configurations.java、ODPS.java。

 a、Configurations.javapackage Utils;import java.io.IOException;import java.io.InputStream;import java.util.Properties;import java.util.ResourceBundle;public class Configurations {* 获取配置文件信息** @return*/public static Properties properties() {Properties properties = new Properties();// 使用ClassLoader加载properties配置文件生成对应的输入流InputStream in = Configurations.class.getClassLoader().getResourceAsStream("common.properties");// 使用properties对象加载输入流try {properties.load(in);return properties;} catch (IOException e) {System.out.println("配置文件读取有误" + e.getMessage());}return null;}/*** 读取配置文件** @return*/public static ResourceBundle read() {//config为属性文件名,放在包com.test.config下,如果是放在src下,直接用config即可ResourceBundle resourceBundle = ResourceBundle.getBundle("common");return resourceBundle;}
}
b、ODPS.java
package Utils;
import com.aliyun.odps.Odps;
import com.aliyun.odps.account.Account;
import com.aliyun.odps.account.AliyunAccount;public class ODPS {/*** 在外网中使用,获取odps的连接对象** @param ai* @param ak* @param project* @return*/static public Odps newOdps(String ai, String ak, String project) {Account account = new AliyunAccount(ai, ak);Odps odps = new Odps(account);odps.setDefaultProject(project);return odps;}/*** 在内网中使用,获取odps的连接对象** @param ai* @param ak* @param project* @param odpsUrl* @return*/static public Odps newOdps(String ai, String ak, String project, String odpsUrl) {Account account = new AliyunAccount(ai, ak);Odps odps = new Odps(account);odps.setEndpoint(odpsUrl);odps.setDefaultProject(project);return odps;}
}

(4)common.properties放resource路径

# 主账号:
project_name=
access_id=
access_key=

通过“获取节点责任ID”和“获取RAM子账号”步骤后,基础信息已经可以拿到,还需要进行一次join拿到instanceid对应的具体云账号or子账号
image.png

--示例代码:
select  a.UserName,b.SKYNET_ONDUTY 
from    users_list a
join (SELECT inst_id,settings,REGEXP_EXTRACT(settings,'"SKYNET_ONDUTY":"(.*?)"',1) AS SKYNET_ONDUTYFROM   information_schema.tasks_historyWHERE  ds = 20200402 and inst_id='20200402064857130g8zorjim'
)b
on a.UserId = b.SKYNET_ONDUTY
;

⚠️:此处任务执行日期ds和inst_id需要根据自己的任务做相应的替换。
计算成本分摊/审计需求
1、MaxCompute提供了开放元数据的Information_Schema服务,通过元数据服务Information_Schema里面的作业历史表tasks_history,可以查询到准实时的项目作业历史明细。包括:项目名称、任务名称、Instance id、开始时间、结束时间、任务复杂度、任务CPU使用情况等字段。
2、用户可以通过费用中心账号总览消费记录去查询具体的消费情况。
同时,阿里云交易和账单管理OpenAPI为用户提供管理阿里云产品售卖和财资能力,通过该API可以程序化获取MaxCompute作业计费明细数据。
调用QueryUserOmsData接口(阿里云的账单系统OMS),可以查询到具体计量信息编号、数据分类、存储、SQL读取量、公网上下行流量等字段信息。
通过Information_Schema.tasks_history和账单系统进一步统计计算成本分摊/审计需求。
欢迎加入“MaxCompute开发者社区2群”,[MaxCompute开发者社区2群]

(https://yq.aliyun.com/go/articleRenderRedirect?spm=a2c4e.11153940.0.0.47d43dcaeTan9O&url=https%3A%2F%2Fh5.dingtalk.com%2Finvite-page%2Findex.html%3FbizSource%3D____source____%26amp%3BcorpId%3Ddingb682fb31ec15e09f35c2f4657eb6378f%26amp%3BinviterUid%3DE3F28CD2308408A8%26amp%3BencodeDeptId%3D0054DC2B53AFE745)申请加入或扫描以下二维码加入。
image.png

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/516402.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端_网页编程 Form表单与模板引擎(中)

目录 ... ...(续上篇)四、模板引擎的基本概念1.定义2. 优点五、art-template模板引擎1.art-template模板引擎介绍2. art-template的安装3. art-template模板引擎的基本使用3.1 使用传统方式渲染UI结构3.2 art-template的使用步骤4. art-template语法4.1 输出4.2 原文输出4.3 …

vsftpd FTP Server ‘ls.c‘ 远程拒绝服务漏洞(CVE-2011-0762)漏洞修复方案

以前如果安装过只是为了升级&#xff0c;需要先卸载&#xff0c;在安装停止现有的vsftpd服务 service vsftpd stop在线卸载vsftpd yum remove -y vsftpd删除以前的目录 rm -rf /etc/vsftpd -R软连接 ln -s /lib64/libcap.so.2.16 /usr/lib/libcap.so下载vsftpd、解压 cd /…

Mysql5.7使用DTS增量同步数据到MaxCompute

背景&#xff1a;一些客户反馈&#xff0c;增量同步数据到MaxCompute按照全天的数据做增量数据同步数据量太大&#xff0c;且不使用按天的增量同步数据&#xff0c;进行在MaxCompute上进行数据处理得出增量数据对于delete的相关数据不能做到很好的支持&#xff0c;在次给大家一…

VMware发布虚拟云网络创新技术,连接和保护分布式多云企业

全球领先的企业软件创新者VMware&#xff08;NYSE&#xff1a;VMW&#xff09;本周在VMworld 2020大会上发布多项虚拟云网络创新&#xff0c;将帮助客户构建现代化网络, 更好地支持当前和未来业务计划。凭借VMware不断升级的网络和安全产品组合&#xff0c;客户将更有效地管理向…

前端_网页编程 Form表单与模板引擎(下)

目录 续上一篇6. 模板引擎的实现原理6.1 正则与字符串操作6.1.1 基本语法6.1.2 分组6.1.3 字符串的replace函数6.1.4 多次replace6.1.5 使用while循环replace6.1.6 replace替换为真值6.2 实现简易的模板引擎6.2.1 实现步骤6.2.2 定义模板结构6.2.3 预调用模板引擎6.2.4 封装 te…

MaxCompute问答整理之2020-03月

本文是基于本人对MaxCompute产品的学习进度&#xff0c;再结合开发者社区里面的一些问题&#xff0c;进而整理成文。希望对大家有所帮助。 问题一、在 MaxCompute SQL执行过程中&#xff0c;报错Table xx has n columns&#xff0c; but query has m columns如何处理&#xff…

vsftpd 源码安装 linux/redhat

以前如果安装过只是为了升级&#xff0c;需要先卸载&#xff0c;在安装停止现有的vsftpd服务 service vsftpd stop在线卸载vsftpd yum remove -y vsftpd删除以前的目录 rm -rf /etc/vsftpd -R软连接 ln -s /lib64/libcap.so.2.16 /usr/lib/libcap.so下载vsftpd、解压 cd /…

攀钢告诉你:钢铁是怎样用AI炼成的?

云栖号案例库&#xff1a;【点击查看更多上云案例】 不知道怎么上云&#xff1f;看云栖号案例库&#xff0c;了解不同行业不同发展阶段的上云方案&#xff0c;助力你上云决策&#xff01; 2018年以来&#xff0c;百货企业仍处在洗牌激荡时期&#xff0c;2019年上半年更不乐观。…

VMware发布面向未来的员工工作解决方案,满足分散办公需求

全球领先的企业软件创新者VMware&#xff08;NYSE&#xff1a;VMW&#xff09; 本周在VMworld 2020大会上发布VMware Future-Ready Workforce解决方案&#xff0c;提供卓越的员工办公体验和端到端零信任安全控制&#xff0c;同时简化管理。通过结合VMware安全访问服务边缘&…

npm 设置淘宝镜像和查看镜像设置

将npm设置为淘宝镜像&#xff1a; npm config set registry https://registry.npm.taobao.org查看cnpm镜像设置&#xff1a; npm config get registry

银泰上云 打造“从-1到0再到1”数字化成长逻辑

云栖号案例库&#xff1a;【点击查看更多上云案例】 不知道怎么上云&#xff1f;看云栖号案例库&#xff0c;了解不同行业不同发展阶段的上云方案&#xff0c;助力你上云决策&#xff01; 2018年以来&#xff0c;百货企业仍处在洗牌激荡时期&#xff0c;2019年上半年更不乐观。…

前端_网页编程 Ajax加强

目录 内容一、XMLHttpRequest的基本使用1. 什么是XMLHttpRequest2. 使用xhr发起GET请求3. xhr对象的readyState属性4. 使用xhr发起带参数的GET请求5. 查询字符串5.1 什么是查询字符串5.2 get请求携带参数的本质6. URL编码与解码6.1 什么是URL编码6.2 如何对URL进行编码与解码6.…

MaxCompute管家详解--管家助力,轻松玩转MaxCompute

精彩视频回顾请点击&#xff1a;MaxCompute管家详解 以下是直播内容精华整理&#xff0c;主要包括以下四个方面&#xff1a; 1.背景速览&#xff1b; 2.功能介绍&#xff1b; 3.案例讲解&#xff1b; 4.新功能预告。 一、背景速览 MaxCompute&#xff08;原ODPS&#xff09;是…

vue+vant 移动端H5 商城项目_01

文章目录一、Rem 布局适配1. 安装 amfe-flexible2. px转化rem3. 全局配置4. 重置样式表5. 引入重置样式表二、组件安装和配置与封装2.1. 安装less 预编译语言2.2. 安装vant-ui2.3. 端口自定义配置三、axios 工具封装3.1. 下载安装axios3.2. axios导入3.3. 创建axios 实例拦截器…

VMware和NVIDIA推出新一代混合云架构

在VMworld 2020大会上&#xff0c;VMware和NVIDIA宣布开展进一步合作&#xff0c;推出面向AI的端到端企业平台以及采用NVIDIA DPU&#xff08;数据处理单元&#xff09;、面向数据中心、云和边缘的全新架构&#xff0c;从而为现有应用和新的一代应用提供支持。 通过此次合作&…

GitHub博客开发上线实战

文章目录 1. git代码管理工具1.1 git简介1.2 git的下载与安装1.2.1 MAC电脑1.2.2 Windows系统1.3 如何开始使用git1.4 git常用命令介绍1.4.1 初始化本地仓库1.4.2 本地的代码如何提交到远程网站中1.4.3 远程的代码如何下载/合并到本地中1.4.4 本地如何进行分支管理1.4.5 其他命…

vue+vant 移动端H5 商城项目_02

文章目录一、路由规划1. 新建路由配置2. 下载vue-router3. 路由注册4. 路由基础配置5. 路由挂载6. AppTabBar7.二、移动端首页2.1.首页效果2.2. 首页接口请求2.3. 首页页面2.4. 首页页面三、首页组件3.1. 轮播图SwiperCom3.2. Grid 居家-志趣组件3.3. 类别页组件3.4. 品牌制造商…

MaxCompute规格详解 让您花更低的成本获得更高的业务价值

精彩视频回看请点击&#xff1a;MaxCompute规格详解 以下为精彩视频内容整理&#xff1a; 在用户使用MaxCompute之前&#xff0c;都会考虑成本和业务两大问题。有些企业处在快速的发展期&#xff0c;在业务上对性能的要求比较高&#xff0c;例如计算业务对资源的需求是弹性的&…

翼方健数邓振:“DRG+AI”助力实现医院精细化管理

日前&#xff0c;第十四届中国医院院长年会在厦门举行&#xff0c;从宏观与微观、管理与学科等不同维度&#xff0c;跟进解读了后疫情时代中国医疗健康行业、中国医院发展的挑战、机遇与对策。 2020年是全面建成小康社会决胜之年&#xff0c;也是“十四五”规划之年。中国医疗…

前端_网页编程 跨域与JSONP- 淘宝搜索案例

文章目录 前言1. 要实现的UI效果2. 实现步骤2.1 获取用户输入的搜索关键词2.2 建议搜索列表的函数封装2.3 渲染建议列表的UI结构2.3.1 定义搜索建议列表2.3.2 定义模板结构2.3.1 定义渲染模板结构的函数2.4 美化搜索建议列表2.4.1 建议列表框美化2.5 输入框的防抖2.5.1 什么是防…