RDD模型
Spark是Berkeley大學(xué)AMP(stands for?Algorithms, Machines, and People)實驗室開發(fā)的一個項目。它是一個基于RDD(Resilient Distributed Datasets)模型,能夠支持計算MapReduce模式的作業(yè),主要用于迭代計算和交互式數(shù)據(jù)計算等中間結(jié)果可重用的分布式計算框架。Spark 將數(shù)據(jù)緩存在內(nèi)存中從而減少數(shù)據(jù)的訪問延遲。
1. RDD
RDD,即可伸縮的分布式數(shù)據(jù)集合,管理數(shù)據(jù)緩存和數(shù)據(jù)重用,采用分析日志方式支持?jǐn)?shù)據(jù)容錯,提供了粗粒度的事務(wù)處理接口(map,filter,join)。RDD 對數(shù)據(jù)記錄進(jìn)行分區(qū)存儲,本身是只讀的。RDD 的數(shù)據(jù)來源:1) 穩(wěn)定的存儲介質(zhì);2) 其它的RDD存儲的數(shù)據(jù)。RDD對程序員開發(fā)了兩種操作:數(shù)據(jù)存儲和分區(qū)。RDD本身不做物理儲存,通過保存足夠的信息去實際的儲存中計算出RDD,可以將RDD視為松散的虛擬內(nèi)存[1]。
2. RDD v.s. DSM
RDD相比于DSM(共享內(nèi)存)有如下的不同
| 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]
當(dāng)Spark并發(fā)運行一個函數(shù)時,它是以多個的task,在不同的結(jié)點上運行,它傳遞每一個變量的一個拷貝,到每一個獨立task使用到的函數(shù)中,因此這些變量并非共享的。然而有時候,我們需要在任務(wù)中能夠被共享的變量,或者在任務(wù)與驅(qū)動程序之間共享。Spark支持兩種類型的共享變量:
? ???廣播變量: ??? ?可以在內(nèi)存的所有結(jié)點中被訪問,用于緩存變量(只讀)
? ???累加器: ? ? ? ? 只能用來做加法的變量,例如計數(shù)和求和
4. Spark編程模型
Spark 使用 Scala 語言編寫,分布式事務(wù)管理使用Mesos,并支持HDFS文件系統(tǒng),是一個輕量級的框架。其0.5版有1,4000行代碼。
開發(fā)者編寫 Driver 控制集群中的 worker。一個Driver定義了一個或多個RDD,并能夠記錄RDD之間的進(jìn)化關(guān)系。worker是一個長進(jìn)行,將存儲了RDD分區(qū)存儲在內(nèi)存中執(zhí)行操作。RDD數(shù)據(jù)集上定義了兩種操作[3]:action 和 transformation。action,即在數(shù)據(jù)集上執(zhí)行計算,并向driver返回一個值;transformation,即從已有數(shù)據(jù)集創(chuàng)建新的數(shù)據(jù)集。
轉(zhuǎn)載于:https://www.cnblogs.com/valder/archive/2012/08/27/2658090.html
總結(jié)
- 上一篇: 《实用技巧》——让你的网站变成响应式的3
- 下一篇: Docfetcher – 本地硬盘上的