最夯的大數據分析工具-Apache Spark
原文 http://www.thebigdata.cn/JieJueFangAn/13482.html
大家好!我是貓大,大家還記得我的好友咪咪(那位想要知道自己養的貓,會不會抓老鼠的那位愛貓人士)嗎?在過去文章什么 ? SVM會賺錢 !中貓大介紹了SVM的概念,以及如何通過LIBSVM,幫助使用者解決分類問題。
記憶體不足
前幾天咪咪致電貓大求助---在使用LIBSVM的時候出現了記憶體不足(out of memory)的錯誤訊息。貓大以往也碰過此錯誤訊息,塬因在于"當要用作建立模型的資料過于龐大時,電腦中的記憶體會無法一次容納"導致于無法順利建模。
為了解決這個問題,貓大在前幾週介紹過虛擬矩陣的概念,也就是「虛擬化地將所需要的資料以矩陣的方式切割」,當我們程式需要這些資料時,再每次從資料庫取一部分的資料供程式分析使用。
由于LIBSVM并沒有實作虛擬矩陣,以致于沒辦法解決資料過于龐大時,會遇到記憶體不夠的問題,而將LIBSVM的程式改寫,成為可以使用虛擬矩陣的作法又會過于困難。于是貓大發現了一個好用的工具,那就是Spark中的MLlib。
解決方法-MLlib
Spark是近年來非常流行的一種分散式運算的系統,MLlib是它提供的套件之一。MLlib是機器學習的函式庫,其中提供了許多演算法,如 SVM、決策樹、羅吉斯回歸等。其使用起來非常簡單,只需要短短幾行指令,就可以完成建模的工作,最棒的是它可以容納非常龐大的資料!這些優點歸功于 Spark中的RDD(Resilient Distributed Dataset)。
什么是RDD
RDD(Resilient Distributed Dataset),可將它視為一種虛擬矩陣的實作。RDD基本上存放于記憶體當中,使得整個運算速度快上許多,只有在記憶體放不下的時候,才會存放在硬碟上,不過整體上運算速度并不會影響太大。
當資料有缺失時,以往的容錯機制,是採取多復製幾份副本,以免當錯誤發生時,找不到遺失的資料。然而RDD的容錯機制是採取名 為”lineage”的方式,它不需要多頻寬去傳輸副本,以及額外的空間去儲存副本,”lineage”只要透過RDD的資訊,便可以去推導出遺失的資料 了,相較于前者更為有效率。
我們都知道許多機器學習的演算法,像是SVM求解的方式都必須透過迭代法(也就是指下一次的運算,必須依賴上一次的運算結果),必須用到許多之前 的計算結果。而RDD是存放在記憶體當中,可以減少I/O的存取時間,自然而然可以加快建模的速度,另外擁有良好的容錯機制,使得Spark非常適合巨量 資料分析。有興趣的讀者不妨可以瀏覽Spark官網,更進一步瞭解Spark,想要更深入了解RDD的讀者們也可以參考 ResilientDistributed Datasets: A Fault-Tolerant Abstraction forIn-Memory Cluster Computing論文。
在分析大數據的時候,LIBSVM無法順利建立模型,而Spark的RDD解決了此問題,并且提供了MLlib,可在分散式的系統下快速建模。