Spark(這裏只談批處理)必知

1.what這個技術是什麼

官方文檔定義

Apache Spark™ is a unified analytics engine for large-scale data processing. 就是大數據分析引擎,至於unified(統一),應該是因爲下圖。

Combine SQL, streaming, and complex analytics.

Spark powers a stack of libraries including SQL and DataFramesMLlib for machine learning, GraphX, and Spark Streaming. You can combine these libraries seamlessly in the same application.

 

對比同類技術的優缺點,適用場景

MapReduce架構:

MapReduce的處理技術符合使用鍵值對的map、shuffle、reduce算法要求。基本處理過程包括:

從HDFS文件系統讀取數據集

將數據集拆分成小塊並分配給所有可用節點

針對每個節點上的數據子集進行計算(計算的中間態結果會重新寫入HDFS)

重新分配中間態結果並按照鍵進行分組

通過對每個節點計算的結果進行彙總和組合對每個鍵的值進行“Reducing”

將計算而來的最終結果重新寫入 HDFS

優勢和侷限

由於這種方法嚴重依賴持久存儲,每個任務需要多次執行讀取和寫入操作,因此速度相對較慢。但另一方面由於磁盤空間通常是服務器上最豐富的資源,這意味着MapReduce可以處理非常海量的數據集。同時也意味着相比其他類似技術,Hadoop的MapReduce通常可以在廉價硬件上運行,因爲該技術並不需要將一切都存儲在內存中

spark架構:

Spark的數據處理工作全部在內存中進行,只在一開始將數據讀入內存,以及將最終結果持久存儲時需要與存儲層交互。所有中間態的處理結果均存儲在內存中。

Spark在處理與磁盤有關的任務時速度也有很大提升,因爲通過提前對整個任務集進行分析可以實現更完善的整體式優化。爲此Spark可創建代表所需執行的全部操作,需要操作的數據,以及操作和數據之間關係的Directed Acyclic Graph(有向無環圖),即DAG,藉此處理器可以對任務進行更智能的協調。(就是分stage,同一stage可以併發進行)

Spark會使用一種名爲Resilient Distributed Dataset(彈性分佈式數據集),即RDD的模型來處理數據。這是一種代表數據集,只位於內存中,永恆不變的結構。針對RDD執行的操作可生成新的RDD。每個RDD可通過世系(Lineage)回溯至父級RDD,並最終回溯至磁盤上的數據。Spark可通過RDD在無需將每個操作的結果寫回磁盤的前提下實現容錯

啓動時延

注意,本文的多進程和多線程,指的是同一個節點上多個任務的運行模 式。無論是MapReduce和Spark,整體上看,都是多進程:MapReduce應用程序是由多個獨立的Task進程組成的;Spark應用程序的 運行環境是由多個獨立的Executor進程構建的臨時資源池構成的。

多進程模型便於細粒度控制每個任務佔用的資源,但會消耗較多的啓動時間,不適合運行低延遲類型的作業,這是MapReduce廣爲詬病的原因之一。而多線程模型則相反,該模型使得Spark很適合運行低延遲類型的作業。總之,Spark同節點上的任務以多線程的方式運行在一個JVM進程中,可帶來以下好處:

1)任務啓動速度快,與之相反的是MapReduce Task進程的慢啓動速度,通常需要1s左右;

2)同節點上所有任務運行在一個進程中,有利於共享內存。這非常適合內存密集型任務,尤其對於那些需要加載大量詞典的應用程序,可大大節省內存。

3) 同節點上所有任務可運行在一個JVM進程(Executor)中,且Executor所佔資源可連續被多批任務使用,不會在運行部分任務後釋放掉,這避免 了每個任務重複申請資源帶來的時間開銷,對於任務數目非常多的應用,可大大降低運行時間。與之對比的是MapReduce中的Task:每個Task單獨 申請資源,用完後馬上釋放,不能被其他任務重用,儘管1.0支持JVM重用在一定程度上彌補了該問題,但2.0尚未支持該功能。

 

儘管Spark的多線程模型帶來了很多好處,但同樣存在不足,主要有:

1)由於同節點上所有任務運行在一個進程中,因此,會出現嚴重的資源爭用,難以細粒度控制每個任務佔用資源。與之相 反的是MapReduce,它允許用戶單獨爲Map Task和Reduce Task設置不同的資源,進而細粒度控制任務佔用資源量,有利於大作業的正常平穩運行。

 

此技術的架構組成

宏觀

  1. 構建Spark Application的運行環境,啓動SparkContext
  2. SparkContext向資源管理器(可以是Standalone,Mesos,Yarn)申請運行Executor資源,並啓動StandaloneExecutorbackend,
  3. Executor向SparkContext申請Task
  4. SparkContext將應用程序分發給Executor
  5. SparkContext構建成DAG圖,將DAG圖分解成Stage、將Taskset發送給Task Scheduler,最後由Task Scheduler將Task發送給Executor運行
  6. Task在Executor上運行,運行完釋放所有資源

微觀dag

1.RDD的操作排列,每個操作(transform或者action)都會生成新RDD,也就是有依賴的RDD之間的關係,比如RDD1------->RDD2(RDD1生成RDD2),RDD2依賴於RDD1。

2.區分依賴

 

3.用依賴區分stage(同一個stage裏面的task是可以併發執行的,下一個stage要等前一個stage ready)

https://blog.csdn.net/abcd1101/article/details/86562880

 

2.why爲什麼有這個技術

此技術解決什麼問題

Spark可以將Hadoop集羣中的應用在內存中的運行速度提升100倍。

 1. Spark是基於內存的迭代計算框架,適用於需要多次操作特定數據集的應用場合。需要反覆操作的次數越多,所需讀取的數據量越大,受益越大,數據量小但是計算密集度較大的場合,受益就相對較小;

  2. 由於RDD的特性,Spark不適用那種異步細粒度更新狀態的應用,例如web服務的存儲或者是增量的web爬蟲和索引。就是對於那種增量修改的應用模型不適合:

  3. 數據量不是特別大,但是要求實時統計分析需求。(海量用mapreduce,大量用spark,實時用flink?)

  滿足以上條件的均可採用Spark技術進行處理,在實際應用中,目前大數據在互聯網公司主要應用在廣告、報表、推薦系統等業務上,在廣告業務方面需要大數據做應用分析、效果分析、定向優化等,在推薦系統方面則需要大數據優化相關排名、個性化推薦以及熱點點擊分析等。

  這些應用場景的普遍特點是計算量大、效率要求高,Spark恰恰可以滿足這些要求,該項目一經推出便受到開源社區的廣泛關注和好評,並在近兩年內發展成爲大數據處理領域炙手可熱的開源項目。

 

3.how怎麼學這個技術

quickstart

https://blog.csdn.net/abcd1101/article/details/86562778

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章