王軍
(西安外事學院,陜西西安,710077)
工業和研究領域數據量的增長帶來了巨大的機遇,同時也帶來了巨大的計算挑戰。由于數據規模已經超出了單機的計算能力,用戶需要新系統將計算擴展到多個計算節點。因此,針對不同計算負載的新型集群編程模型大量涌現。剛開始,這些模型相對專業化,為解決新的負載問題開發新模型。例如,MapReduce支持批處理,但Google也開發了用于交互式SQL查詢的Dremel和用于迭代圖算法的Pregel。在開源的Apache Hadoop堆棧中,Storm和Impala等系統也是為專門的運算開發的。即使在關系數據庫領域里,基本趨勢也是要避免“通用”的系統。然而現實情況中大多數大數據應用程序需要結合許多不同的處理類型。“大數據”的本質在于它是多樣性和無序性;典型的工作流程需要類似MapReduce的代碼用于數據加載、類似SQL的查詢以及迭代機器學習,使用專門的引擎會造成系統更加復雜,效率低下。為此,用戶還必須將不同的系統連接在一起,某些應用程序甚至根本無法在任何引擎中高效表達。
Spark框架編程的核心概念是彈性分布式數據集(RDDs),RDD是跨群集分區對象的容錯集合。Spark通過Scala、Java、Python和R等編程語言中的功能性API來提供RDD接口,用戶通過對自己的數據申請轉換操作(如map、filter和groupBy等)來創建RDD。Spark允許RDD為用戶的計算找到一個有效的計劃,用戶的轉換操作返回一個表示計算結果的新RDD對象,當一個動作被調用時,Spark會查看用于創建執行計劃的整個轉換圖,進而進行計算。
除了提供數據共享和各種并行操作外,RDD還可以自動從故障中恢復,因而具有很強的容錯能力。……