1. 程式人生 > >Spark大資料計算引擎介紹

Spark大資料計算引擎介紹

                          Spark大資料計算引擎介紹

大資料生態的兩個主要部分是Hadoop軟體框架和Spark記憶體級計算引擎。Hadoop包含四個專案:Hadoop common,HDFS,YARN和MapReduce。 
HDFS用於儲存資料,HDFS檔案被劃分成區塊分佈在叢集上; 
用於管理叢集資源(CPU和記憶體)和支援Hadoop的公共實用程式; 
MapReduce是利用磁碟的高I/O操作實現平行計算的框架,但它在迭代計算中效能不足。

Spark的作用相當於MapReduce,它是基於記憶體的計算引擎。Spark將迭代過程的中間資料快取到記憶體中,根據需要多次重複使用。此外,Spark利用RDD結構提升了容錯效能。 
下面給出MapReduce和Spark的對比:

è¿éåå¾çæè¿°

磁碟由於其物理特性現在,速度提升非常困難,遠遠跟不上CPU和記憶體的發展速度。近幾十年來,記憶體的發展一直遵循摩爾定律,價格在下降,記憶體在增加。現在主流的伺服器,幾百GB或幾TB的記憶體都很常見,記憶體的發展使得記憶體資料庫得以實現,Spark正是利用這種計算資源設計的基於記憶體的分散式處理軟體,其目標是取代MapReduce。

Spark可以直接對HDFS進行資料讀寫,支援YARN等部署模式

Spark適合用於多次操作特定資料量大的資料集的場合;資料量小且計算密集度大的場合,其效能提升相對較小。

RDD


在Spark裡,所有的處理和計算任務都會被組織成一系列Resilient Distributed Dataset(彈性分散式資料集,簡稱RDD)上的transformations(轉換) 和 actions(動作)。 
RDD是一個包含諸多元素、被劃分到不同節點上進行並行處理的資料集合,可以將RDD持久化到記憶體中,這樣就可以有效地在並行操作中複用(在機器學習這種需要反覆迭代的任務中非常有效)。 
在節點發生錯誤時RDD也可以根據其Lineage自動計算恢復。 
RDD是Spark的最基本抽象,是對分散式記憶體的抽象使用,以操作本地集合的方式來操作分散式資料集的抽象實現。 
RDD是Spark最核心的內容

,它表示已被分割槽、不可變的、能夠被並行操作的資料集,不同的資料集格式對應不同的RDD實現。 
RDD必須是可序列化的。 
RDD只能從持久儲存或通過Transformation操作產生。(建立方式)

 Spark工作架構

Spark可以分為1個driver(膝上型電腦或者叢集閘道器機器上,使用者編寫的Spark程式)和若干個executor(在RDD分佈的各個節點上)。 
通過SparkContext(簡稱sc)連線Spark叢集、建立RDD、累加器(accumlator)、廣播變數(broadcast variables),簡單可以認為SparkContext是Spark程式的根本。 
Driver會把計算任務分成一系列小的task,然後送到executor執行。executor之間可以通訊,在每個executor完成自己的task以後,所有的資訊會被傳回。 
è¿éåå¾çæè¿°

Spark框架是使用Scala函數語言程式設計語言開發的,支援Java程式設計,Java與Scala可以互操作。此外,Spark提供了Python程式設計介面,Spark使用Py4J實現Python與Java的互操作,從而可以使用Python編寫Spark程式。Spark還提供了一個Python_Shell,即pyspark,從而可以以互動的方式使用Python編寫Spark程式。
 

 

【轉載】:https://blog.csdn.net/cymy001/article/details/78483614

                  https://blog.csdn.net/cymy001/article/details/78483723