鍍金池/ 教程/ 大數(shù)據(jù)/ Apache Spark RDD
Spark 安裝
Spark編程
Spark核心編程
Spark教程
Apache Spark RDD
Spark部署

Apache Spark RDD

彈性分布式數(shù)據(jù)集

彈性分布式數(shù)據(jù)集(RDD)是Spark的基本數(shù)據(jù)結(jié)構(gòu)。它是對(duì)象的不可變的分布式集合。在RDD中每個(gè)數(shù)據(jù)集被劃分成邏輯分區(qū),這可能是在群集中的不同節(jié)點(diǎn)上計(jì)算的。RDDS可以包含任何類(lèi)型,如:Python,Java,或者Scala的對(duì)象,包括用戶定義的類(lèi)。

形式上,一個(gè)RDD是只讀的,分割的記錄集。RDDs 可以數(shù)據(jù)創(chuàng)建通過(guò)確定運(yùn)算在穩(wěn)定的存儲(chǔ)或其他RDDs 。RDD是可以并行進(jìn)行操作元素的容錯(cuò)集合。

有兩種方法來(lái)創(chuàng)建RDDs ? 并行現(xiàn)有集合中的驅(qū)動(dòng)器程序,或在外部存儲(chǔ)系統(tǒng)引用的數(shù)據(jù)集,如共享文件系統(tǒng),HDFS,HBase,或任何數(shù)據(jù)源提供Hadoop的輸入格式。

Spark利用RDD概念,以實(shí)現(xiàn)更快,更高效的MapReduce作業(yè)。讓我們先討論MapReduce如何操作,為什么不那么有效。

數(shù)據(jù)共享是緩慢的MapReduce

MapReduce被廣泛用于處理和生成大型數(shù)據(jù)集并行,分布在集群上的算法。它允許用戶編寫(xiě)并行計(jì)算,使用一組高層次的操作符,而不必?fù)?dān)心工作分配和容錯(cuò)能力。

遺憾的是,目前大多數(shù)的框架,只有這樣,才能重新使用計(jì)算(前 - 兩個(gè)MapReduce工作之間)之間的數(shù)據(jù)是將其寫(xiě)入到一個(gè)穩(wěn)定的外部存儲(chǔ)系統(tǒng)(前- HDFS)。雖然這個(gè)框架提供了大量的抽象訪問(wèn)群集的計(jì)算資源,但用戶還是想要更多。

這兩個(gè)迭代和互動(dòng)應(yīng)用需要跨并行作業(yè)更快速的數(shù)據(jù)共享。數(shù)據(jù)共享MapReduce是緩慢的,因?yàn)閺?fù)制,序列化和磁盤(pán)IO。在存儲(chǔ)系統(tǒng)中,大多數(shù)的 Hadoop 應(yīng)用,它們花費(fèi)的時(shí)間的90%以上是用于做HDFS讀 - 寫(xiě)操作。

MapReduce的迭代操作

重復(fù)使用多個(gè)計(jì)算中間結(jié)果在多級(jí)的應(yīng)用程序。下圖說(shuō)明了如何在當(dāng)前的框架工作,同時(shí)做迭代操作上的MapReduce。這會(huì)帶來(lái)大量的開(kāi)銷(xiāo),由于數(shù)據(jù)復(fù)制,磁盤(pán)I / O,和系列化,使系統(tǒng)變慢。

Iterative Operations on MapReduce

MapReduce的交互式操作

用戶運(yùn)行即席查詢,數(shù)據(jù)的相同子集。每個(gè)查詢會(huì)做穩(wěn)定存儲(chǔ),它可以主宰應(yīng)用程序執(zhí)行的磁盤(pán)I/O時(shí)間。

下圖說(shuō)明了如何在當(dāng)前的框架工作同時(shí)做交互查詢?cè)贛apReduce上。

Interactive Operations on MapReduce

使用Spark RDD數(shù)據(jù)共享

數(shù)據(jù)共享MapReduce是緩慢的,因?yàn)閺?fù)制,序列化和磁盤(pán)IO。大多數(shù)的Hadoop應(yīng)用,他們花費(fèi)的時(shí)間的90%以上是做HDFS讀 - 寫(xiě)操作。

認(rèn)識(shí)到這個(gè)問(wèn)題,研究人員專(zhuān)門(mén)開(kāi)發(fā)了一種稱為Apache Spark框架。spark的核心思想是彈性分布式數(shù)據(jù)集(RDD); 它支持在內(nèi)存中處理運(yùn)算。這意味著,它存儲(chǔ)存儲(chǔ)器的狀態(tài)作為兩端作業(yè)的對(duì)象以及對(duì)象在那些作業(yè)之間是可共享的。在存儲(chǔ)器數(shù)據(jù)共享比網(wǎng)絡(luò)和磁盤(pán)快10到100倍。

現(xiàn)在讓我們理解迭代和交互式操作是如何發(fā)生在Spark RDD中。

Spark RDD迭代操作

下面給出的圖顯示Spark RDD迭代操作。它將存儲(chǔ)中間結(jié)果放在分布式存儲(chǔ)器,而不是穩(wěn)定的存儲(chǔ)(磁盤(pán))和使系統(tǒng)更快。

注 ? 如果分布式存儲(chǔ)器(RAM)足以存儲(chǔ)中間結(jié)果(該作業(yè)狀態(tài)),那么它將存儲(chǔ)這些結(jié)果的磁盤(pán)上。

Iterative Operations on Spark RDD

Spark RDD交互式操作

該圖顯示Spark RDD的交互式操作。如果不同查詢?cè)谕唤M數(shù)據(jù)的反復(fù)運(yùn)行,該特定數(shù)據(jù)可被保存在內(nèi)存中以獲得更好的執(zhí)行時(shí)間。

Interactive Operations on Spark RDD

默認(rèn)情況下,每個(gè)變換RDD可以在每次運(yùn)行在其上的動(dòng)作時(shí)間重新計(jì)算。但是,也可能會(huì)持續(xù)一個(gè)RDD在內(nèi)存中,在這種情況下,Spark將保持周?chē)杭弦垣@得非??焖僭L問(wèn),在你查詢它的下一次用上。另外也用于在磁盤(pán)上持續(xù)RDDS支持,或在多個(gè)節(jié)點(diǎn)間復(fù)制。


上一篇:Spark教程下一篇:Spark 安裝