ODPS

ODPS 功能之概述篇

概述算法

ODPS是阿里雲基於自有的雲計算技術研發一套開放數據處理服務(Open Data Processing Service,簡稱 ODPS),具備TB/PB級數據計算能力,主要用於大數據倉庫、挖掘、分析以及數據分享等場景。 今天阿里內部包括阿里貸款、數據魔方、DMP(阿里媽媽廣告聯盟)、餘額寶等多款產品的數據分析都在使用ODPS。sql

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級。系統沙箱配合鑑權管理機制,用來保證數據的安全;
相關文章
相關標籤/搜索