紀兆華 王立東 宋海英 張小華
( 1、北京信息職業技術學院,北京100018 2、共青團內蒙古興安盟委員會,內蒙古 烏蘭浩特137400 3、興安職業技術學院,內蒙古 烏蘭浩特137400)
隨著信息技術深度的不斷發展, 積累的數據量產生了TB、PB、EB 級數據量。 傳統計算機的軟硬件不能夠支持足夠龐大的數據量的存儲、管理及數據分析能力,因此,針對大數據的分布式處理技術隨之產生, 主流的大數據處理平臺有Hdoop 和Spark。傳統的以Hdoop 為代表的數據處理技術不能滿足當前應用實時性以及迭代運算需求,Spark 作為基于內存計算大數據處理平臺以其高速、多場景適用的特點成為大數據平臺的后起之秀,Spark 中 的Spark SQL、Spark Streaming、MLlib 和graphX 被廣泛的應用在各領域,有望成為未來大數據分析的主流平臺。
Spark 主要提供基于內存計算的開源, 能快速進行數據分析,具有通用性,是可擴展的分布式計算引擎。Spark 支持數據查詢、機器學習等業務場景,業務場景能無縫交叉融合,在不同應用中使用,可以快速的構建高性能大數據分析[1]。
Spark 的體系結構不同于Hadoop 的MapReduce 和HDFS,主要可分為三部分:Spark Core, 如: 彈性分布式數據集( RDD,resilient distributed datasets)、 上下文( Spark Context) 等實現Spark 系統中的計算、IO、 調度和shuffle 等系統基本功能;Spark Core 的上層建立的應用框架,如:Spark SQL 查詢子項目、支持機器學習的MLlib 庫、GraphX 圖計算以及支持流計算的Spark Streaming 等四大框架;其他實驗性項目,如:Tachyon、BlinkDB 和Tungsten 等,這些項目共同組成Spark 體系結構[2]。
Spark 用彈性分布式數據集進行數據抽象,可在內存中存儲數據,將中間處理數據全部放到了內存中,減少磁盤IO 達到性能的提升,大幅度的降低了運行時間[3]。
Spark 與其他大數據平臺不同的特點,主要如下:
2.1 處理速度快。 Spark 進行數據分析的速度快,彈性分布式數據集將執行的多個查詢工作集緩存到內存中,后面的數據查詢可以再次重用內存中的工作集,提高了查詢速度。
2.2 支持語言多。 Spark 支持的開發語言環境多, 如Java、Scala、Python 及R 等進行工作,應用范圍得到普及,允許在shell中進行交互式查詢,多種使用模式的特點讓應用更靈活。
2.3 支持復雜查詢。Spark 支持map 和reduce 操作,以及SQL查詢、流式查詢等復雜查詢,它們都基于RDD 這一抽象數據集在不同業務過程中進行轉換,轉換代價小,統一引擎解決不同類型工作場景。可在同一個工作流中無縫的搭配復雜查詢功能。
2.4 實施流處理。Spark 還支持實時流計算( Spark Streaming)用來對數據進行實時處理,允許用戶快速開發流應用程序,容錯能力強,集成性好,為流處理和批處理重用了同樣的代碼,可將流數據保存到歷史數據中
2.5 運行模式多。 Spark 可使用standalone 模式獨立的運行,也能在當下的YARN 管理集群中運行,還可以讀取已有的任何Hadoop 數據,在HBase、HDFS 等任何Hadoop 數據源上運行,并能讓用戶在已有Hadoop 應用遷移[4]。
聚類算法把具有相同或者相似特征的無標簽的數據對象劃分為同一簇,同一簇的數據對象在在特征上盡可能相近或者相似,不同簇的數據對象盡可能不同或者相異,并且每個數據對象要保證只能劃分在同一簇。 同一簇的中心點向量的個數和位置以及相似性度量的選取為聚類算法的重點內容, 并通過聚類算法多次迭代執行找到最優的聚類結果。 聚類算法被分為如下幾類, 基于劃分方法有K-means 聚類算法、K-medoids 聚類算法等;基于層次方法有Agnes、Diana 等;根據密度方法有高斯混合(Gaussian mixture)等。 在聚類算法執行過程中,能否分析識別出來整體數據對象分布的稠密和稀疏區域,能否發現哪些是存在的孤立點或者鼓勵簇[5]。
K-means 是最常用的聚類算法,從算法的執行過程來看,在每個類組中選取新的聚類中心點,通常使用歐式距離的多次迭代,達到最優解。 聚類的步驟通常包括如下幾個步驟:a.選擇需要進行聚類分析的數據;b.計算分析數據對象之間的相似度,對分析的結果做量化處理,在相似矩陣中存儲;c.采用聚類算法做聚類分析;d.把分析結果顯示出來。 首先選取要分析的數據空間的k 個數據對象作為中心點,每個數據對象代表一個聚類中心[6]。
MLlib 是Spark 生態系統在機器學習領域的重要應用,是Spark 里的機器學習庫,提供了很多常用機器學習算法的分布式實現,如聚類、分類、回歸等。Spark MLlib 庫中的K-means 算法,使用map 分布式讀取數據集,數據集讀取后,cache 進內存里。計算時, 選取用map 鍵值對表示隨機挑選出來的k 個聚類中心,Spark 的驅動器節點負責把數據發送到各個工作節點, 實現具體的計算任務。Spark MLlib 擴展性強、運行速度快,充分利用RDD 的迭代優勢,能對大規模數據應用機器學習模型,并能與Spark Streaming、Spark SQL 進行協作開發應用, 讓機器學習算法在基于大數據的預測、推薦和模式識別等方面應用更廣泛[7]。
使用Spark MLlib 做機器學習很簡單,首先對原始數據進行數據處理, 然后直接調用相應的API 實現分析數據。Spark MLlib 不同于傳統的機器學習工具,Spark MLlib 提供了簡單易用的API, 特別是Spark 能夠高效的處理 大數據,并且在迭代計算時具有較強的優勢。 因此,需要熟悉MLlib 的API就可以開始數據分析工作
Spark 是一個開源分析處理大數據平臺,基于Spark 的聚類算法在圖像分析、Web 文本分類、生物科學、客戶分群、市場營銷、 欺詐檢測以及信息安全與管理等領域有著廣泛的應用,為應對現實環境中復雜的場景,與不同的框架結合使用,發揮了更好的性能。 Spark 能快速處理多種場景下的大數據問題,高效挖掘大數據中的價值,為業務發展提供決策支持。