Spark RDD

2018-12-20 10:08 更新

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

彈性分布式數(shù)據(jù)集(RDD)是Spark的基本數(shù)據(jù)結(jié)構(gòu)。它是一個不可變的分布式對象集合。 RDD中的每個數(shù)據(jù)集劃分為邏輯分區(qū),可以在集群的不同節(jié)點上計算。 RDD可以包含任何類型的Python,Java或Scala對象,包括用戶定義的類。

形式上,RDD是只讀的,分區(qū)的記錄集合。 RDD可以通過對穩(wěn)定存儲器或其他RDD上的數(shù)據(jù)的確定性操作來創(chuàng)建。 RDD是可以并行操作的元件的容錯集合。

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

Spark使用RDD的概念來實現(xiàn)更快和更高效的MapReduce操作。讓我們首先討論MapReduce操作是如何發(fā)生的,以及為什么它們不那么高效。

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

MapReduce被廣泛應用于在集群上使用并行的分布式算法來處理和生成大型數(shù)據(jù)集。它允許用戶使用一組高級操作符來編寫并行計算,而不必擔心工作分布和容錯。

不幸的是,在大多數(shù)當前框架中,在計算之間重復使用數(shù)據(jù)(例如:兩個MapReduce作業(yè)之間)的唯一方法是將其寫入外部穩(wěn)定存儲系統(tǒng)(例如:HDFS)。雖然這個框架提供了訪問集群的計算資源的許多抽象,用戶仍然想要更多。

迭代和交互應用程序都需要跨并行作業(yè)更快的數(shù)據(jù)共享。由于復制,序列化和磁盤IO,MapReduce中的數(shù)據(jù)共享速度很慢。關(guān)于存儲系統(tǒng),大多數(shù)Hadoop應用程序,他們花費90%以上的時間做HDFS讀寫操作。

MapReduce迭代運算

在多階段應用程序中跨多個計算重用中間結(jié)果。下圖說明了當前框架如何工作,同時對MapReduce執(zhí)行迭代操作。這會由于數(shù)據(jù)復制,磁盤I / O和序列化而招致大量開銷,這使得系統(tǒng)變慢。

MapReduce的迭代操作

MapReduce上的交互操作

用戶對同一數(shù)據(jù)子集運行即席查詢。 每個查詢將對穩(wěn)定存儲執(zhí)行磁盤I / O,這可以支配應用程序執(zhí)行時間。
下圖說明了當在MapReduce上執(zhí)行交互式查詢時當前框架如何工作。

MapReduce的交互式操作

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

由于復制序列化磁盤IO,MapReduce中的數(shù)據(jù)共享速度很慢。大多數(shù)Hadoop應用程序,他們花費90%以上的時間做HDFS讀寫操作。
認識到這個問題,研究人員開發(fā)了一個名為Apache Spark的專門框架。 spark的關(guān)鍵思想是彈性分布式數(shù)據(jù)集(RDD);它支持內(nèi)存中處理計算。這意味著,它將存儲器的狀態(tài)存儲為作業(yè)中的對象,并且對象可以在這些作業(yè)之間共享。內(nèi)存中的數(shù)據(jù)共享比網(wǎng)絡和磁盤快10到100倍。
讓我們現(xiàn)在嘗試找出Spark RDD中如何進行迭代和交互操作。

Spark RDD的迭代操作

下圖給出了Spark RDD的迭代操作。它將中間結(jié)果存儲在分布式存儲器中,而不是穩(wěn)定存儲(磁盤),并使系統(tǒng)更快。
注意 - 如果分布式內(nèi)存(RAM)不足以存儲中間結(jié)果(JOB的狀態(tài)),則它將這些結(jié)果存儲在磁盤上

在星火RDD迭代操作

在星火RDD交互式操作

此圖顯示星火RDD交互式操作。如果不同的查詢在同一組數(shù)據(jù)的反復運行,該特定數(shù)據(jù)可被保存在內(nèi)存中獲得更好的執(zhí)行時間。

在星火RDD交互式操作

默認情況下,每次對其執(zhí)行操作時,都可以重新計算每個已轉(zhuǎn)換的RDD。 但是,您還可以在內(nèi)存中保留RDD,在這種情況下,Spark將保持集群上的元素更快的訪問,下次查詢它。 還支持在磁盤上持久存儲RDD,或者跨多個節(jié)點進行復制。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號