MLSQL 1.3.0開發版中最新三個MPIPs--排程,資源,快取
什麼是MPIP
MPIP 是新Feature提案。全稱 MLSQL Project Improvement Proposals 。當然這個是學習Spark 的 SPIP,作為一個較為穩定成熟的專案,後續增加較大的功能特性會比較慎重,所以需要通過Improvement Proposals的方式來進行規範化,以後也方便回顧。
1.3.0開發版最新的三個MPIPs
在MLSQL 1.3.0 開發版中,我們根據實際場景需求,提出了三個MPIPs:
其中,1,3已經完成了部分功能,並且合併進了TRY分支。大家可以通過比如名字MPIP-1031找到對應功能分支,看看開發的過程。
MPIP-1031 表快取功能
MLSQL社群開發的一位同學打趣的說,在批,流,機器學習三大塊,MLSQL已經覆蓋批常規99%的功能了,但其實還遠遠沒達到。 Spark有一個很酷的功能,就是cache,允許你把計算結果分散式快取起來,但存在需要手動釋放的問題。MLSQL認為要解決這個問題,需要將快取的生命週期進行劃分:
- script
- session
- application
預設快取的生命週期是script。隨著業務複雜度提高,一個指令碼其實會比較複雜,在指令碼中我們存在反覆使用原始表或者中間表臨時表的情況,這個時候我們可以通過cache實現原始表被快取,中間表只需計算一次,然後指令碼一旦執行完畢,就會自動釋放。使用方式也極度簡單:
select 1 as a as table1; !cache table1 script; select * from table1 as output;
session級別暫時還沒有實現。applicaton級別則是和MLSQL Engine的生命週期保持一致。需要手動釋放:
!uncache table1;
表快取功能極大的方便了使用者使用cache。對於記憶體無法放下的資料,系統會自動將多出來的部分快取到磁碟。
MPIP-1045 內建定時任務
內建定時任務是完善MLSQL Stack的一個重要環節。為使用者提供一個更完整的服務。我們依然讓這個工作MLSQL Style, 使用方式簡單,比如:
!crontab */5 * * * * self; ---you script content select * from hive1 as hiveTable2; save......
我們也期待未來能夠加上指令碼依賴的支援。
MPIP-1047 資源動態調整
當你在實際的生產環境使用MLSQL Stack之後,大量的MLSQL Engine會因為各種場景被部署: 有共分析師,業務探索使用的,有供作為API使用的,有做ETL引擎使用的,有做流使用的,有做機器學習平臺使用的,這對服務提供方帶來了大量的資源壓力。比如業務探索類的,典型的上班時間資源需求大,下班時間基本上沒怎麼有人用,ETL則是反之,API也有一定方位。而且業務探索類的其實對響應有一定的實時需求,比如一個複雜的指令碼使用者期待10s內返回,如果使用Spark 的DRA反覆的資源釋放和申請,可能臨時申請資源的時間就已經超過10s,更不用提計算了。 這個時候我們更希望的是通過統計分析,自己制定一個資源調整策略,從而節省系統資源,減輕壓力。MLSQL 為此提出這個MPIP,管理員只要通過簡單的兩個三個命令就可以新增或者刪除CPU/記憶體資源。
!resource add 10c; !resource remove 10c; !resource set 40c;
第一個表示給當前正在執行的MLSQL Engine新增10個核,第二個表示減少10核,第三個則表示將當前的MLSQL Engine的資源設定為40核。
那麼記憶體呢?記憶體會根據啟動時配置的CPU和記憶體的比例,進行相應的增加或者刪減。比如我們啟動時,CPU和記憶體為1:4,那麼我們新增10c,相應的,系統會自動增加40G的記憶體。
有了這個功能後,我們完全可以開發一個資源控制策略,對於探索類應用,每天上班時,自動增加資源,下班時剔除資源,使用者也可以主動向管理員臨時申請更多資源,實現真正的彈性,整個過程無需重啟。
總結
MLSQL 會越來越多的考慮使用者場景來提供更多功能。