天天看點

ODPS基本概念

什麼是ODPS?

開發資料處理服務(Open Data Processing Service,簡稱ODPS),2016年後更名MaxComputer。ODPS是一種由阿裡雲自主研發,針對TB/PB級資料、實時性要求不高的分布式處理服務。主要服務于批量結構化資料的存儲和計算,可以提供海量資料倉庫的解決方案以及針對大資料的分析模組化服務。

ODPS的組成對象

項目空間(Project)

項目空間是MaxComputer 的基本組織單元,它類似于傳統資料庫中的Database或者Schema的概念,是進行多使用者隔離和通路控制的主要邊界。一個使用者可以同時擁有多個項目空間的權限。通過安全授權,可以在一個項目空間中通路另一個項目空間中的對象。

ODPS的組成對象

項目空間(Project)

項目空間是MaxComputer 的基本組織單元,它類似于傳統資料庫中的Database或者Schema的概念,是進行多使用者隔離和通路控制的主要邊界。一個使用者可以同時擁有多個項目空間的權限。通過安全授權,可以在一個項目空間中通路另一個項目空間中的對象。

表(Table)

表是MaxCompute的資料存儲單元。它在邏輯上也是由行和列組成的二維結構,每行代表一條記錄,每清單示相同資料類型的一個字段,一條記錄可以包含一個或者多個列,各個列的名稱和類型構成這張表的Schema。

MaxComputer的表格分為兩種類型:外部表及内部表。

内部表的所有資料都被存儲在MaxComputer中。表中的列可以是MaxCompute支援的任意資料類型(Bigint、Double、String、 Boolean和Datetime)。MaxCompute中的各種類型計算任務(輸入、輸出)的操作對象都是表。使用者可以建立、删除表以及向表中導入資料。

對于外部表,MaxCompute并不真正持有資料,表格的資料可以存放在OSS中。MaxCompute僅會記錄表格中的Meta資訊。使用者可以通過MaxCompute的外部表機制處理OSS上的非結構化資料,例如:視訊、音頻、基因、氣象、地理資訊等。其主要流程包括:

  1. 将資料上傳至OSS;
  2. 在RAM産品中授予MaxCompute服務讀取OSS資料權限。
  3. 自定義Extractor:使用者讀取OSS上特殊格式資料。目前,MaxCompute預設提供CSV格式的Extractor,并提供視訊格式資料讀取的代碼樣例。
  4. 建立外部表;
  5. 執行SQL作業分析資料;

    注意:目前MaxCompute僅支援讀取外部資料,即讀取OSS資料,不支援向外部寫入資料;

分區(Partition)

分區表指的是在建立表時指定的分區空間,即指定表内的某幾個字段作為分區列。大多數情況下,使用者可以将分區類比為檔案系統下的目錄。MaxCompute将分區列每一個值作分區(目錄)。使用者可以指定多級分區,即将表的多個字段作為表的分區,分區之間正如多級目錄的關系。在使用資料時如果指定了需要通路的分區名稱,則隻會讀取相應的分區,避免掃描全表,提高處理效率,降低費用。

create table src (key string, value bigint) partitioned by (pt string);      

目前,MaxCompute僅承諾String分區。且目前最多支援六級分區

自定義函數(User Defined Functuon,簡稱UDF)

MaxCompute為使用者提供了SQL計算功能,使用者可以在MaxCompute SQL中使用系統的内建函數完成一定的計算和計數功能。但是當内建函數無法滿足要求時,使用者可以使用MaxCompute提供的Java程式設計接口開發自定義函數UDF,UDF又可以進一步分為标量值函數UDF、自定義聚合函數UDAF和自定義表值函數UDTF三種。

ODPS基本概念
資源(Resource)

資源是MaxCompute的特有概念。使用者如果想使用MaxCompute的自定義函數(UDF)或者MapReduce功能需要依賴資源來完成。

例如使用者在編寫好UDF後,需要将編譯好的jar包以資源的形式上傳到ODPS。運作這個UDF時,MaxCompute會自動下載下傳這個Jar包,擷取使用者代碼,運作UDF而無需使用者幹預。上傳Jar包的過程就是在MaxCompute上建立資源的過程。

任務(Task)和作業(Job)

任務是ODPS的基本計數單元。SQL以及MapReduce功能都是通過任務完成的。

對于使用者送出的大多數任務,特别是計算型任務,MaxCompute會将其進行解析,得出任務的執行計劃。執行計劃是由具有依賴關系的多個執行階段(Stage)構成的。目前,執行計劃邏輯上可以被看作一個有向圖,圖中的點是各個執行階段,邊是各個執行階段之間的依賴關系。在同一個執行階段内,會有多個程序,也稱之為Worker,共同完成該執行階段的計算工作。同一個執行階段内的不同Worker之間隻是處理的資料不同,執行邏輯完成相同。

作業(Job)是由一個或者多個Task以及表示其執行次序關系的工作流(Workflow),工作流是個有向無環圖。當一個作業被送出到系統中執行時,該作業就會擁有一個作業執行個體(Instance)。另一方面,部分MaxCompute任務并不是計算型任務。例如DDL SQL語句,這些任務本質上隻需要讀取修改MaxCompute的中繼資料,是以這些任務不能被解析出執行計劃。

ODPS基本概念
工作流

工作流是一個DAG圖(有向無環圖),其描述了作業中多個節點之間的邏輯(依賴關系)和規則(運作限制)。

節點

節點屬于工作流的子對象,也稱為任務,是大資料開發平台資料處理和分析過程最基本單元,每個任務對應DAG圖中的一個節點,其可以是一個SQL Query、指令和MapReduce程式。

依賴關系

依賴關系是描述兩個或多個節點/工作流之間的語義連接配接關系,其中上遊節點/工作流運作可以影響下流節點/工作流的運作狀态,反之則不成立。

執行個體

在阿裡與大資料開發平台中,節點任務在執行時會被執行個體化,并以ODPS執行個體的方式存在。執行個體會經曆未運作、等待時間/等待資源、運作中、成功/失敗幾個狀态。

ODPS的基礎構架

MaxCompute構架分為四層,分别是用戶端、接入層、邏輯層和計算層:

ODPS基本概念

【用戶端】

ODPS以RESTful API方式對外提供服務,使用者可以通過不同的方式來使用ODPS的服務,包括直接通過RESTful API請求通路、ODPS SDK、ODPS CLT(Command Line Tool)、Java內建開發環境和管理控制台等。

ODPS基本概念

【接入層】

ODPS基本概念

【邏輯層】

邏輯層又稱為控制層,是ODPS的核心部分。可以認為是ODPS的大腦,負責項目空間、對象管理、授權管理、指令解析、中繼資料五部分。

ODPS基本概念
ODPS基本概念
請求處理器(Worker)

負責處理所有RESTful請求,本地處理一些作業,送出分布式作業給排程器。

本地能處理的作業包括:使用者空間、表、資源、任務等的管理。

需要送出給排程器的作業包括:SQL、MR等分布式計算的任務。

ODPS基本概念
排程器(Scheduler)

排程器負責Instance排程以及查詢計算叢集的資源情況。

處理Instance的任務包括:

維護一個Instance清單。
把Instance分解成Task
生成Task的工作流(DAG 圖)
把可運作的Task放到TaskPool中
定時對該優先級隊列進行排序。      
ODPS基本概念
作業執行管理器(Executor)

負責向TaskPool申請Task,生成任務描述檔案送出給計算層,監控并回報狀态給排程器。

作業執行器的運作細節:

判斷自身資源是否充足。

主動輪詢TaskPool,請求下一個Task,生成計算層的分布式作業描述檔案,送出給計算層。

監控這些任務的運作狀态,定時把狀态彙報給排程器。

ODPS基本概念

【計算層】

計算層開始真正執行計算任務。

ODPS基本概念

Pangu(盤古)檔案系統存儲檔案的格式如下:

ODPS基本概念
ODPS基本概念

一條ODPS SQL的執行

ODPS基本概念
ODPS基本概念
ODPS基本概念

權限管理

角色隔離

組織管理者

指組織的管理者,可建立計算引擎、建立項目空間、建立排程資源、添加組織成員、為組織成員賦予組織管理者角色、配置資料類目等。

項目管理者

指項目空間的管理者,可針對項目空間基本屬性、資料源、目前項目空間計算引擎配置和項目成員進行管理。并為組織成員賦予項目管理者、開發、運維、部署、訪客角色。

開發

開發角色使用者能夠建立工作流、腳本檔案、資源UDF、建立表,同時可以建立釋出包,但不能執行釋出操作。

運維

項目空間但運維人員,由項目管理者/項目所有者配置設定運維權限;擁有釋出及線上運維的操作權限,但無資料開發的操作權限。

部署

部署角色與運維角色相似,但是其沒有線上運維操作權限。

訪客

訪客角色的使用者隻具備檢視權限,而無權限進行編輯工作流和代碼等。

角色管理

角色(role)是一組通路權限的集合。

Owner:當一個使用者建立了一個項目,他便自動成為該項目的Owner。任何沒有被項目的Owner授權的人都無法通路該項目。

如果Alice建立了一個項目WonderLand,然後她要授權Bob通路該項目的一些對象,那麼:

首先,Bob要有一個合法的雲賬号。

其次,Alice要把Bob的雲賬号加到項目中來。

最後,賦予一些對象的權限給Bob。

當Alice要禁止Bob通路該項目時,則直接将其雲賬号從項目中移除即可,前提是Bob沒有被賦予任何角色。

值得注意的是,Bob雖然被移除來項目,但他之前被授予但權限仍保留在項目中。一旦被Alice再次加入該項目,原有權限會被自動激活。

預設角色(Admin):擁有該角色權限的使用者,可以通路項目空間中所有對象,不能設定項目空間的安全配置和修改項目空間的鑒權模型;能進行使用者與角色管理,但是不能修改将Admin角色的權限或将Admin角色賦給别的使用者,隻能删除沒有被使用的角色。

授權

授權有主體(Subject)、客體(Object)和操作(Action)三要素。

授權有ACL(基于對象的授權)和Policy(基于政策的授權)兩種方法。

ODPS基本概念
檢視權限
【檢視目前使用者的權限】
show grants;
【檢視指定使用者的權限】
show grants for <username>;
【檢視指定角色的權限】
describe role <rolename>;
【檢視指定對象的授權】
show acl for <objectName>[on type <objecttype>];      
ACL授權的文法
GRANT <privileges> ON <object> TO <subject>;
REVOKE <privileges> ON <object> FROM <subject>;      
資料保護機制

設定ProjectProtection:資料隻能流入,不能流出。預設時,ProjectProtection不能被設定,需要手工開啟。

ProjectProtection=true      

如何在項目保護狀态下,進行合規的資料流出操作。

辦法1:在設定項目保護(ProjectProtection)的同時,附加一個例外政策(exception)

set ProjectProtection=true exception <policyFile>;      

辦法2:将兩個相關的項目空間設定為互信(TrustedProject),則資料的流向将不會被視為違規。

add trustedproject=SecretGarden;      
項目空間的鑒權模型

ODPS支援多種正交的授權機制,使用者可通過設定下列參數來定制項目空間的鑒權模型。

security.CheckPermissionUsingACL --> 激活/當機ACL授權機制,預設為True
security.CheckPermissionUsingPolicy --> 激活/當機Policy授權機制,預設為True
security.ObjectCreatorHasAccessPermission -->允許/禁止對象建立者預設擁有通路權限,預設為True。
security.ObjectCreatorHasGrantPermission --> 允許/禁止對象建立者預設擁有授權權限,預設為True。
security.LabelSecurity --> 開啟/關閉LabelSecurity安全政策,預設為False。
ProjectProtection -->開啟,關閉項目的資料空間保護機制,預設為False。      
【檢視目前鑒權模型】
show SecurityConfiguration;      
資料的敏感等級分類

Project Owner需要定義明确的資料敏感等級和通路許可等級劃分标準,預設時所有使用者的通路許可等級為0級,資料安全預設等級預設為0級。

LabelSecurity對敏感資料的粒度可以支援列級别,管理者可以對表的任何列設定敏感度标記(Label),一張表可以由不同等級的敏感資料列所組成。

LabelSecurity基本操作

【打開LabelSecurity安全機制開關】
set security.LabelSecurity=<true|false>;
【設定使用者安全許可标簽】
set label<number> to user<username>;
【設定資料敏感等級标簽】
set label<number> to table <tablename[(column_list)]>;
【顯示授權低級别使用者通路高敏感資料】
grant label <number> on table <tablename>[(column_list)] to user <username>[with exp <days>];
【撤銷顯示授權】
revoke label on table <tablename>[(column_list)] from user<username>;
【清洗過期的顯示授權】
clear expired grants;
【檢視一個使用者能通路哪些敏感資料級】
show label[<level>] grants [for user <username>];
【檢視一個敏感資料表能被哪些使用者通路】
show label [<level>] grants on table <tablename>;
【使用者對指定表上列級别的Label授權】
show label [<level>] grants on table <tablename> for user <username>;
【包安裝者對包中敏感資源許可通路級别】
allow project <pjname> to install package <pkname>[using label <n>];      

1.LabelSecurity安全機制開關必須由owner打開,admin角色沒有此權限。

2.使用者的安全許可标簽和檔案敏感等級取值均為0到9,兩者互相對應。

3.顯示設定的列的敏感等級優先級高于表的敏感等級,和順序、等級高低無關。

4.設定包時,若省略[using label<number>],則預設級别為0級,即隻可以通路非敏感資料。

5.跨項目通路敏感資料時,包安裝者的項目空間中的所有使用者都将使用此許可的通路級别。

set label 1 to label t1;
set label 2 to table t1(id,name);
set label 3 to table t1;