RDD模型
Spark是Berkeley大學AMP(stands for?Algorithms, Machines, and People)實驗室開發的一個項目。它是一個基于RDD(Resilient Distributed Datasets)模型,能夠支持計算MapReduce模式的作業,主要用于迭代計算和交互式數據計算等中間結果可重用的分布式計算框架。Spark 將數據緩存在內存中從而減少數據的訪問延遲。
1. RDD
RDD,即可伸縮的分布式數據集合,管理數據緩存和數據重用,采用分析日志方式支持數據容錯,提供了粗粒度的事務處理接口(map,filter,join)。RDD 對數據記錄進行分區存儲,本身是只讀的。RDD 的數據來源:1) 穩定的存儲介質;2) 其它的RDD存儲的數據。RDD對程序員開發了兩種操作:數據存儲和分區。RDD本身不做物理儲存,通過保存足夠的信息去實際的儲存中計算出RDD,可以將RDD視為松散的虛擬內存[1]。
2. RDD v.s. DSM
RDD相比于DSM(共享內存)有如下的不同
| Aspect | RDDS | DSM |
| Reads | Coarse- or fine-grained | Fine-grained |
| Writes | Coarese-grained | Fine-grained |
| Consistency | Trivial (immutable) | Up to app / runtime |
| Fault recovery | Frine-grained and low-overhead using lineage | Requires checkpoints and program rollback |
| Straggler mitigation | Possible using backup tasks | Difficult |
| Work placement | Automatic based on data locality | Up to app |
| Behavior if not enough RAM | Similar to existing data flow systems | Poor perfermance? |
3. 共享變量[2]
當Spark并發運行一個函數時,它是以多個的task,在不同的結點上運行,它傳遞每一個變量的一個拷貝,到每一個獨立task使用到的函數中,因此這些變量并非共享的。然而有時候,我們需要在任務中能夠被共享的變量,或者在任務與驅動程序之間共享。Spark支持兩種類型的共享變量:
? ???廣播變量: ??? ?可以在內存的所有結點中被訪問,用于緩存變量(只讀)
? ???累加器: ? ? ? ? 只能用來做加法的變量,例如計數和求和
4. Spark編程模型
Spark 使用 Scala 語言編寫,分布式事務管理使用Mesos,并支持HDFS文件系統,是一個輕量級的框架。其0.5版有1,4000行代碼。
開發者編寫 Driver 控制集群中的 worker。一個Driver定義了一個或多個RDD,并能夠記錄RDD之間的進化關系。worker是一個長進行,將存儲了RDD分區存儲在內存中執行操作。RDD數據集上定義了兩種操作[3]:action 和 transformation。action,即在數據集上執行計算,并向driver返回一個值;transformation,即從已有數據集創建新的數據集。
轉載于:https://www.cnblogs.com/valder/archive/2012/08/27/2658090.html
總結
- 上一篇: 《实用技巧》——让你的网站变成响应式的3
- 下一篇: Docfetcher – 本地硬盘上的