阿里云大计算服务MaxCompute是一款商业化的大数据分析平台,其计算资源有预付费和后付费两种计费方式。而且产品天天按照project为维度进行计量计费(帐单基本状况下会次日6点前产出)。本文使用的为云上客户真实数据,故在下文中的截图都mask掉了。html
关于MaxCompute计量计费说明,详见官方文档:sql
可是一般状况下,咱们在数据开发阶段或者在上线前夕会发下帐单有波动(一般状况下为增大), 其实用户首先能够经过自助的方式来分析帐单波动状况,再倒逼本身的做业进行优化。阿里云费用中心就是一个很好的通道,阿里云全部商业化收费的产品均可以在其中下载费用明细。浏览器
一般您须要使用主帐号查看帐单详情。若是您须要使用子帐号查看帐单信息,请首先参考费用中心RAM配置策略行子帐号受权。微信
step1:使用主帐号或者被受权的RAM子帐号来登陆阿里云管控台。
step2:右上角进入费用中心。session
step3:在费用中心-消费记录-消费明细中,选择产品和帐单日期。
工具
包年包月中的 后付费是指项目开通包年包月计算计费模式后,还产生的存储、下载对应的费用(存储、下载费用只有后付费)。大数据
step4:为了方便批量分析数据,咱们选择下载使用记录csv文件在本地分析。
优化
下载csv文件以下,能够在本地打开进行分析。
ui
--csv的表头 项目编号,计量信息编号,数据分类,存储(Byte),SQL 读取量(Byte),SQL 复杂度(Byte),公网上行流量(Byte),公网下行流量(Byte),MR 做业计算,开始时间,结束时间,SQL读取量_访问OTS(Byte),SQL读取量_访问OSS(Byte)
使用记录明细字段解释:阿里云
① 确认CSV文件数据,尤为是列分隔符等(推荐使用UE)。
数据以逗号分隔,且单元格值都带有双引号。
② 数据预处理:替换掉文档全部双引号,以方便使用Tunnel等上传工具。
替换为不用填写。直接点击所有替换。
③ 建立MaxCompute表,存储下载的消费明细。
DROP TABLE IF EXISTS maxcomputefee ; CREATE TABLE IF NOT EXISTS maxcomputefee ( projectid STRING COMMENT '项目编号' ,feeid STRING COMMENT '计费信息编号' ,type STRING COMMENT '数据分类,包括Storage、ComputationSQL、DownloadEx等' ,starttime DATETIME COMMENT '开始时间' ,storage BIGINT COMMENT '存储量' ,endtime DATETIME COMMENT '结束时间' ,computationsqlinput BIGINT COMMENT '输入数据量' ,computationsqlcomplexity DOUBLE COMMENT 'sql复杂度' ,uploadex BIGINT COMMENT '公网上行流量Byte' ,download BIGINT COMMENT '公网下行流量Byte' ,cu_usage DOUBLE COMMENT 'MR计算时*second' ,input_ots BIGINT COMMENT '访问OTS的数据输入量' ,input_oss BIGINT COMMENT '访问OSS的数据输入量' ) ;
④ Tunnel上传数据,具体Tunnel的配置详见官方文档。
odps@ sz_mc>tunnel upload /Users/yangyi/Desktop/ODPS_2019-01-12_2019-01-14.csv maxcomputefee -c "UTF-8" -h "true" -dfp "yyyy-MM-dd HH:mm:ss";
固然用户也能够经过DataWorks数据导入的功能来进行,具体详见操做步骤。
⑤ 验证数据。
云上客户使用MaxCompute,95%的用户经过SQL便可知足需求,SQL也在消费成长中占据了绝大部分。
SQL费用=一次SQL计算费用 = 计算输入数据量 SQL复杂度 0.3元/GB
--分析SQL消费,按照SQL进行排行 SELECT to_char(endtime,'yyyymmdd') as ds,feeid as instanceid ,projectid ,computationsqlcomplexity --复杂度 ,SUM((computationsqlinput / 1024 / 1024 / 1024)) as computationsqlinput --数据输入量GB ,SUM((computationsqlinput / 1024 / 1024 / 1024)) * computationsqlcomplexity * 0.3 AS sqlmoney FROM maxcomputefee WHERE TYPE = 'ComputationSql' AND to_char(endtime,'yyyymmdd') >= '20190112' GROUP BY to_char(endtime,'yyyymmdd'),feeid ,projectid ,computationsqlcomplexity ORDER BY sqlmoney DESC LIMIT 10000 ;
--查询结果--
根据此段SQL执行结果能够获得以下结论:
wait instanceid;
查看具体做业和SQL。随即在浏览器中打开logview的url地址(关于logview的介绍详见官方文档):
从logview中获取DataWorks节点名称:
在logview中打开SourceXML能够查看到具体执行信息,如SKYNET_NODENAME表示DataWorks的节点名称(固然只有被调度系统执行的做业才有值,临时查询为空,以下图所示)。拿到节点名称能够快速的在DataWorks找到该节点进行优化或查看责任人。
通常状况下费用的增加背后实际上是做业量的暴涨,多是重复执行,也多是调度属性配置的不是很合理。
--分析做业增加趋势 SELECT TO_CHAR(endtime,'yyyymmdd') AS ds ,projectid ,COUNT(*) AS tasknum FROM maxcomputefee WHERE TYPE = 'ComputationSql' AND TO_CHAR(endtime,'yyyymmdd') >= '20190112' GROUP BY TO_CHAR(endtime,'yyyymmdd') ,projectid ORDER BY tasknum DESC LIMIT 10000 ;
--执行结果--
从执行结果能够看出来12-14日提交到MaxCompute且执行成功的做业数的波动趋势。
存储费用的计费规则相对来讲比较复杂,由于下载到的明细是每一个小时取一次数据。按照MaxCompute存储计费规则,会总体24小时求和而后平均以后的值再阶梯收费。具体详见官网。
--分析存储费用 SELECT t.ds ,t.projectid ,t.storage ,CASE WHEN t.storage < 0.5 THEN 0.01 WHEN t.storage >= 0.5 AND t.storage <= 100 THEN t.storage*0.0192 WHEN t.storage > 100 AND t.storage <= 1024 THEN (100*0.0192+(t.storage-100)*0.0096) WHEN t.storage > 1024 AND t.storage <= 10240 THEN (100*0.0192+(1024-100)*0.0096+(t.storage-1024)*0.0084) WHEN t.storage > 10240 AND t.storage <= 102400 THEN (100*0.0192+(1024-100)*0.0096+(10240-1024)*0.0084+(t.storage-10240)*0.0072) WHEN t.storage > 102400 AND t.storage <= 1048576 THEN (100*0.0192+(1024-100)*0.0096+(10240-1024)*0.0084+(102400-10240)*0.0072+(t.storage-102400)*0.006) END storage_fee FROM ( SELECT to_char(starttime,'yyyymmdd') as ds ,projectid ,SUM(storage/1024/1024/1024)/24 AS storage FROM maxcomputefee WHERE TYPE = 'Storage' and to_char(starttime,'yyyymmdd') >= '20190112' GROUP BY to_char(starttime,'yyyymmdd') ,projectid ) t ORDER BY storage_fee DESC ;
--执行结果--
根据计算结果能够分析得出结论:
对于公网或者跨Region的数据下载,MaxCompute将按照下载的数据大小进行计费。计费公式为:一次下载费用=下载数据量*0.8元/GB。
--分析下载消费明细 SELECT TO_CHAR(starttime,'yyyymmdd') AS ds ,projectid ,SUM((download/1024/1024/1024)*0.8) AS download_fee FROM maxcomputefee WHERE type = 'DownloadEx' AND TO_CHAR(starttime,'yyyymmdd') >= '20190112' GROUP BY TO_CHAR(starttime,'yyyymmdd') ,projectid ORDER BY download_fee DESC ;
按照执行结果也能够分析出某个时间段内的下载费用走势。另外能够经过tunnel show history查看具体历史信息,具体命令详见官方文档。
如下几种计算做业与SQL相似,按照官方计费文档编写SQL便可。
MR任务当日计算费用=当日总计算时*0.46元
--分析MR做业消费 SELECT TO_CHAR(starttime,'yyyymmdd') AS ds ,projectid ,(cu_usage/3600)*0.46 AS mr_fee FROM maxcomputefee WHERE type = 'MapReduce' AND TO_CHAR(starttime,'yyyymmdd') >= '20190112' GROUP BY TO_CHAR(starttime,'yyyymmdd') ,projectid ,cu_usage ORDER BY mr_fee DESC ;
SQL外部表功能计费规则:一次SQL计算费用=计算输入数据量SQL复杂度0.03元/GB
--分析OTS外部表SQL做业消费 SELECT TO_CHAR(starttime,'yyyymmdd') AS ds ,projectid ,(input_ots/1024/1024/1024)*1*0.03 AS ots_fee FROM maxcomputefee WHERE type = 'ComputationSql' AND TO_CHAR(starttime,'yyyymmdd') >= '20190112' GROUP BY TO_CHAR(starttime,'yyyymmdd') ,projectid ,input_ots ORDER BY ots_fee DESC ; --分析OSS外部表SQL做业消费 SELECT TO_CHAR(starttime,'yyyymmdd') AS ds ,projectid ,(input_oss/1024/1024/1024)*1*0.03 AS ots_fee FROM maxcomputefee WHERE type = 'ComputationSql' AND TO_CHAR(starttime,'yyyymmdd') >= '20190112' GROUP BY TO_CHAR(starttime,'yyyymmdd') ,projectid ,input_oss ORDER BY ots_fee DESC ;
MaxCompute产品消费的增加(暴涨)每每背后都是因为做业量的大幅度提高,要优化本身的费用成本,首选要知道本身SQL等做业中存在什么问题,要优化具体哪个SQL。本文指望可以给予你们一些帮助。更多关于费用成本优化的文章能够详见,云栖社区《帮助企业作好MaxCompute大数据平台成本优化的最佳实践》和《众安保险若是优化本身的MaxCompute费用成本实践》。
原文连接 更多技术干货 请关注阿里云云栖社区微信号 :yunqiinsight