日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

精打细算使用MaxCompute搭建数仓

發(fā)布時間:2024/8/23 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 精打细算使用MaxCompute搭建数仓 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

摘要: MaxCompute是一套阿里自主研發(fā)的數(shù)據(jù)倉庫解決方案。產(chǎn)品除了功能、性能、簡單等優(yōu)勢外,還能在費(fèi)用上節(jié)省下一大筆前。墨跡天氣使用MaxCompute,除了性能和穩(wěn)定性也有提升外,整體存儲和計算的費(fèi)用比之前節(jié)省70%。這是如何做到的呢,這里有一些常用的規(guī)則。

原文鏈接:http://click.aliyun.com/m/43695/

MaxCompute是一套阿里自主研發(fā)的數(shù)據(jù)倉庫解決方案。產(chǎn)品除了功能、性能、簡單等優(yōu)勢外,還能在費(fèi)用上節(jié)省下一大筆前。墨跡天氣使用MaxCompute,除了性能和穩(wěn)定性也有提升外,整體存儲和計算的費(fèi)用比之前節(jié)省70%。這是如何做到的呢,這里有一些常用的規(guī)則。

在討論如何做到之前,我們先看下MaxCompute是如何計費(fèi)的。根據(jù)目前的文檔,目前的計費(fèi)方式包含數(shù)據(jù)的存儲、數(shù)據(jù)的下載以及計算費(fèi)用。其中計算費(fèi)用又分I/O后付費(fèi)和預(yù)付費(fèi)兩種收費(fèi)模式。I/O后付費(fèi)根據(jù)實(shí)際的計算來進(jìn)行收費(fèi);而預(yù)付費(fèi)相當(dāng)于包了幾個CU只有購買者可以使用,這幾個CU上隨便怎么計算都不會產(chǎn)生計算費(fèi)用。所以如何減少費(fèi)用,也就是轉(zhuǎn)換成如何減少存儲的費(fèi)用、如何減少下載的費(fèi)用以及如何減少計算的費(fèi)用。

存儲

數(shù)據(jù)存儲在MaxCompute上是使用列式存儲并有壓縮的,底層數(shù)據(jù)存儲方式不需要用戶自己維護(hù)。但是用戶可以通過減少存儲在MaxCompute上的數(shù)據(jù)量來減少存儲的費(fèi)用。可以通過及時刪除不需要的數(shù)據(jù)來減少存儲費(fèi)用。這里需要推薦用一個叫生命周期(lifecycle)的功能來定時回收過期的數(shù)據(jù)。設(shè)置了生命周期后,如果是分區(qū)表,分區(qū)表里的某個分區(qū)如果在指定的時間內(nèi)數(shù)據(jù)沒發(fā)生變更,系統(tǒng)會認(rèn)為這個分區(qū)已經(jīng)不需要了,會自動刪除這個分區(qū)。如果是非分區(qū)表的話,指定的時間內(nèi)沒有數(shù)據(jù)變化就會刪除這整張表。這個功能可以用來配置到一些歷史記錄表上,比如說如果不想要一年之前的歷史記錄,可以把表根據(jù)寫入時間做分區(qū),然后設(shè)置生命周期為一年。數(shù)據(jù)寫入的時候,每天數(shù)據(jù)只寫入到當(dāng)天的那個分區(qū)里。一年后,之前的數(shù)據(jù)因為一整年都沒有數(shù)據(jù)寫入,觸發(fā)生命周期的條件,并后臺定時作業(yè)刪除對應(yīng)的分區(qū)里的數(shù)據(jù)。

在實(shí)際使用中,除了因為沒及時刪除過期不要的歷史記錄造成的額外的存儲費(fèi)用外,更多的是因為對數(shù)據(jù)的管理不到位導(dǎo)致的一些不需要的表一直沒刪除導(dǎo)致的空間占用。仔細(xì)想想,在做查詢的時候使用Create table xx as select先存了一些臨時表,用好沒刪除一直放著占用從存儲空間,這種事情應(yīng)該每個人都做過一些。但是如果你真的要去找找哪些數(shù)據(jù)需要刪除,哪些數(shù)據(jù)是業(yè)務(wù)數(shù)據(jù)不能動的時候,對著list tables;出來的幾百幾千張表也是很無從下手吧。對數(shù)據(jù)倉庫做好分層,做好命名規(guī)范,對于每一層根據(jù)使用需要配置不同的生命周期回收策略,用一個好的數(shù)據(jù)管理來保證數(shù)據(jù)倉庫的表的有序存儲,不僅能節(jié)省一筆存儲的錢,也能在實(shí)際使用的時候,快速找到需要的表,便于數(shù)據(jù)的管理和使用。而如果有一些計算過程產(chǎn)生的臨時表,后續(xù)又確定用不到的,可以在計算結(jié)束及時刪除。具體可以參考祎休寫的基于阿里云數(shù)加的企業(yè)大數(shù)據(jù)倉庫架構(gòu)建設(shè)思路有比較詳細(xì)的說明。

下載

下載數(shù)據(jù)并非全部都會收費(fèi)的,有一些情況下數(shù)據(jù)下載也不會產(chǎn)生費(fèi)用。合理利用這些規(guī)則,選擇正確的下載方式就能減少下載的費(fèi)用(而且下載不收費(fèi)的方式也正好是下載最快的方式)。具體的規(guī)則可以參考文檔。

另外下載的費(fèi)用,還和下載的文件的大小有關(guān)系。通過合理的表結(jié)構(gòu)設(shè)置和數(shù)據(jù)生成方式,把每次需要下載的數(shù)據(jù)放到一張表(或一個分區(qū))里,減少下載量也是減少費(fèi)用的一種策略。比如說需要下載3年級的學(xué)生信息的時候,下載全部的學(xué)生信息后再執(zhí)行過濾,肯定比不過先根據(jù)年級對學(xué)生進(jìn)行分區(qū),然后只下載3年級的分區(qū)來的方法好。

計算

計算里需要注意的相對會多一些。不過我們還是先看看計算的費(fèi)用和什么有關(guān)。先說I/O后付費(fèi),現(xiàn)在暫時還只是收取了SQL的費(fèi)用,所以本文也只講SQL的部分。看到SQL的費(fèi)用是根據(jù)輸入的數(shù)據(jù)量和SQL的算法復(fù)雜度有關(guān)的。

計算引擎在計算的時候,合理設(shè)置表的分區(qū)字段可以減少數(shù)據(jù)的輸入量。關(guān)于分區(qū)可以參考這里。計算引擎在做執(zhí)行計劃解析的時候,如果發(fā)現(xiàn)查詢過濾條件是用分區(qū)字段做過濾的時候,可以只讀計算涉及的分區(qū)的數(shù)據(jù),從而減少輸入的數(shù)據(jù)量。

除了減少輸入的數(shù)據(jù)量,減少計算復(fù)雜度也是一種方法。算法復(fù)雜度的優(yōu)化一般涉及到代碼層面的優(yōu)化,而且有時候需要和業(yè)務(wù)結(jié)合起來。比如前面已經(jīng)有過一些數(shù)據(jù)預(yù)處理知道本次計算的數(shù)據(jù)某個字段沒有重復(fù),那這次計算的時候就可以少加一次distinct或者group by。通過代碼層面結(jié)合業(yè)務(wù)邏輯,一起優(yōu)化SQL語句減少計算的復(fù)雜度,是減少計算費(fèi)用的一種方法。

另外減少計算的次數(shù)也是一種方法。比如某幾個計算都需要用到某個實(shí)時表的數(shù)據(jù),而且都是在某種過濾和匯總之后的再加工,那完全可以把中間可以復(fù)用的計算過程保存下來,在數(shù)據(jù)倉庫上做適量的輕度匯總甚至高度匯總。后續(xù)的計算可以拿匯總數(shù)據(jù)再做進(jìn)一步的計算。這樣雖然中間多存了一些數(shù)據(jù),但是后續(xù)的計算的時候可以少算一些邏輯。這是數(shù)據(jù)倉庫里經(jīng)常用到的空間換時間的方法。配合之前提到的生命周期,可以用最小的存儲費(fèi)用的代價獲得最大的計算費(fèi)用的減少。當(dāng)然合理利用這種方法,除了可以減少計算費(fèi)用外,因為減少重復(fù)計算,也可以減少計算的時間提高效率。

除了以上提到的這些,也可以考慮后付費(fèi)的方式來跑計算,也就是計算費(fèi)用是包年包月的。一般來說,滿足以下條件可以考慮使用后付費(fèi)

任務(wù)大部分是周期任務(wù),任務(wù)量比較均勻。如果任務(wù)以偶發(fā)性的臨時查詢?yōu)橹骺赡懿缓线m用后付費(fèi)
任務(wù)的提交事件比較分散,如果都集中在某個時間點(diǎn)一起算的,也不太合適
經(jīng)過一段時間的試運(yùn)行,任務(wù)數(shù)量已經(jīng)基本可以估計,不會短期內(nèi)有比較的明顯的增加或者減少
如果不滿足這些 條件,者很容易出現(xiàn)在高峰期購買的CU不夠用,任務(wù)出現(xiàn)排隊;低谷的時候資源又利用不起來,造成浪費(fèi)。

其他

關(guān)于費(fèi)用,其實(shí)還有兩個非常關(guān)鍵的問題

1.我每天都花了多少錢,如何優(yōu)化?
可以參考這里,看看每天的賬單,通過檢查里面的計算、存儲和下載分別產(chǎn)生了多少費(fèi)用。從而從對應(yīng)的角度去做優(yōu)化。另外也可以在表格里做金額的排序,看看金額最高的幾筆費(fèi)用是什么費(fèi)用,看看能否針對性做一些優(yōu)化。

2.我這個SQL提交后會產(chǎn)生多少費(fèi)用?
如果產(chǎn)生的費(fèi)用都不清楚,那提交一個SQL時心里是沒底的。在大數(shù)據(jù)開發(fā)套件的數(shù)據(jù)開發(fā)里,跑SQL會跳出消費(fèi)提醒,從而提前知道提交后會產(chǎn)生的費(fèi)用。如果發(fā)現(xiàn)金額特別高,可以考慮先做一些優(yōu)化后再提交以免產(chǎn)生不必要的費(fèi)用。如果是直接在MaxCompute客戶端里跑SQL的話,可以用cost sql ;估算SQL的費(fèi)用。

識別以下二維碼,干貨

總結(jié)

以上是生活随笔為你收集整理的精打细算使用MaxCompute搭建数仓的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。