spark隨筆

spark基於RDD成功構建起大數據處理的一體化解決方案,將MappReduce、Streaming、SQL、Machine Learning、Graph Processing等
大數據計算模型統一到一個技術堆棧中;Spark的Spark SQL、MLlib、GraphX、Spark Streaming等四大子框架之間能夠在內存中無縫集成
並能夠相互操做彼此的數據
    spark+hadoop,hadoop負責數據存儲和資源管理,spark負責一體化、多元化的不一樣規模的數據計算,而計算是大數據的精髓所在
 
RDD分佈式函數式編程
    RDD(彈性分佈式數據集),RDD被建立後,提供了兩種類型的操做:轉換(transformation)和動做(action),轉換時從原來的RDD構建成新的
 RDD,而動做時經過RDD來計算的結果,並將結果返回給驅動程序或者保存到外部存儲系統
eg val right=lines.filter(lines=>lines.contains("right"))    //right是新的RDD
   right.first()    //action
    動做和轉換的不一樣之處取決於Spark計算RDD的方式,spark在第一次使用代碼中的動做時纔開始計算,spark能夠看到整個變換鏈,它能夠
計算僅須要其結果的數據,對於first()動做,spark只掃描到匹配的第一行,不用讀整個文件,也就是RDDS的惰性轉換
    spark的RDDS在默認狀況下每次都要進行從新計算,若是要重用可使用RDD.persist(持久化方法),能夠持久化到內存或磁盤
    每次調用一個新的動做,整個RDD必須從頭開始計算,爲了提升效率,能夠將中間結果持久化
 
Spark子框架
   Spark Streaming
     RDD之間經過lineage相鏈接,RDD中任意的Partition出錯,均可以並行地在其餘機器上將確實的Partition計算出來,這個容錯恢復方式比連續計算模型(Storm)效率更高
     Spark Streaming將流式計算分解成多個Spark Job,對於每一段數據的處理都會通過Spark DAG圖分解,以及Spark的任務集的調度過程
     實時性,Spark Streaming Batch Size的選取在0.5~2秒之間(Storm相對的最小延遲在100ms)
     吞吐量,Spark Streaming比storm高2~5倍
 
     Spark編程時對於RDD的操做,Spark Streaming是對DStream的操做
     Spark Streaming初始化     在開始進行DStream操做前,對SparkStreaming進行初始化生成StreamingContext
          eg var ssc=new StreamingContext('Spark://...','WordCount',Seconds(1),[Homes],[Jars])     //batch size 1秒輸入的數據進行一次Job處理
     Spark Streaming有特定的窗口操做,涉及兩個參數:一個是滑動窗口的寬度,一個是窗口滑動頻率,必須是batch size的整數倍
          eg 過去5秒爲一個輸入窗口,每1秒統計一下WordCount,咱們會將過去5秒的每一秒的WordCount都進行統計,而後疊加
               val wordCounts=words.map(x=>(x,1)).reduceByKeyAndWindow(-+-,Seconds(5s),Seconds(1))
 
Spark運行模式
     在Yarn出來前,Hadoop MapReduce屬於整個Hadoop生態體系核心,但因爲調度開銷巨大,中間數據寫磁盤致使運行速度慢等缺點,並不適合實時計算等場景
     Spark是一個分佈式內存性計算框架,與yarn結合,是的Spark能夠與MapReduce運行於同一個集羣中
相關文章
相關標籤/搜索