阿里雲大計算服務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