spark笔记

原文: 点击打开链接

這篇文章的目的是 讓想理解Spark 這高速運算核心概念的人看得

我會試著用自己的話讓大家理解
讓大家可以淺顯易懂的理解核心技術 RDD(Resilient Distributed Datasets)

 

---------------------------------------前言-----------------------------------------------------------------

首先先來看MapReduce 為我們做了什麼

MapReduce 成功的在大資料(Big Data)的分散式環境下分析運算資料

然而在某些運算或演算法執行下 MapReduce 就顯得不夠力 

舉凡最著名的兩個場景

1.迭代式運算(Iterative Jobs) : 如:機器學習演算法, 分類演算法          (這類演算法要不斷執行同個步驟 且每個步驟以上個結果為輸入)

2.交互式分析(Iterative Analyst) : 如:馬克霍夫矩陣                         (求長遠時間之後的平衡狀態為何)

為什麼MapReduce不適合執行上述之場景呢?由下圖解釋

  1  

上圖敘述一般預設的狀態下 MapReduce 執行過程中 必須將工作的結果存回HDFS中 

但是在需要不斷運算的場景下 (像是要重複算上萬次得到結果) 這一來一往的I/O將十分龐大

原因其實是 MapReduce一開始就不是為了這些場景而去設計的 自然會有這些問題

其實是我們的需求增加而產生這樣的問題

 

 

上述問題讓我發現MapReduce缺少一個重要的要素

有效的資料共享(efficient data sharing)

而Spark即提出一個能解決的問題的效果

In-Memory Data Processing and Sharing

2  

若是能將中間運算結果直間存於Memory 中 那自然就會快速許多

而要如何設計一個 高容錯(tolerant) 高效能(efficient)的結構?

這是RDD的設計概念由來Resilient Distribute Datasets

 

 

---------------------------------------RDD介紹----------------------------------------------------

首先先看一下RDD長什麼樣子

3  

Partition是資料分片 可能會在不同的機器上 

而RDD則是指一個資料分片的集合 大多數情況都存於Memory中   (即一個RDD裡會有多個在不同機器上的partition)

4  

照官方文件說法 實際上一個RDD會有以上五樣東西 

1.每個partition位置

2.與父RDD的依賴關西

3.父RDD經過何種運算得到此RDD的 (function) 

以上三樣在RDD概念裡主要是為了實現 血統關係(lineage)  主要是為了容錯而設計的 在稍後的RDD容錯機制會詳細敘述 

先來看看RDD是如何被使用來運算的

 

RDD有兩種運算方式

1.Transformations: 懶惰(lazy)運算 會製造出新的RDD

2.Action: 執行一個運算並return結果或是存到Storage裡

5  

以上列了相關運算是怎麼分的

6  

以上是一個詳細的圖解運算過程中 其實會不斷的產生新的RDD 最後在生成結果

7  

Loading an RDD or performing a transformation on one does not trigger any data processing; it merely creates a plan for performing a computation. The computation is only triggered when an action (like foreach()) is performed on an RDD.

所以整個RDD執行不外乎此圖

 

-----------------------------RDD容錯機制---------------------------------------------

清楚了RDD運算過程後

必須提到他是如何容錯的

場景如下  

8  

當有RDD遺失時

會根據前面提到的血統關係(lineage)來重新計算所需RDD

所以實際上Spark是沒有replication機制

但明顯的要是 失去的RDD剛好是要計算出結果的1萬次運算的9999次怎麼辦?

那不是等於要重算嗎?

所以Spark還提供一個客製化的機制CheckPoint

由使用者自己設計儲存點 在這點的RDD會存於Storage 以免遺失

所以實際上Spark經由lineage 與 CheckPoint來執行容錯

 

-------------------------------------------結論-------------------------------------------

Spark的核心技術是RDD

所以要了解Spark 要先理解RDD是如何設計的 跟 優勢為何

整個Spark的工作流程如下

9 


展开阅读全文

没有更多推荐了,返回首页