在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,一经查实,立即删除!

相关文章

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;在次给大家一…

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年上半年更不乐观。…

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年上半年更不乐观。…

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 实例拦截器…

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;也是“十四五”规划之年。中国医疗…

全自动化虽然还早,但机器人劳力确实越来越便宜了

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 编者按&#xff1a;本文来自爱范儿&#xff0c;作者 吴羚&#xff0c;36氪经授权发布。 电影《终结者&#xff1a;黑暗命运》…

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

文章目录一、首页搜索功能1. 搜索页面2. 历史记录和热门搜索组件3. 搜索框提示列表组件4. 综合-价格-分类5. 搜索出的产品展示6. 异常修复7. 路由拦截/路由守卫二、详情页2.1. 效果图2.2. 详情api2.3. 配置路由2.4. 详情页面2.5. 详情页源码技术选型组件版本说明vue^2.6.11数据…

一家典型的云原生企业,如何在创业早期数次“弯道超车”?

作者 | 禾易受访 | 张淼&#xff0c;玩物得志 App CTO来源 | 阿里巴巴中间件引言前几天&#xff0c;阿里云研究员毕玄分享了自己作为阿里云技术人的一个感受&#xff1a;做基础技术的同学&#xff0c;当越来越好地满足了业务发展的诉求后&#xff0c;会发现业务方对基础技术的唯…

“黑天鹅”,正在改变 AI 落地医疗领域的加速度

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 编者按&#xff1a;本文来自微信公众号“极客公园”&#xff0c;作者 在野&#xff0c;36氪经授权转载。 三月中旬&#xff…

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

文章目录一、专题页1. 效果图2. 专题api2.Topic.vue 组件3. 专题源码二、分类页2.1. 效果图2.2. 分类api2.3. Category.vue 组件三、购物车页3.1. 效果图3.2. 购物车api3.3. 购物车页面四、我的页4.1. 效果图4.2. 定义api4.3. User.vue五、路由守卫和异常处理5.1. 编写路由守卫…

Azure Arc 正式商用、Power Platform+GitHub 世纪牵手,一文看懂 Ignite 2020

戳 https://t.csdnimg.cn/dRjD 报名每年科技巨头微软举办 Ignite 大会&#xff0c;发布其最新技术、产品、服务和解决方案。今年 Ignite 2020 大会在 9 月 22 日如约而至&#xff0c;除了将线下会议搬到线上外&#xff0c;微软一如既往地推出众多重磅技术&#xff1a;如被福布斯…

战“疫”期,阿里云云效团队在家高效开发实录

【以下内容为分享实录&#xff0c;有删节】 如何解决在家办公时 “团队沟通”和“研发流程”问题 软件研发团队在家办公时&#xff0c;会遇到的两个核心问题&#xff1a;团队沟通和研发流程。因为云效团队原本就分布在多个城市&#xff0c;平时的沟通方式也经常采用“在线会议…

当 Mars 遇上 RAPIDS:用 GPU 以并行的方式加速数据科学

背景 在数据科学世界&#xff0c;Python 是一个不可忽视的存在&#xff0c;且有愈演愈烈之势。而其中主要的使用工具&#xff0c;包括 Numpy、Pandas 和 Scikit-learn 等。 Numpy Numpy 是数值计算的基础包&#xff0c;内部提供了多维数组&#xff08;ndarray&#xff09;这…

vue2.x vant2.x H5 移动端脚手架

文章目录一、前置准备1. 技术选型2. 创建vue项目二、Rem 布局适配2.1. px转rem2.2. 设置 rem 基准值2.3. 配置vue.config.js2.4. 重置样式表2.5. 配置样式表2.6. 安装less2.7. 注册less2.8. 代码中使用三、vant安装/配置/测试3.1. 安装vant-ui3.2. 引入与注册3.3. vant测试四、…