==[機(jī)制]RDD~理解Spark的核心RDD


理解Spark的核心RDD
http://www.infoq.com/cn/articles/spark-core-rdd/

//摘要
【RDD將操作分為兩類:transformation與action。無(wú)論執(zhí)行了多少次transformation操作掌逛,RDD都不會(huì)真正執(zhí)行運(yùn)算,只有當(dāng)action操作被執(zhí)行時(shí)津滞,運(yùn)算才會(huì)觸發(fā)】铝侵。而在RDD的內(nèi)部實(shí)現(xiàn)機(jī)制中,【底層接口則是基于迭代器的触徐,從而使得數(shù)據(jù)訪問(wèn)變得更高效咪鲜,也避免了大量中間結(jié)果對(duì)內(nèi)存的消耗】。

總結(jié)
RDD是Spark的核心撞鹉,也是整個(gè)Spark的架構(gòu)基礎(chǔ)疟丙。它的特性可以總結(jié)如下:
它是不變的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)
它是支持跨集群的分布式數(shù)據(jù)結(jié)構(gòu)
可以根據(jù)數(shù)據(jù)記錄的key對(duì)結(jié)構(gòu)進(jìn)行分區(qū)
提供了粗粒度的操作,且這些操作都支持分區(qū)
它將數(shù)據(jù)存儲(chǔ)在內(nèi)存中鸟雏,從而提供了低延遲性

//


Paste_Image.png

與許多專有的大數(shù)據(jù)處理平臺(tái)不同隆敢,Spark建立在【統(tǒng)一抽象的RDD之上,使得它可以以基本一致的方式應(yīng)對(duì)不同的大數(shù)據(jù)處理場(chǎng)景崔慧,包括MapReduce,Streaming穴墅,SQL惶室,Machine Learning以及Graph等】。這即Matei Zaharia所謂的“設(shè)計(jì)一個(gè)【通用的編程抽象(Unified Programming Abstraction)】玄货。這正是Spark這朵小火花讓人著迷的地方皇钞。
要理解Spark,就需得理解RDD松捉。
RDD是什么夹界?
RDD,全稱為Resilient Distributed Datasets隘世,是一個(gè)容錯(cuò)的可柿、并行的數(shù)據(jù)結(jié)構(gòu),可以讓用戶顯式地將數(shù)據(jù)存儲(chǔ)到磁盤和內(nèi)存中丙者,并能控制【數(shù)據(jù)的分區(qū)】复斥。同時(shí),RDD還提供了一組豐富的操作來(lái)【操作這些數(shù)據(jù)】械媒。在這些操作中目锭,諸如【map、flatMap纷捞、filter等轉(zhuǎn)換操作】實(shí)現(xiàn)了monad模式痢虹,很好地契合了Scala的【集合操作】。除此之外主儡,RDD還提供了諸如join奖唯、groupBy、reduceByKey等更為方便的操作(注意缀辩,reduceByKey是action臭埋,而非transformation)踪央,以支持常見(jiàn)的數(shù)據(jù)運(yùn)算。
通常來(lái)講瓢阴,針對(duì)數(shù)據(jù)處理有幾種常見(jiàn)模型畅蹂,包括:Iterative Algorithms,Relational Queries荣恐,MapReduce液斜,Stream Processing。例如Hadoop MapReduce采用了MapReduces模型叠穆,Storm則采用了Stream Processing模型少漆。【RDD混合了這四種模型硼被,使得Spark可以應(yīng)用于各種大數(shù)據(jù)處理場(chǎng)景】示损。
【RDD作為數(shù)據(jù)結(jié)構(gòu),本質(zhì)上是一個(gè)只讀的分區(qū)記錄集合】嚷硫。一個(gè)RDD可以包含多個(gè)分區(qū)检访,每個(gè)分區(qū)就是一個(gè)dataset片段。RDD可以相互依賴仔掸。如果RDD的每個(gè)分區(qū)最多只能被一個(gè)Child RDD的一個(gè)分區(qū)使用脆贵,則稱之為narrow dependency;若多個(gè)Child RDD分區(qū)都可以依賴起暮,則稱之為wide dependency卖氨。不同的操作依據(jù)其特性,可能會(huì)產(chǎn)生不同的依賴负懦。例如map操作會(huì)產(chǎn)生narrow dependency筒捺,而join操作則產(chǎn)生wide dependency。
Spark之所以將依賴分為narrow與wide密似,基于兩點(diǎn)原因焙矛。
首先,【narrow dependencies可以支持在同一個(gè)cluster node上以管道形式執(zhí)行多條命令残腌,例如在執(zhí)行了map后村斟,緊接著執(zhí)行filter】。相反抛猫,【wide dependencies需要所有的父分區(qū)都是可用的蟆盹,可能還需要調(diào)用類似MapReduce之類的操作進(jìn)行跨節(jié)點(diǎn)傳遞】。
其次闺金,則是從失敗恢復(fù)的角度考慮逾滥。narrow dependencies的失敗恢復(fù)更有效,因?yàn)樗恍枰匦掠?jì)算丟失的parent partition即可,而且可以并行地在不同節(jié)點(diǎn)進(jìn)行重計(jì)算寨昙。而wide dependencies牽涉到RDD各級(jí)的多個(gè)Parent Partitions讥巡。下圖說(shuō)明了narrow dependencies與wide dependencies之間的區(qū)別:

【RDD將操作分為兩類:transformation與action。無(wú)論執(zhí)行了多少次transformation操作舔哪,RDD都不會(huì)真正執(zhí)行運(yùn)算欢顷,只有當(dāng)action操作被執(zhí)行時(shí),運(yùn)算才會(huì)觸發(fā)】捉蚤。而在RDD的內(nèi)部實(shí)現(xiàn)機(jī)制中抬驴,【底層接口則是基于迭代器的,從而使得數(shù)據(jù)訪問(wèn)變得更高效缆巧,也避免了大量中間結(jié)果對(duì)內(nèi)存的消耗】布持。


Spark快速入門指南 - 夢(mèng)里花落的博客 - 博客頻道 - CSDN.NET
http://blog.csdn.net/qq_19244267/article/details/46456873

【RDDs提供actions操作,通過(guò)它可以返回值陕悬;同時(shí)還提供 transformations操作题暖,通過(guò)它可以返回一個(gè)新的RDD的引用】。如下:
1 scala> textFile.count() // Number of items in this RDD
2 res1: Long = 108

我們?cè)僭囋噒ransformations操作捉超,下面的例子中我們通過(guò)使用filter transformation來(lái)一個(gè)新的RDD:
1 scala> val linesWithSpark = textFile.filter(line => line.contains("Spark"))
2 linesWithSpark: org.apache.spark.rdd.RDD[String] = FilteredRDD[4] at
3 filter at <console>:14

我們將transformations操作和actions操作連起來(lái)操作:
1 scala> textFile.filter(line => line.contains("Spark")).count()
2 res3: Long = 15

更多關(guān)于RDD上面的操作
  RDD的transformations操作和actions操作可以用于更復(fù)雜的計(jì)算芙委。下面的例子是找出README.md文件中單詞數(shù)最多的行有多少個(gè)單詞
1 scala> var size = textFile.map(line=>line.split(" ").size)
2 scala> size.reduce((a, b)=>if (a > b) a else b)
3 res4: Long = 15
map函數(shù)負(fù)責(zé)將line按照空格分割,并得到這行單詞的數(shù)量狂秦,而reduce函數(shù)將獲取文件中單詞數(shù)最多的行有多少個(gè)單詞。map和reduce函數(shù)的參數(shù)是Scala的函數(shù)式編程風(fēng)格推捐。我們可以直接用Java里面的Math.max()函數(shù)裂问,這樣會(huì)使得這段代碼更好理解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市牛柒,隨后出現(xiàn)的幾起案子堪簿,更是在濱河造成了極大的恐慌,老刑警劉巖皮壁,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椭更,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蛾魄,警方通過(guò)查閱死者的電腦和手機(jī)虑瀑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)滴须,“玉大人舌狗,你說(shuō)我怎么就攤上這事∪铀” “怎么了痛侍?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)魔市。 經(jīng)常有香客問(wèn)我主届,道長(zhǎng)赵哲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任君丁,我火速辦了婚禮枫夺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谈截。我一直安慰自己筷屡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布簸喂。 她就那樣靜靜地躺著毙死,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喻鳄。 梳的紋絲不亂的頭發(fā)上扼倘,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天,我揣著相機(jī)與錄音除呵,去河邊找鬼再菊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛颜曾,可吹牛的內(nèi)容都是我干的纠拔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼泛豪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼稠诲!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起诡曙,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤臀叙,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后价卤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劝萤,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年慎璧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了床嫌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胸私,死狀恐怖既鞠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盖文,我是刑警寧澤嘱蛋,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響洒敏,放射性物質(zhì)發(fā)生泄漏龄恋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一凶伙、第九天 我趴在偏房一處隱蔽的房頂上張望郭毕。 院中可真熱鬧,春花似錦函荣、人聲如沸显押。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)乘碑。三九已至,卻和暖如春金拒,著一層夾襖步出監(jiān)牢的瞬間兽肤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工绪抛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留资铡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓幢码,卻偏偏與公主長(zhǎng)得像笤休,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子症副,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容