趙玲玲, 劉 杰, 王 偉(中國科學院大學, 北京 0090)(中國科學院軟件研究所, 北京 0090)
基于Spark的流程化機器學習分析方法①
趙玲玲1,2, 劉 杰2, 王 偉21(中國科學院大學, 北京 100190)2(中國科學院軟件研究所, 北京 100190)
Spark通過使用內(nèi)存分布數(shù)據(jù)集, 更加適合負載數(shù)據(jù)挖掘與機器學習等需要大量迭代的工作. 但是數(shù)據(jù)分析師直接使用Spark進行開發(fā)十分復雜, 包括scala學習門檻高, 代碼優(yōu)化與系統(tǒng)部署需要豐富的經(jīng)驗, 同時代碼的復用度低導致重復工作繁多. 本文設計并實現(xiàn)了一種基于Spark的可視化流程式機器學習的方法, 一方面設計組件模型來刻畫機器學習的基本步驟, 包括數(shù)據(jù)預處理、特征處理、模型訓練及驗證評估, 另一方面提供可視化的流程建模工具, 支持分析者設計機器學習流程, 由工具自動翻譯為Spark平臺代碼高效執(zhí)行. 本工具可以極大的提高Spark平臺機器學習應用開發(fā)的效率. 論文介紹了工具的方法理論和關鍵技術(shù), 并通過案例表明工具的有效性.
機器學習; 數(shù)據(jù)分析; 分布式; 大數(shù)據(jù); Spark
信息技術(shù)的發(fā)展帶來生活的便利與快速增長的數(shù)據(jù). 隨著以機器學習為代表的大數(shù)據(jù)分析技術(shù)的日益成熟, 大數(shù)據(jù)為社會經(jīng)濟生活帶來了巨大的影響, 并為商業(yè)決策提供了大量的幫助. 例如在電子商務行業(yè),淘寶通過對海量交易數(shù)據(jù)進行學習, 為用戶提供專業(yè)的個性化推薦; 在廣告行業(yè), 網(wǎng)絡廣告通過追蹤用戶的點擊對喜好進行預測, 提高用戶體驗.
但是, 傳統(tǒng)的商業(yè)關系型數(shù)據(jù)管理系統(tǒng)已經(jīng)無法處理海量數(shù)據(jù)的大容量、多樣化與高維度的特點[1]. 為了解決大數(shù)據(jù)分析的問題, 分布式計算得到廣泛的應用. Apache Hadoop[2]是近年廣泛使用的分布式系統(tǒng)之一. Hadoop采用MapReduce作為嚴格的計算框架. Hadoop的出現(xiàn)促使了大規(guī)模數(shù)據(jù)處理平臺的流行. 與Hadoop同樣受到廣泛應用的還有Spark[3], 由伯克利大學的AMPLab開發(fā)的大數(shù)據(jù)架構(gòu). Spark融合了批量分析、流分析、SQL處理、圖分析以及機器學習等應用. 相對于Hadoop, Spark具有快速, 靈活, 容錯性等特點, 是運行機器學習分析程序的理想的選擇方案.但Spark是一個開發(fā)者使用工具, 要求分析人員具備一定的計算機技術(shù)能力, 并且花費大量時間去創(chuàng)建、部署與維護系統(tǒng).
機器學習的結(jié)果嚴重依賴于數(shù)據(jù)質(zhì)量與模型邏輯,所以為了令分析人員能夠?qū)W⒂诹鞒瘫旧? 不在分析程序編譯、運行、并行化等方面花費精力, 本文設計并實現(xiàn)了一個基于Spark的流程化機器學習分析工具.形式上看, 每個機器學習分析任務被分解成不同的階段, 以組件的方式組成, 降低了使用者的學習成本.技術(shù)上, 通用的算法被封裝成組件包進行復用, 通過參數(shù)設置實現(xiàn)訓練過程的差異化, 減少了創(chuàng)建機器學習分析程序的時間成本. 使用者可以通過拖拽算法組件, 靈活地組建自己的分析流程, 提高應用的創(chuàng)建與執(zhí)行效率.
本文將通過相關工作與目前存在的產(chǎn)品進行對比展示本工具的特點, 然后再從系統(tǒng)體系結(jié)構(gòu)設計、使用案例闡述業(yè)務模型、深入系統(tǒng)模塊說明功能運作等部分進行詳細說明. 同時, 本文將在最后進行技術(shù)總結(jié)以及未來研究方向的展望.
Azure Machine Learning(簡稱“AML”)[4]是微軟在其公有云Azure上推出的基于Web使用的一項機器學習服務, 它內(nèi)置了基于監(jiān)督學習和非監(jiān)督學習的分類、回歸、聚類等的20多種算法, 并且仍在不斷的增加. 但AML基于Hadoop而且只能在Azure上使用, 與之不同, 本文的工具基于Spark設計與實現(xiàn), 并且能夠靈活的在不同的虛擬機或云環(huán)境上部署.
Apache Zeppline[5]是一個基于Spark的響應式的數(shù)據(jù)分析系統(tǒng). 其目標是打造集成多種算法庫的、互動的、可視化、可分享的Web應用. 現(xiàn)已成為開源的筆記式的分析工具, 支持大量的算法庫以及多種語言.但是Zeppline沒有提供一個用戶友好的圖形接口, 所有分析程序需要用戶編寫腳本提交運行, 提高了用戶的編程技術(shù)要求. 本論文的工具提供組件化的圖形工具以及大量的機器學習算法, 用戶可以簡單快速的定義機器學習流程并運行得到結(jié)果.
文獻[6]中介紹一個大數(shù)據(jù)分析服務平臺Haflow.該系統(tǒng)使用了組件的設計, 可以拖拽組建流程化的分析程序. 并且開放了擴展接口, 可以使開發(fā)者創(chuàng)建自定義的分析算法組件. 目前Haflow僅僅支持Hadoop平臺的MapReduce算法組件, 本文的工具以Haflow為基礎, 使其能夠支持Spark的組件應用, 并提供大量在Spark環(huán)境下運行的機器學習算法.
3.1 機器學習流程概述
本文旨在設計一個面向數(shù)據(jù)分析師的流程化機器學習工具, 所以需要實現(xiàn)常用的機器學習流程的功能.機器學習可以為監(jiān)督學習與非監(jiān)督學習, 主要依據(jù)是否有具體的標簽. 標簽是觀測數(shù)據(jù)的目標或預測的對象. 而觀測數(shù)據(jù)是用來訓練和測試機器學習模型的樣本. 特征是觀測數(shù)據(jù)的屬性, 機器學習算法主要是從觀測數(shù)據(jù)的特征中訓練得到預測規(guī)律[7].
實踐中, 機器學習流程包括一系列的階段, 包括數(shù)據(jù)預處理、特征處理、模型擬合以及結(jié)果驗證或預測. 例如, 將一組文本文檔進行分類包括分詞、清理、提取特征、訓練分類模型以及輸出分類結(jié)果[7].
這些階段可以看作是黑盒過程, 并且可以包裝成組件. 雖然有很多算法庫或是軟件為每個階段提供了程序, 但是這些程序很少是為大規(guī)模數(shù)據(jù)集或是分布式環(huán)境準備的, 并且這些程序并不是原生支持流程化,需要開發(fā)人員去連接每一個階段形成完整的流程.
所以本系統(tǒng)在提供大量機器學習算法組件的同時,也要完成自動執(zhí)行流程的功能, 兼顧流程的運行效率.
3.2 系統(tǒng)業(yè)務模塊設計
圖1 典型的機器學習流程
本系統(tǒng)將組件做為主要業(yè)務功能提供給使用者.分析人員可以將現(xiàn)有組件自由的組合成不同的分析流程. 為了能夠覆蓋常用的機器學習流程, 本系統(tǒng)提供以下幾類業(yè)務模塊: 輸入輸出模塊、數(shù)據(jù)預處理模塊、特征處理模塊、模型擬合模塊以及結(jié)果預測模塊. 與其他系統(tǒng)不同, 本工具設計的業(yè)務模塊以流程中的各階段為定義, 前后依賴.
① 輸入輸出模塊. 本模塊用來實現(xiàn)數(shù)據(jù)的獲取與寫入, 主要處理數(shù)據(jù)源的異構(gòu)性, 是整個機器學習流程的起點與終點. 為了能夠處理不同的數(shù)據(jù)類型,本系統(tǒng)提供結(jié)構(gòu)化數(shù)據(jù)(如CSV數(shù)據(jù))、非結(jié)構(gòu)化數(shù)據(jù)(如TXT數(shù)據(jù))、半結(jié)構(gòu)化數(shù)據(jù)(如HTML數(shù)據(jù))的輸入或輸出功能.
② 數(shù)據(jù)預處理模塊. 本模塊包括數(shù)據(jù)清理、過濾、join/fork與類型改變等功能. 數(shù)據(jù)質(zhì)量決定了機器學習模型準確度的上限, 所以在進行特征提取前, 完善的數(shù)據(jù)預處理過程也是必需的. 本模塊可以對空值或異常值的清理、更改數(shù)據(jù)類型, 并且可以過濾掉不符合條件的數(shù)據(jù).
③ 特征處理模塊. 特征處理是在對數(shù)據(jù)進行建模前最重要的環(huán)節(jié), 包括特征選擇與特征抽取兩種功能本系統(tǒng)目前包含25種常用的特征處理算法, .
特征選擇是對多維的特征進行選擇, 利用算法挑選最有價值的特征, 選出的特征是原來特征的子集.根據(jù)選擇的算法不同分為信息增益選擇器、卡方信息選擇器與Gini系數(shù)選擇器等組件.
特征抽取是將觀測數(shù)據(jù)的特征按照一定算法轉(zhuǎn)換成新的變量, 相對于數(shù)據(jù)預處理, 對數(shù)據(jù)的處理規(guī)則更加的復雜. 抽取后的特征是原有特征的映射, 包括以下幾類:
I.標準化組件. 標準化是將數(shù)據(jù)的數(shù)值型特征映射到統(tǒng)一的量綱的算法. 經(jīng)過標準化的特征被統(tǒng)一到相同的參考系下, 使訓練出來的模型更加準確, 訓練過程中收斂更快. 不同的標準化組件使用不同的統(tǒng)計量進行映射. 如Normalizer組件、StandardScaler組件、MinMaxScaler組件等.
II.文本處理組件. 文本類型的特征由于不能直接計算, 需要映射到新的數(shù)值類型變量上. 常用的算法有將文本進行分詞建立索引的TF-IDF組件, 分詞Tokenizer組件, 獨熱編碼OneHotEncoder組件等.
III.降維類組件. 這類組件將原有的特征通過一定的算法, 將原有的特征信息進行壓縮, 用更少的特征進行表示, 如主成分分析PCA組件等.
IV.自定義UDF組件. 用戶可以輸入SQL自定義特征處理的功能.
④ 模型擬合模塊. 模型訓練是用某種算法對數(shù)據(jù)進行學習, 得到的模型可以用于后續(xù)對數(shù)據(jù)的預測.本系統(tǒng)目前提供大量的監(jiān)督學習模型組件, 根據(jù)觀測數(shù)據(jù)標簽性質(zhì)的不同, 可以分為分類模型與回歸模型.
⑤ 結(jié)果預測模塊. 本模塊包括結(jié)果預測與驗證兩個功能.
通過以上通用的業(yè)務模塊的設計, 用戶可以在本系統(tǒng)環(huán)境下創(chuàng)建多樣化的常用的機器學習分析流程.
3.3 系統(tǒng)體系結(jié)構(gòu)設計
本系統(tǒng)通過Web提供用戶接口, 以整體架構(gòu)以MVC框架為主, 同時提供機器學習的業(yè)務模塊以及流程的執(zhí)行模塊, 系統(tǒng)體系結(jié)構(gòu)如圖2所示.
圖2 系統(tǒng)體系結(jié)構(gòu)圖與工作流程圖
用戶通過系統(tǒng)提供的Web界面創(chuàng)建形式上的機器學習流程, 提交給系統(tǒng). 系統(tǒng)將把接收到的原始流程轉(zhuǎn)換成邏輯流程圖, 并對流程圖進行有效性驗證. 流程的有效性驗證是分析流程在實際執(zhí)行前的必要的一環(huán), 當流程有明顯的邏輯或數(shù)據(jù)不匹配等錯誤時, 能夠立該返回錯誤, 而不是等執(zhí)行到相應的組件時再報錯, 提高了系統(tǒng)的運行效率.
系統(tǒng)的執(zhí)行引擎是系統(tǒng)的關鍵模塊, 實現(xiàn)多用戶和多任務的流程執(zhí)行功能. 它將驗證有效的邏輯流程圖翻譯成相應的執(zhí)行模型, 執(zhí)行模型即是系統(tǒng)可識別的用來調(diào)度相應業(yè)務組件的數(shù)據(jù)結(jié)構(gòu). 執(zhí)行模型的翻譯是一個復雜的過程, 本文將在4.3節(jié)中進行詳細介紹.
4.1 中間數(shù)據(jù)的存儲與管理
4.1.1 中間數(shù)據(jù)的存儲結(jié)構(gòu)
在整個機器學習流程中, 數(shù)據(jù)處于流動的狀態(tài),具有順序依賴的組件需要傳遞中間數(shù)據(jù). 為了避免中間數(shù)據(jù)異構(gòu)性的問題, 本系統(tǒng)規(guī)定組件間使用統(tǒng)一的基于DataFrame[8]的列式存儲結(jié)構(gòu)進行通信. DataFrame是一種Spark支持的以列為主的分布式數(shù)據(jù)集合, 在概念上類似于關系數(shù)據(jù)庫的“表”, 但在Spark底層對其運算執(zhí)行做了很多優(yōu)化. 這種方式保留了結(jié)構(gòu)化數(shù)據(jù)的關系, 并且對特殊的數(shù)據(jù)屬性進行定義,規(guī)定features和label作為模型擬合階段所需數(shù)據(jù)的頭部, 以方便流程的驗證與執(zhí)行.
這種列式存儲結(jié)構(gòu)可以被整個系統(tǒng)快速的持久化到中間數(shù)據(jù)存儲層, 并且在后面的組件使用時快速的還原成需要的數(shù)據(jù)對象.
4.1.2 中間數(shù)據(jù)的管理
中間數(shù)據(jù)在不同的生命周期需要不同的管理. 當組件對之前的數(shù)據(jù)進行處理后, 即在中間數(shù)據(jù)的生成階段, 系統(tǒng)會記錄中間數(shù)據(jù)的生成位置, 用于傳遞給下一組件. 在流程執(zhí)行結(jié)束后, 所有該流程產(chǎn)生的中間數(shù)據(jù)將不再被使用, 會被系統(tǒng)統(tǒng)一刪除. 同時, 單個流程的中間數(shù)據(jù)存儲空間有規(guī)定的上限, 當中間數(shù)據(jù)產(chǎn)生過多時, 流程的資源管理器將采用近期最少使用算法(LRU, Least Recently Used)[9]對數(shù)據(jù)進行清除,以防止中間數(shù)據(jù)過多發(fā)生內(nèi)存溢出的問題.
為了保證中間數(shù)據(jù)的IO效率, 本系統(tǒng)使用Alluxio[10]作為中間的存儲層, 將中間數(shù)據(jù)全部保存在內(nèi)存中. Alluxio是一種基于內(nèi)存的虛擬分布式存儲系統(tǒng), 可以大幅加速數(shù)據(jù)的讀寫速度.
4.2 機器學習業(yè)務組件的實現(xiàn)方法
4.2.1 基于Spark MLlib的機器學習分析組件的實現(xiàn)
本文在第3.2節(jié)詳細的說明了系統(tǒng)的機器學習模塊的設計, 這些模塊通過組件的形式完成主要的數(shù)據(jù)處理與建模功能. 為了快速的提供盡可能多的算法組件, 除了少部分根據(jù)機器學習流程的特點編寫了處理程序的組件, 如輸入輸出組件、數(shù)據(jù)清理組件等, 很多的組件功能通過Spark MLlib自動轉(zhuǎn)換成相應的Spark Job完成. Spark MLlib[11]是Spark自帶的機器學習算法庫, 包含了大量的分類、回歸、聚類、降維等算法. 例如使用隨機森林進行分類, 系統(tǒng)的執(zhí)行引擎根據(jù)流程的結(jié)點信息, 實例化具有相應參數(shù)的RandomForestClassifier對象, 調(diào)用fit方法對輸入的數(shù)據(jù)進行擬合, 生成相應的Model對象, 然后通過中間數(shù)據(jù)管理模塊將模型序列化保存, 供后續(xù)的預測或驗證組件使用. 通過這種方法, 能夠保證每個學習算法的質(zhì)量, 而且能與Spark社區(qū)同步, 快速的添加新的算法組件.
4.2.2 共享Spark上下文執(zhí)行流程中的組件
流程中的組件有兩種運行方式. 一種是作為獨立的Spark程序調(diào)用, 每次運行都啟動一次Spark上下文(SparkContext). Spark程序在剛開始啟動時, 會創(chuàng)建上下文環(huán)境, 確定資源分配, 如調(diào)用多少線程、內(nèi)存, 之后再進行相應的任務調(diào)度. 一般的機器學習流程由很多個組件組成, 將會花費大量的運行時間去完成上下文的啟動與切換. 另一種方法, 可以令每個流程共享同一個上下文, 整個流程可以看作是一個大的Spark程序. 但系統(tǒng)的執(zhí)行引擎需要為每個流程創(chuàng)建與管理上下文, 在流程結(jié)束時也要將上下文對象釋放回收資源.
為實現(xiàn)上下文的共享, 每個組件都要繼承SparkJobLike或者其子類, 并實現(xiàn)創(chuàng)建組件對象(createInstance)與執(zhí)行組件(execute)方法. 圖3是類的設計與繼承關系圖. 其中, Transformers、Models、Predictors分別是數(shù)據(jù)清理與數(shù)據(jù)預處理模型、學習訓練模型、驗證與預測模型的父類.
圖3 組件類設計與繼承關系圖
4.3 機器學習流程的創(chuàng)建與驗證
當用戶通過圖形界面設計好機器學習分析流程并提交后, 系統(tǒng)將開始創(chuàng)建邏輯上的分析流程. 系統(tǒng)首先通過對原始流程進行拓撲分析, 生成以有向無環(huán)圖(DAG, Directed Acyclic Graph)來表示的邏輯流程圖.邏輯流程圖包括各組件的前后依賴與并行關系, 以及輸入輸出、參數(shù)信息.
當前流程的邏輯結(jié)構(gòu)生成后, 將對整體流程的有效性進行驗證. 具體步驟如下:
① 檢查圖中每個結(jié)點的輸入與輸出及其他必要的參數(shù)信息, 缺少則返回錯誤, 如特征處理的組件用戶必須定義input column與output column;
② 檢查整個流程的完整性, 如是否存在至少一個輸入組件與輸出組件作為開端和結(jié)束, 否則返回錯誤;
③ 檢查流程圖中是否存在自循環(huán), 否則返回錯誤;
④ 檢查各個組件是否符合機器學習流程的前后依賴關系, 比如特征處理必須在模型擬合之前, 不符合則返回錯誤.
4.4 機器學習流程的翻譯與執(zhí)行
對流程進行驗證后, 流程圖將被提交給執(zhí)行引擎.首先系統(tǒng)需要將邏輯的流程圖表示成可以直接執(zhí)行的模型, 再轉(zhuǎn)換成基于Spark MLlib的機器學習算法組件再串行或并行執(zhí)行, 這個過程稱為流程的翻譯與執(zhí)行. MLlib[11]是Spark內(nèi)置支持的分布式機器學習算法庫,優(yōu)化了大規(guī)模數(shù)據(jù)和模型的并行存儲和運算. 使用Spark MLlib, 可以快速開發(fā)出大量高效的組件程序.這部分將著重介紹系統(tǒng)如何將流程翻譯成可以執(zhí)行的模型, 加速機器學習分析流程的運行.
4.4.1 流程中同時發(fā)生多個并行join/fork任務
Join組件是將不同的數(shù)據(jù)集歸并到同一個數(shù)據(jù)集的組件, 與之前的組件是多對一的關系. Fork組件是將同一個數(shù)據(jù)集分別應用到不同流程分支的組件, 與之后的組件是一對多的關系. Join/fork組件在實際中有大量的應用, 比如用于商品推薦的協(xié)同過濾算法中,為了充分的描繪用戶信息, 需要同時join用戶的交易數(shù)據(jù)、品牌數(shù)據(jù)、出生居住地信息等各種關聯(lián)的數(shù)據(jù).得到的具體的用戶剖繪(user profile)再fork到每個商品得到相應的偏好概率[12].
當發(fā)生多個數(shù)據(jù)集同時join的任務時, 為了高效率的并行執(zhí)行流程, 使用分治算法, 將不同的join分支分別執(zhí)行, 最后再歸并. 當從同一數(shù)據(jù)集fork出多個流程分支時, 對每個流程分支并行執(zhí)行, 不影響最終的模型結(jié)果. 總之, 對有多個join以及fork任務的機器學習流程要盡可能的并行執(zhí)行, 提高運行效率.
4.4.2 多個串行與并行任務的復合流程的翻譯
上一節(jié)介紹了當流程中出現(xiàn)多個join/fork的并行任務時的翻譯方法, 但是實際中的機器學習流程并不會是單純的串行或并行的關系, 而是串行的任務和并行的任務組合成的, 所以實際中的機器學習流程的情況更加復雜. 要將復雜的流程轉(zhuǎn)換成執(zhí)行引擎, 其難點在于要盡可能的并行執(zhí)行流程, 但不會打亂組件的之間的數(shù)據(jù)依賴關系. 以下為復合流程的翻譯方法:
① 對流程圖進行廣度優(yōu)先遍歷, 確定業(yè)務組件間的拓撲關系;
② 以數(shù)據(jù)預處理、特征處理、模型擬合與預測的階段為標準劃分相同階段的子流程;
③ 通過關鍵路徑算法判斷各子流程內(nèi)部的執(zhí)行情況, 以拓撲情況確定子流程中分支的層次關系;
④ 上個步驟后得到的同一層次的分支再按照上一節(jié)的算法進行優(yōu)化.
圖4 多個join和fork并行流程的翻譯
5.1 實驗環(huán)境與數(shù)據(jù)說明
目前本系統(tǒng)尚處于原型階段, 為了實驗系統(tǒng)功能,本文使用四核處理器、8G內(nèi)存、64位Ubuntu系統(tǒng)的單機布署偽分布式的環(huán)境進行實驗.
實驗數(shù)據(jù)是來自Kaggle[13]的公開數(shù)據(jù)集, 通過2003年至2015年的洛杉磯城市的犯罪記錄數(shù)據(jù), 對犯罪類別進行建模. 為了方便流程的展示說明, 本文選取了三個原始特征, 選用常用的機器學習分析方法創(chuàng)建流程, 特征與標簽的數(shù)據(jù)特點如表1所示. 總結(jié)來說特征與標簽以字符串為主, 需要數(shù)據(jù)預處理進行特征提取, 并映射成數(shù)值型的特征.
表1 數(shù)據(jù)特點說明
5.2 機器學習流程的創(chuàng)建與說明
為了將原始特征轉(zhuǎn)換成訓練模型可以計算的數(shù)值型特征向量, 需要進行一系列的數(shù)據(jù)預處理工作. 表2是對每個特征處理方法的說明, 全部的參數(shù)設置一般為默認, 如有改動會特別說明.
表2 數(shù)據(jù)預處理說明
預處理后得到的特征將通過Join組件合并成features向量, 經(jīng)過TF-IDF后特征向量的維度高但比較稀疏, 使用ChiSqSelector選擇卡方信息量最大的100個特征擬合模型. 采用LogisticRegression-WithLBFGS擬合多分類模型, 然后將測試數(shù)據(jù)通過訓練好的模型進行預測, 將結(jié)果輸出保存成CSV文件.圖5是將上述分析流程在系統(tǒng)創(chuàng)建后的界面.
圖5 創(chuàng)建好的流程圖界面
5.3 實驗結(jié)果分析
通過比較測試數(shù)據(jù)的預測值和實際的label, 準確率在72.54%左右. 如果向流程中添加更多的特征, 模型的復雜度會變大, 同時準確率也會上升. 使用本系統(tǒng), 可以方便快速的創(chuàng)建機器學習流程, 用戶可以專注于分析方法的改進.
本文在第四部分介紹了流程的并行執(zhí)行優(yōu)化, 為了測試優(yōu)化方法的有效性, 將本實驗的數(shù)據(jù)隨機抽取,分成10%、20%、30%...100%大小的十份數(shù)據(jù), 將這十份數(shù)據(jù)分別使用優(yōu)化過的方法和沒有優(yōu)化的方法執(zhí)行本實驗的分析流程, 沒有優(yōu)化是指將流程中的組件按照前后順序串行執(zhí)行, 獲得每個流程的運行時間, 單位為ms, 如圖6所示.
圖6 優(yōu)化與未優(yōu)化的時間效率對比圖表
可以看出, 隨著數(shù)據(jù)量的線性增長, 未優(yōu)化的流程執(zhí)行的時間增長的更加快, 而且到后期時間的增長率有增大的趨勢. 而經(jīng)過優(yōu)化的流程執(zhí)行方案, 隨著數(shù)據(jù)量的增加, 時間增長的相對緩慢, 說明系統(tǒng)執(zhí)行優(yōu)化方案的有效性.
本文為了解決數(shù)據(jù)分析師采用Spark開展大規(guī)模數(shù)據(jù)的機器學習分析的問題, 設計并實現(xiàn)了一個分布式的、支持多種機器學習算法的流程化的分析系統(tǒng)的原型. 本文的第三部分從整體介紹了本系統(tǒng)的業(yè)務模型與體系結(jié)構(gòu). 第四部分從各個模塊開始詳細說明關鍵技術(shù), 包括中間數(shù)據(jù)的存儲與管理、機器學習業(yè)務組件的實現(xiàn)、機器學習流程的創(chuàng)建與驗證、機器學習流程的翻譯與執(zhí)行. 并且對復雜的機器學習流程的執(zhí)行在邏輯上進行了優(yōu)化, 將邏輯流程圖翻譯成可以在物理執(zhí)行階段盡可能高效的并行執(zhí)行的模型.
本系統(tǒng)目前將Spark MLlib所有算法自動轉(zhuǎn)換為組件, 仍需要在實踐中不斷的對算法庫進行擴展. 同時, 未來可以在數(shù)據(jù)依賴的方面進行研究, 如系統(tǒng)可以對數(shù)據(jù)集自動進行分片, 將同一數(shù)據(jù)集的不同特征的處理任務分配到不同的分布式結(jié)點并行處理, 提高特征處理任務的執(zhí)行效率以及分布式資源的利用率.
1 Labrinidis A, Jagadish H V. Challenges and opportunities with big data. Proc. of the VLDB Endowment, 2012, 5(12): 2032–2033.
2 http://hadoop.apache.org/docs/current/.
3 Zaharia M, Chowdhury M, Franklin M J, et al. Spark: Cluster computing with working sets. HotCloud, 2010, 10: 10–10.
4 https://azure.microsoft.com/en-us/blog/.
5 https://zeppelin.incubator.apache.org/docs/0.5.6-incubating.
6 趙薇,劉杰,葉丹.基于組件的大數(shù)據(jù)分析服務平臺.計算機科學,2014,41(9):75–79.
7 Carbonell JG, Michalski RS, Mitchell TM. An Overview of Machine Learning. Springer Berlin Heidelberg, 1983: 3–23.
8 Armbrust M, Xin RS, Lian C, et al. Spark sql: Relational data processing in Spark. Proc. of the 2015 ACM SIGMOD International Conference on Management of Data. ACM. 2015. 1383–1394.
9 Megiddo N, Modha DS. Outperforming LRU with an adaptive replacement cache algorithm. Computer, 2004, 37(4): 58–65.
10 Li H, Ghodsi A, Zaharia M, et al. Reliable, memory speed storage for cluster computing frameworks. Proc. SoCC, 2014. 11 Meng X, Bradley J, Yavuz B, et al. Mllib: Machine learning in apache Spark. arXiv preprint, arXiv:1505.06807, 2015.
12 鄧愛林,朱揚勇,施伯樂.基于項目評分預測的協(xié)同過濾推薦算法.軟件學報,2003,14(9):1621-1628.
13 https://www.kaggle.com/c/sf-crime.
Method of Implement Machine Learning Analysis with Workflow Based on Spark Platform
ZHAO Ling-Ling1,2, LIU Jie2, WANG Wei212
(University of Chinese Academy of Sciences, Beijing 10090, China) (Technology Center of Software Engineering, Institute of Software, Chinese Academy of Sciences, Beijing 100190, China)
By using resilient distributed dataset, Spark is more adapted to iterative algorithms, which are common in data mining and machine learning jobs. However, the development of Spark applications is complicated for data analysts on account of the high threshold to learn scala, the rich experience of code optimization and system deployment, as well as multiple duplicated work due to the low reusing of code. We design and develop a machine learning tool with visible workflow style based on Spark. We design the stages of machine learning with workflow modules, including data preprocessing, feature processing, model training and validation. Meanwhile, a friendly user interface is brought forward to accelerate the design of machine learning workflow model for analysts, with the support of auto parsing from modules to Spark jobs by server end. This tool can greatly improves the efficiency of machine learning development on Spark platform. We introduce the theoretical methods and critical techniques in the paper, and prove its validity with a real instance.
machine learning; data analysis; distributed; big data; Spark
國家自然科學基金(U1435220)
2016-03-21;收到修改稿時間:2016-04-11
10.15888/j.cnki.csa.005454