ODPS 功能之概述篇
概述
ODPS是阿里雲基於自有的雲計算技術研發一套開放數據處理服務(Open Data Processing Service,簡稱 ODPS),具有TB/PB級數據計算能力,主要用於大數據倉庫、挖掘、分析以及數據分享等場景。 今天阿里內部包括阿里貸款、數據魔方、DMP(阿里媽媽廣告聯盟)、余額寶等多款產品的數據分析都在使用ODPS。
ODPS 整體架構如下圖,
主要分為三層:
接入層:以RESTful API方式提供服務,用戶及數據應用通過Http/Https與接入層建立鏈接上傳數據及提交數據分析作業;
邏輯層:ODPS的核心控制層,負責用戶認證、簽權、作業分發、Meta管理以及存儲計算集群管理;
存儲計算層:數據的存儲及計算作業運行。該層是由多個集群構成,所有集群掛接到ODPS控制層。數據存儲在飛天的盤古上,每個文件分三份存儲。控制層將用戶提交的計算作業調度不同的集群上。
ODPS功能
用戶項目空間-Project
Project是用戶使用ODPS時最先接觸的概念,它類似Oracle的schema或者Mysql中的database。Project 也是ODPS中最基本的資源隔離單位,每個用戶數據及計算任務都隸屬於一個Project。 各Project 之間也可以通過授權建立共享通道,進行數據交換。Project 也是ODPS中的計量單元,收費也是以一個Project為基本單位的。
用戶在使用ODPS之前,需要申請創建一個Project,有了Project之后,用戶就可以上傳數據做數據分析了。
數據處理流程
一般的大數據處理流程分為三部分,如下圖所示:
1. 數據主要來源於在線系統,如業務數據庫Mysql、Oracle,網站的日志文件。 這些數據都可以通過ODPS提供的數據通道功能導入到ODPS中;
2. 數據導入后,可以使用SQL、MR做數據分析,也可以使用流計算對數據進行聚合等操作,還可以使用機器學習算法對數據建模、預測。ODPS提供的是“All in One ”服務,只要數據導入到ODPS后,各種高大尚分析挖掘工具都可以直接拿過來使用,用戶只需要關注在自己的數據業務,根本不需要關於底層是如何工作的;
3. 數據處理完畢后,如果是算法模型,可以使用ODPS的在線預測服務,將模型Push到在線預測系統中進行在線的數據預測。如果是分析結果,可以通過數據通道導回到Mysql 、Oracle中,與業務應用系統對接;
圍繞這樣的一個數據處理流程,ODPS在各個階段提供了不同的功能。
數據存儲
用戶的數據上傳到ODPS后,默認會以結構化的方式存儲到ODPS的表。表隸屬於Project,可以進行分區,有自己的數據類型,如Bigint, Boolean, Double, Datetime, String, Decimal。 數據上傳后,以列壓縮的方式存儲到盤古上。這種壓縮方式的好處就是對於文本類型的數據,一般都能取得較好的壓縮比,一般是4:1,即10G的數據,在ODPS上的size為2.5G。每個文件默認會保存三份。
數據通道
根據數據分析的性質, ODPS提供兩種數據通道-批量數據上傳及實時數據上傳兩種。
批量數據上傳適合大量數據的上傳,批量上傳通道限制每個寫入ODPS的數據塊最大為100G。每次上傳完成后,調用Commit方法,數據即可保存到表中;
實時上傳適合數據流處理的場景,如流計算,每次上傳數據的packet為2M。通過實時通道上傳的數據可以直接使用ODPS Stream SQL 進行流計算,也可以使用數據訂閱接口將數據轉發到第三方的流計算應用中,這個功能就類似於AWS的Kinesis。 通過實時上傳的數據,默認會保存一份到ODPS表中,所以也可以通過實時通道向ODPS實時導入數據;
批量通道提供了上傳和下載的接口,實時通道只提供了上傳的接口,但同時也提供了訂閱接口,允許數據被其它應用所訂閱。
使用可以使用CLT中的數據上傳命令將本地的文本文件上傳至ODPS,也可以使用Java、Python SDK通過編程上傳數據。 同時ODPS也引入了兩個開源社區中日志數據上傳的兩大利器:Flume和Fluentd。用戶可以使用這兩個工具將各種源的數據上傳到ODPS中。今天ODPS的用戶大部分都在通過這兩款工具將Web 日志實時導入到ODPS中做數據分析。
SQL
用戶最熟悉使用SQL對數據分析了。ODPS也支持SQL查詢操作,而且語法類似於Hive 的HQL。SQL操作的主要對象是表,數據量可在T級到P級。SQL中提供的功能有:
DLL:表、列、分區、視圖、生命周期等操作 ;
DML:數據更新、多路輸出以及動態分區輸出 ;
Join:多表關聯分析,支持 inner , left , right full join 以及mapjoin;
窗口函數:支持常見的窗口函數如avg,count 也支持滑動窗口;
UDF: 支持通過Java、Python編寫UDF、UDAF和UDTF;
Stream SQL
通過實時通道上傳的數據,可以直接使用Stream SQL做流計算。 ODPS 的流計算是一種創新的流計算方式,可以通過類SQL的語法就能定義流計算的作業,如:
創建一個流計算的任務,該任務引用stream_in表作為數據源,並且將結果寫入stream_out表中
create streamjob streamjob1 as
insert into stream_out
select count(*)
from stream_in ;
end streamjob;
隨着數據的上傳,在ODPS客戶端窗口中執行若干次
select * from stream_out;
會發現有一系列逐漸累積增長的匯總數據。
Stream SQL 支持單流計算、多流Join、同時還支持流與維表的Join,並提供了聚合、排序及子查詢的功能。
MapReduce
ODPS提供了MapReduce的編程接口。用戶在處理數據時,如果SQL滿足不了要求,可以使用MapReduce。
MapReduce處理數據過程主要分成2個階段:Map階段和Reduce階段。首先執行Map階段,再執行Reduce階段。Map和Reduce的處理邏輯由用戶自定義實現, 但要符合MapReduce框架的約定。
• 在正式執行Map前,需要將輸入數據進行”分片”。所謂分片,就是將輸入數據切分為大小相等的數據塊,每一塊作為單個Map Worker的輸入被處理, 以便於多個Map Worker同時工作。
• 分片完畢后,多個Map Worker就可以同時工作了。每個Map Worker在讀入各自的數據后,進行計算處理,最終輸出給Reduce。Map Worker在輸出數據時, 需要為每一條輸出數據指定一個Key。這個Key值決定了這條數據將會被發送給哪一個Reduce Worker。Key值和Reduce Worker是多對一的關系, 具有相同Key的數據會被發送給同一個Reduce Worker,單個Reduce Worker有可能會接收到多個Key值的數據。
• 在進入Reduce階段之前,MapReduce框架會對數據按照Key值排序,使得具有相同Key的數據彼此相鄰。如果用戶指定了”合並操作”(Combiner), 框架會調用Combiner,將具有相同Key的數據進行聚合。Combiner的邏輯可以由用戶自定義實現。與經典的MapReduce框架協議不同,在ODPS中, Combiner的輸入、輸出的參數必須與Reduce保持一致。這部分的處理通常也叫做”洗牌”(Shuffle)。
• 接下來進入Reduce階段。相同的Key的數據會到達同一個Reduce Worker。同一個Reduce Worker會接收來自多個Map Worker的數據。 每個Reduce Worker會對Key相同的多個數據進行Reduce操作。最后,一個Key的多條數據經過Reduce的作用后,將變成了一個值。
由於目前ODPS MR只能處理ODPS中表里的數據,與Hadoop MR相比,不同的地方就在Map和Reduce 的聲明上,如下:
ODPS MR的輸入數據是表的Record,可以通過Record對象來獲取每列的值,如:
ODPS對用戶提供了JAVA的MR編程接口,同時還可以使用開源的Eclipse 開源插件在本地編寫、調度MR程序,成功后再部署到ODPS上運行。
圖模型-Graph
ODPS 提供了類似Google Pregel的圖編程模型。 用戶可以用來編寫滿足聚類、Pagerank以及求最短路徑這樣場景的算法。
ODPS GRAPH能夠處理的圖必須是是一個由點(Vertex)和邊(Edge)組成的有向圖。由於ODPS僅提供二維表的存儲結構, 因此需要用戶自行將圖數據分解為二維表格式存儲在ODPS中,在進行圖計算分析時, 使用自定義的GraphLoader將二維表數據轉換為ODPS Graph引擎中的點和邊。
點的結構可以簡單表示為 < ID, Value, Halted, Edges >,分別表示點標識符(ID),權值(Value),狀態(Halted, 表示是否要停止迭代), 出邊集合(Edges,以該點為起始點的所有邊列表)。邊的結構可以簡單表示為<DestVertexID, Value >,分別表示目標點(DestVertexID)和權值(Value)。如下圖所示:
典型的Graph 程序邏輯包括三步:
1. 加載圖:通過自定義的GraphLoader將數據解析為點或邊,並對數據分片,分配到相應的Worker上;
2. 迭代計算:遍歷所有非結束狀態的點或收到消息的點,並調用其Compute方法進行計算;
3. 迭代終止:所有點處於結束或達到最大迭代次數后,程序終止;
機器學習平台 DT PAI
DT PAI是阿里巴巴推出的基於雲計算的機器學習平台。在這個平台上,用戶可以使用多種算法及在線預測服務。
DT PAI的功能包括
- 與ODPS完美集成,基於Project級別數據訪問;
- 提供特征工程工具,如基本統計、拆分、隨機采樣、歸一化等 ;
- 提供部分數據統計工具模塊,如全表統計、直方圖、百分位等;
- 提供多種機器學習算法,包括邏輯回歸、隨機森林、SVM、朴素貝葉斯、GBDT回歸以及聚類算法等;
- 提供標准的模型評估方法,如ROC、混淆矩陣、AUC;
- 提供離線預測,將預測數據導入到ODPS表中,通過模型預測完成后,直接輸出到結果表中;
- 提供在線預測,通過將Offline Model發布到Online Model 服務中,即可以使用API使用實時在線預測服務;
- 提供PAI 命令, 基於ODPS CLT運行所有算法;
- 通過PAI Web 控制台輕松搭建算法實驗,PAI Web 如下:
安全
大家在使用ODPS的時候,最關心的就是自己的數據放到ODPS是否安全,是否會被泄露。 ODPS 支持多租戶的使用場景,滿足不同用戶在ODPS中獨立、協同、共享等不同數據操作的需求,可以說ODPS的安全機制是ODPS能在對外服務核心。
ODPS的安全由如下功能構成:
- 訪問ODPS的用戶必須在阿里雲官網上進行注冊,在使用ODPS的時候,都需要進一步認證;
- 用戶在訪問ODPS Project中每個對象時都需要授權,用戶在讀取數據或執行作業時都會被檢查權限;
- ODPS中支持ACL授權,允許管理者使用Grant、Revoke等命令對用戶、角色進行管理;
- ODPS中還支持Policy授權,允許Project Owner使用JSON格式的描述語言對主體(訪問者)、資源(訪問對象)、操作三者之前通過訪問限制及效力策略進行管理、控制;
- ODPS還支持Package方式授權。將Project A中的對象打到Package中,然后安裝到Package B,滿足跨Project B訪問A中數據的需求;
- ODPS中的Project 還有保護模型,即數據只能在本Project中計算,不允許導到本地或導到其他project輸出,但可以通過白名單導出;
- ODPS中所有計算是在受限的沙箱中運行的,多層次的應用沙箱,從KVM級到Kernel級。系統沙箱配合鑒權管理機制,用來保證數據的安全;