726
技術社區[雲棲]
MaxCompute多團隊協同數據開發項目管理最佳實踐
背景:
之前各種數據開發、數據支持、數據挖掘都在同一個項目中,隨著公司規模的不斷壯大,參與大數據開發的部門(團隊)也越來越多,單項目的弊端慢慢顯現出來:
弊端:
- 權限管理混亂,任務和數據經常被他人修改、覆蓋
- 開發人員眾多,水平參差不齊,任務依賴比較混亂,一旦有任務失敗,會導致多條業務線無法正常產出數據
- 爭搶計算資源,導致重要任務因搶不到資源無法如期完成
- 由於人員眾多數據權限設置不規範,常常都是給多個角色權限的,風險比較高
- 各團隊成本核算問題,無法準確評估各個團隊所占用的資源情況
基於以上的種種弊端,經評估決定引入多個項目,先來個整體架構圖
多項目架構圖:
這樣子各個團隊都有自己的項目,自己管理自己的項目,優點就很明顯
優點
- 通過項目隔離,有效的防止數據和任務被其他團隊修改和刪除等問題
- 除非是pro項目任務出錯,否則不會影響到其他業務線的任務,最大程度降低各業務間的影響
- 針對不同的項目可以配置不同的收費策略:例如mining項目,可能隻有當做數據挖掘的時候會消耗大量的計算資源,而通常可能一周才會訓練一次;因此按量計費會比較劃算,也避免搶占其他項目任務的資源(計量計費說明參看:https://help.aliyun.com/document_detail/27989.html?spm=5176.doc35455.6.557.7aee7V)
- 各個項目的資源獨立計費,每個團隊的資源消耗情況如下圖各個項目所使用情況一目了然
- 各個項目由各自團隊管理,減少項目管理員的工作量,並且可以根據各自團隊的實際情況細分權限
雖然有以上這些優點,但是同時也會帶來其他的不便
缺點
項目間的數據表,資源,udf共享(主要還是讀操作)
解決方案
現在介紹如果解決跨項目帶來的不便:
MaxCompute有個package的概念,現在我就通過命令行的方式向大家介紹如何通過package來解決跨項目的共享問題:**以pro項目中的Table共享給其他項目:BI為例**(其他項目類似)
操作步驟
- 在pro項目中創建1個package (可根據實際情況創建,我這邊是創建3個package:tables_package,functions_package,resources_package) 命令是:
use pro ; create package tables_package;
(以下以tables_package為例,其他的類似) - 往tables_package中添加數據表(function,資源):
add Table ** to package tables_package ;
( add function ** to package function_package ; | add resource ** to package resources_package ;) - 在pro項目中允許其他(BI)項目install package 包:
allow project BI to install package tables_package;
- 在BI項目中,安裝package tables_package 包:
use BI ; install package pro.tables_package ;
- 在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) - 在B項目從查詢tables_package所包含的表、資源、UDF:
desc package pro.tables_package;
- 在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的一個最佳實踐,歡迎有興趣的同學互相交流
最後要感謝阿裏雲的MaxCompute團隊,給我們提供這麼好用的大數據平台,特別要感謝雲郎和海清,求助於他們才得以順利解決跨項目的數據和資源的共享問題.
最後更新:2017-07-06 14:02:16