最佳球会/周日/乌拉圭英格兰/意甲 - 葡萄牙足球超级联赛排名2324

?

國內外農業大數據應用研究分析(4)



1.3 Spark

Spark是起源于美國加州大學伯克利分校AMPLab的大數據計算平臺,在2010年開源,目前是Apache軟件基金會的頂級項目。2014年11月,Spark在Daytona Gray Sort 100TB Benchmark競賽中利用1/10的節點數,把100TB數據的排序時間從72min提高到了23min,打破了由Hadoop Map Reduce保持的排序記錄。隨著Spark在大數據計算領域的嶄露頭角,越來越多的企業開始關注和使用。

彈性分布式數據集(resilient distributed dataset,RDD)是Spark的最基本抽象,是對分布式內存的抽象使用,實現以操作本地集合的方式來操作分布式數據集的抽象實現。RDD是Spark最核心的東西,其表示已被分區、不可變的、可序列化的、能被并行操作的數據集合,不同的數據集格式對應不同的RDD實現。RDD緩存到內存中,RDD數據集的操作基于內存,節省Map Reduce大量的磁盤IO操作。提升迭代機器學習算法、交互式數據挖掘的效率。

Spark提供多種數據集操作類型,如map,filter,flatMap,sample,groupByKey,reduceByKey,union,join,cogroup,mapValues,sort,partionBy等操作類型,將這些操作類型稱為Transformations。同時還提供Count,collect,reduce,lookup,save等多種Actions。Transformation操作是通過轉換從一個或多個RDD生成新的RDD。Action操作是從RDD生成最后的計算結果。Spark編程模型相對靈活,用戶可以命名、物化、控制中間結果的分區。

Spark架構采用Master-Slave模型。Master對應集群中的含有Master進程的節點,Slave是集群中含有Worker進程的節點。Master作為整個集群的控制器,負責整個集群的正常運行;Worker是計算節點,接收主節點命令與進行狀態匯報;Executor負責任務執行;Client作為用戶的客戶端負責提交應用,Driver負責控制一個應用的執行,如圖6所示。

Spark集群部署后,主節點和從節點分別啟動Master進程和Worker進程,對整個集群進行控制。在Spark應用的執行過程中,Driver程序是應用邏輯執行的起點,負責作業的調度,即Task任務的分發,Worker管理計算節點和創建Executor并行處理任務,Spark Context控制應用的生命周期。DAG Scheduler是根據作業(Job)構建基于Stage的DAG,并提交Stage給Task Scheduler。Task Scheduler將任務(Task)分發給Executor執行。SparkEnv是線程級別的上下文,創建并包含一些重要組件的引用。Cluster Manager控制整個集群,監控Worker。在執行階段,Executor為執行器,是在worker node上執行任務的組件,用于啟動線程運行任務。Driver將Task、file和jar序列化后傳遞給對應的Worker機器,同時Executor對相應數據分區的任務進行處理。

Spark運行的整體流程為:Client提交應用,Master找到一個Worker啟動Driver,Driver向Master或者資源管理器申請資源,將應用轉化為RDD Graph,由DAG Scheduler將RDD Graph轉化為Stage的有向無環圖提交給Task Scheduler,由Task Scheduler提交任務給Executor執行。在任務執行的過程中,其他組件協同工作,確保整個應用順利執行。

Spark采用了內存計算。從多迭代批處理出發,允許將數據載入內存作反復查詢,此外還融合數據倉庫、流處理和圖形計算等多種計算方式。Spark構建在HDFS上,能與Hadoop緊密結合。Spark可用一個技術堆棧解決云計算大數據中流處理、圖技術、機器學習、交互式查詢、誤差查詢等所有的問題,可以快速地處理農業非結構數據,處理速度比Hadoop要快。Spark正在逐漸走向成熟,并在農業大數據分析這個領域扮演更加重要的角色。