天天看點

MaxCompute如何實作跨項目授權

實際的企業使用場景裡,可能需要把不同項目裡的資料、函數、計算資源等一起使用。那如何實作這種跨項目的使用呢,本文用實際例子來說明下。

項目空間:grant_from,需要授權的資料、函數、資源都在這個項目裡

項目空間:grant_to,被授權的使用者需要在這個項目裡執行計算。

使用者:[email protected],grant_from項目的project owner,後續的授權操作是這個賬号執行的。

使用者:[email protected]:chuanxue2,通過在大資料開發套件裡授權了grant_to項目的開發角色,現在在使用grant_to項目進行計算的時候,需要用到grant_from項目裡的資料、函數和資源。

表:dual,在grant_from和grant_to裡都有的一張表,裡面就一條資料,用于測試udf用的。

表:grant_from.wc_in,grant_from項目裡的一張表。需要授權給[email protected]:chuanxue2,讓他在grant_to裡做計算的時候也能用到。

函數:getpersonname,在grant_from裡的待授權函數

資源resource_file.txt、和其他一些jar包是在grant_from裡的資源檔案。

需要添加使用者并做表對賬号的授權。授權後被授權賬号可以跨項目引用。

可以在sql裡,使用projectname.tablename使用這張表,比如

而在mapreduce/graph裡,就以mapreduce為例,可以把代碼寫成

其他的一切使用方法都和使用本項目内的表的用法一樣,這裡不再贅言。

比如grant_from裡有個解析json字元串的内容的一個udf,現在希望讓[email protected]:chuanxue2在grant_to裡也能用起來。

先看看這個udf,[email protected]在grant_from裡是怎麼用的:

授權之前,需要确定這個函數都涉及了什麼資源檔案

是以授權的步驟包括:

被授權後, [email protected]:chuanxue2就可以在grant_to這個項目裡使用到被授權的函數了。通過projectname:functionname可以很友善的引用這個函數。

需要資源的授權的場景比較少。不過比如說剛才的那個函數,也可以隻把資源授權給對方,讓對方自己建立一個函數。

資源檔案的授權和前面函數的授權方式一樣,不再重複,建立函數的方法和調用可以參考:

而在mapreduce裡引用其他項目的jar包,也是一樣。先在grant_from裡做授權

授權結束後,[email protected]:chuanxue2就可以在grant_to裡使用這個jar包

在指令行裡的調用方式是:

在代碼裡,還是用

也就是說,是在jar指令裡告知任務使用的資源是來自其他項目的,到了mapreduce的java代碼裡,所有的用法照舊,不需要特别指定資源的項目。