張維 王玥 羅珅
摘要:在大數據的時代里,實現高效的大數據的機器學習系統,需要開發人員要搭建一個計算機機器學習系統,并且該系統能夠同時完成機器學習和大規模數據處理的任務。現有的訓練數據集重復使用,場景信息較少,已經不能滿足大規模機器訓練的需要,所以需要包含大規模數據、分布式的計算機系統完成訓練。本文介紹了現有大數據機器學習基本概念和一種稱為Spark的大數據分布式計算方法。
關鍵詞:機器學習;大數據;分布計算模型
中圖分類號:TP311.13 文獻標識碼:A 文章編號:1007-9416(2018)09-0027-02
1 背景
近年來,隨著大數據的興起,推動了大數據在機器學習領域的運用和迅猛發展,基于大數據的機器學習能夠更有效更精準的完成機器訓練,基于大數據的機器學習系統已經成為計算機研究開發領域的一個熱點研究問題。機器學習和大數據分析是運用現有的計算機系統模型,將計算機獲取到的大量的數據或稱大數據轉換成有用信息的技術。運用的數據規模越大,機器學習訓練效果越好,精度更準,識別內容更多,減少過擬合和欠擬合現象的發生[1-3]。
大數據機器學習既不是單純的機器學習,也不是簡單的大數據處理的問題,而同時涉及機器學習和大數據處理兩個方面的技術難題的攻克與融合的運用[4]。這個過程中,研究人員不僅需要繼續關注機器學習的函數方法和算法,而且還需要繼續研究新的、高效的算法或改進的現有的不完善的機器學習方法,保證能夠提升在實際運行中的結果的準確性。搭建一個基于大數據的機器學習系統,同時涉及機器學習和大數據處理兩方面的問題,如機器學習的算法模型、數據集、訓練方法、精度、擬合等問題,大數據處理方面的分布式存儲、并行化計算、網絡通信、任務調度、容錯冗余備份等[5,6]。這些因素互相影響,增加了系統設計的復雜性和設計完成系統的穩定性精準性,給設計人員的系統開發設計帶來了一些挑戰。在設計大數據機器學習系統和研究其方法和算法時,還要關注如何結合分布式和并行化的大數據處理技術,以便在可接受的時間內完成計算。
2 Spark方法
Spark[3]誕生于伯克利大學的AMPLab實驗室,2010年正式開源,開放代碼提供給開發測試人員使用,2014年成為Apache的頂級項目。Spark在2014年11月的Daytona Gray Sort 100TB Benchmark競賽中,打破了保持排序紀錄的Hadoop MapReduce框架結構。Spark利用1/10的節點數,把100TB數據的排序時間從72min降低到了23min。
Spark主要具有如下特點:(1)計算效率高。通過有向無環圖DAG支持循環數據流,在內存中存儲中間數據,擁有高效的迭代運算效率。(2)通用性強,提供豐富的組件。Spark為開發人員提供了各種完整強大的組件庫,包括sql查詢、流式計算、機器學習和圖算法組件等多種組件。(3)使用方便,兼容多種開發語言。提供Spark Shell腳本,用戶可以進行交互式編程開發,同時支持Scala、Java、Python和R等多種編程語言開發。(4)模式多樣,對外部環境依賴少,兼容多種服務器。可以獨立運行于各種集群服務器中,兼容Hadoop、Amazon EC2等云環境,可以訪問多種數據源如HDFS、Cassandra、HBase、Hive等。
Spark具有極其多的有點,是由于其采用了不同于一般框架的數據結構,spark采用彈性分布式數據集(resilient distributed dataset,RDD),RDD是Apache Spark平臺的基礎,RDD是以邏輯分塊進行劃分的對象集合,緩存在內存中,在內存中數據儲存滿了以后,數據會保存到硬盤上。RDD有兩層含義:數據結構RDD和編程模型RDD。(1)數據結構RDD本質上來說,是一個只讀、可分區的記錄集合,一個RDD包含多個分區,每個分區是包含一個數據集的片段。RDD本質上是一個內存數據集,解決了磁盤讀寫密集和網絡通信負載過大的問題。(2)編程模型RDD上定義了兩類操作:轉換和動作。轉換操作返回新的RDD,動作操作的結果在存儲系統中導入一個值。Spark在RDD上定義的采用惰性調用機制,只有在調用作操作時才會真正觸發所有定義的操作。
由轉換操作得到的父子RDD之間存在依賴關系,包括窄依賴和寬依賴。窄依賴:父RDD中的一個分區只被一個子RDD的一個分區使用。窄的依賴關系有利于高效的執行,而廣泛的依賴關系會帶來瓶頸,因為它們會破壞流水線,而且需要通信密集的隨機操作。寬依賴:父RDD的一個分區被一個子RDD的多個分區使用。
在Spark中,計算被建模為有向無環圖(DAG,directed acyclic graph),其中的每個頂點表示彈性分布式數據集RDD,每個邊表示RDD上的實際操作。spark用戶將計算作為有向無環圖進行建模,該有向無環圖會轉換并運行RDD上的動作。有向無環圖DAG會分階段進行編譯,每個階段將并行執行一系列的任務。Spark中的分布式執行操作,是通過對機器上的有向無環圖階段進行分塊來實現的。Driver包含了兩個調度組件,有向無環圖調度器和任務調度器,用于給workers分配任務,以及協調workers。
在基本的設置中,Spark將模型參數存儲在driver節點中,而workers與driver進行通信,以便在每次迭代后更新參數。在大規模的部署中,模型參數不是特別適合在driver中存儲,而應將其作為RDD進行維護。這引入了很大的開銷,因為需要在每次迭代中創建新的RDD以保存更新過的模型參數。更新模型包括在機器和磁盤之間混洗數據限制了Spark的可擴展性。這是Spark中基本數據流模型有向無環圖不足的地方。Spark的設計目的是為一般數據處理設計的,而不是為機器學習設計的。然而,開發人員可以利用專用于Spark的MLlib的工具包,在Spark上進行機器學習。同時Spark的缺點還有不支持機器學習所需的迭代操作。
3 結語
基于大數據的機器學習系統的研究和開發,不僅是研究算法問題,更是解決一個大規模系統之間相互關聯、協同運行的問題。相比傳統的機器學習,基于大數據的機器學習系統,大大的擴充了機器學學所需訓練數據樣本的數量,使機器學習的訓練數據不再拘泥于已有的、大量已被頻繁使用過的數據集,使得機器學習的訓練過程和結果更加多樣化,挖掘分析出更多更隱藏的、不為人知的有用信息。隨著硬件技術的提升和編程算法的不斷優化,越來越多的科研人員參與其中,數據采集的過程已經不再是影響大數據發展的首要因素,通過數據挖掘,分析出數據的關系,發現數據潛在的價值,提取有用的數據歸納總結,抽象出普遍特征,避免無用數據對需要的數據進行干擾是當前大數據學習面臨的首要挑戰。機器學習也需要通過大量數據完成訓練,通過不斷優化,將大數據與機器學習相互融合,提升二者關聯性,完成更好的數據挖掘過程和更精準的完成機器訓練。
參考文獻
[1]焦嘉烽,李云.大數據下的典型機器學習平臺綜述[J].計算機應用,2017,(11):7-15+20.
[2]何清,李寧,羅文娟.大數據下的機器學習算法綜述[J].模式識別與人工智能,2014,(04):41-50.
[3]唐振坤.基于Spark的機器學習平臺設計與實現[D].廈門大學,2014.
[4]Jiang, J., Yu, L., Jiang, J., Liu, Y., Cui, B.: Angel: a new large-scale machine learning system. National Science Review nwx018(2017).
[5]ZAHARIA M, CHOWDHURY M, FRANKLIN M J, et al. Spark:cluster computing with working sets [C]Proceedings of the 2ndUSENIX Conference on Hot Topics in Cloud Computing. Berkeley, CA: USENIX Association,2010: Article No.10.
[6]K Zhang , S Alqahtani , M Demirbas: A Comparison of Distributed Machine Learning Platforms. International Conference on Computer Communicatio,2017:1-9.