閱讀726 返回首頁    go 技術社區[雲棲]


MaxCompute多團隊協同數據開發項目管理最佳實踐

背景:

之前各種數據開發、數據支持、數據挖掘都在同一個項目中,隨著公司規模的不斷壯大,參與大數據開發的部門(團隊)也越來越多,單項目的弊端慢慢顯現出來:

弊端:

  • 權限管理混亂,任務和數據經常被他人修改、覆蓋
  • 開發人員眾多,水平參差不齊,任務依賴比較混亂,一旦有任務失敗,會導致多條業務線無法正常產出數據
  • 爭搶計算資源,導致重要任務因搶不到資源無法如期完成
  • 由於人員眾多數據權限設置不規範,常常都是給多個角色權限的,風險比較高
  • 各團隊成本核算問題,無法準確評估各個團隊所占用的資源情況

基於以上的種種弊端,經評估決定引入多個項目,先來個整體架構圖

多項目架構圖:

這樣子各個團隊都有自己的項目,自己管理自己的項目,優點就很明顯

優點

  • 通過項目隔離,有效的防止數據和任務被其他團隊修改和刪除等問題
  • 除非是pro項目任務出錯,否則不會影響到其他業務線的任務,最大程度降低各業務間的影響
  • 針對不同的項目可以配置不同的收費策略:例如mining項目,可能隻有當做數據挖掘的時候會消耗大量的計算資源,而通常可能一周才會訓練一次;因此按量計費會比較劃算,也避免搶占其他項目任務的資源(計量計費說明參看:https://help.aliyun.com/document_detail/27989.html?spm=5176.doc35455.6.557.7aee7V)
  • 各個項目的資源獨立計費,每個團隊的資源消耗情況如下圖各個項目所使用情況一目了然TIM_20170705162725
  • 各個項目由各自團隊管理,減少項目管理員的工作量,並且可以根據各自團隊的實際情況細分權限

雖然有以上這些優點,但是同時也會帶來其他的不便

缺點

項目間的數據表,資源,udf共享(主要還是讀操作)

解決方案

現在介紹如果解決跨項目帶來的不便:

MaxCompute有個package的概念,現在我就通過命令行的方式向大家介紹如何通過package來解決跨項目的共享問題:**以pro項目中的Table共享給其他項目:BI為例**(其他項目類似)

操作步驟

  1. 在pro項目中創建1個package (可根據實際情況創建,我這邊是創建3個package:tables_package,functions_package,resources_package) 命令是: use pro ; create package tables_package; (以下以tables_package為例,其他的類似)
  2. 往tables_package中添加數據表(function,資源): add Table ** to package tables_package ; ( add function ** to package function_package ; | add resource ** to package resources_package ;)
  3. 在pro項目中允許其他(BI)項目install package 包: allow project BI to install package tables_package;
  4. 在BI項目中,安裝package tables_package 包: use BI ; install package pro.tables_package ;
  5. 在BI項目中,授權給用戶或角色:use BI ; grant read on package pro.tables_package to user aliyun$odps_test@aliyun.com; (具體授權可以參考MaxCompute官方幫助文檔:https://help.aliyun.com/document_detail/27935.html?spm=5176.doc27807.2.6.D6aL6R)
  6. 在B項目從查詢tables_package所包含的表、資源、UDF: desc package pro.tables_package;
  7. 在B項目中使用pro項目的表,udf: select pro:udf() from pro.table where **** ; udf調用時項目名加冒號pro:udf(),表調用時項目名加點pro.table.

需要注意的是: 第5項這樣是針對特定的人或角色,我們目前的做法是將pro項目下的表和udf以隻讀的方式共享給其他的項目的所有成員,因此可以通過Policy授權的方式統一授權隻讀權限給B項目下的所有人(policy相關的官方文檔:),方法如下:
use BI; install package pro.tables_package; put policy /tmp/policy.txt;

/tmp/policy.txt內容如下:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "odps:Read",
"Resource": [
"acs:odps:*:projects/BI/packages/pro.functions_package"
]
}
]
}

最後在這提出一點可以**再改進**的地方:

  • 在pro項目中新增表的時候,希望能夠自動add到對應的package裏,免得每新建一張表就得再執行add table *** to package *** ;

以上是我公司在使用MaxCompute的一個最佳實踐,歡迎有興趣的同學互相交流

image

最後要感謝阿裏雲的MaxCompute團隊,給我們提供這麼好用的大數據平台,特別要感謝雲郎和海清,求助於他們才得以順利解決跨項目的數據和資源的共享問題.

最後更新:2017-07-06 14:02:16

  上一篇:go  設計模式學習之路-工廠模式
  下一篇:go  馬雲:大數據時代,最重要的是做最好的自己