【Spark篇】---Spark初始

LHBlog發表於2018-02-01

一、前述

Spark是基於記憶體的計算框架,效能要優於Mapreduce,可以實現hadoop生態圈中的多個元件,是一個非常優秀的大資料框架,是Apache的頂級專案。One stack  rule  them all  霸氣。

但不同於MapReduce的是Job中間輸出結果可以儲存在記憶體中,從而不再需要讀寫HDFS,因此Spark能更好地適用於資料探勘與機器學習等需要迭代的MapReduce的演算法

二、具體細節

1、Spark與MapReduce的區別

 都是分散式計算框架,Spark基於記憶體,MR基於HDFS。Spark處理資料的能力一般是MR的十倍以上,Spark中除了基於記憶體計算外,還有DAG有向無環圖來切分任務的執行先後順序。

2、Spark執行模式

  • Local

             多用於本地測試,如在eclipse,idea中寫程式測試等。

  • Standalone

              StandaloneSpark自帶的一個資源排程框架,它支援完全分散式。

  • Yarn

               Hadoop生態圈裡面的一個資源排程框架Spark也是可以基於Yarn來計算的。

  • Mesos

          資源排程框架。

注意:要基於Yarn來進行資源排程,必須實現AppalicationMaster介面,Spark實現了這個介面,所以可以基於Yarn

3、SparkCore

概念

RDD(Resilient Distributed Dateset),彈性分散式資料集。

RDD的五大特性:(比較重要)

  1. RDD是由一系列的partition組成的。
  2. 函式是作用在每一個partition(split)上的。
  3. RDD之間有一系列的依賴關係。
  4. 分割槽器是作用在K,V格式的RDD上。
  5. RDD提供一系列最佳的計算位置。Partiotion對外提供資料處理的本地化,計算移動,資料不移動。

 

 

備註:

1、textFile方法底層封裝的是讀取MR讀取檔案的方式,讀取檔案之前先split,預設split大小是一個block大小。每個split對應一個partition。

 

2、RDD實際上不儲存資料,儲存的是計算邏輯這裡方便理解,暫時理解為儲存資料。

 

3、什麼是K,V格式的RDD?

  • 如果RDD裡面儲存的資料都是二元組物件,那麼這個RDD我們就叫做K,V格式的RDD。

4、 哪裡體現RDD的彈性(容錯)?

  • partition數量,大小沒有限制,體現了RDD的彈性。Partiotion個數可以控制。可以提高並行度。
  • RDD之間依賴關係,可以基於上一個RDD重新計算出RDD。

5、哪裡體現RDD的分散式?

  • RDD是由Partition組成,partition是分佈在不同節點上的。 RDD提供計算最佳位置,體現了資料本地化。體現了大資料中“計算移動資料不移動”的理念。

4、Spark任務執行原理

 

以上圖中有四個機器節點,Driver和Worker是啟動在節點上的程式,執行在JVM中的程式。

  • Driver與叢集節點之間有頻繁的通訊。
  • Driver負責任務(tasks)的分發和結果的回收任務的排程。如果task的計算結果非常大就不要回收了。會造成oom。
  • Worker是Standalone資源排程框架裡面資源管理的從節點。也是JVM程式。
  • Master是Standalone資源排程框架裡面資源管理的主節點。也是JVM程式。

5、Spark程式碼流程

   1、建立SparkConf物件

 

       SparkConf conf = new SparkConf().setMaster("local").setAppName("xxx")

  • 1.設定執行模式
  • 2.設定application name
  • 3.設定spark執行引數

   2、建立SparkContext物件

          叢集的唯一入口

 

   3、基於Spark的上下文建立一個RDD,對RDD進行處理。

          由SparkContext建立RDD

 

   4、應用程式中要有Action類運算元來觸發Transformation類運算元執行。

   5、關閉Spark上下文物件SparkContext。

 

相關文章