国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

什么是 RDD ?

yanest / 1224人閱讀

摘要:相反,款依賴需要所有父分區(qū)都是可用的。這是默認(rèn)的存儲級別。,迭代函數(shù)和計(jì)算函數(shù)是用來表示怎樣通過父計(jì)算得到的。迭代函數(shù)首先會判斷緩存中是否有想要計(jì)算的,如果有就直接讀取,如果沒有就查找想要計(jì)算的是否被檢查點(diǎn)處理過。

Spark 中最基本的數(shù)據(jù)抽象是 RDD。

RDD:彈性分布式數(shù)據(jù)集 (Resilient Distributed DataSet)。

1,RDD 有三個(gè)基本特性

這三個(gè)特性分別為:分區(qū),不可變,并行操作。

a, 分區(qū)

每一個(gè) RDD 包含的數(shù)據(jù)被存儲在系統(tǒng)的不同節(jié)點(diǎn)上。邏輯上我們可以將 RDD 理解成一個(gè)大的數(shù)組,數(shù)組中的每個(gè)元素就代表一個(gè)分區(qū) (Partition) 。

在物理存儲中,每個(gè)分區(qū)指向一個(gè)存儲在內(nèi)存或者硬盤中的數(shù)據(jù)塊 (Block) ,其實(shí)這個(gè)數(shù)據(jù)塊就是每個(gè) task 計(jì)算出的數(shù)據(jù)塊,它們可以分布在不同的節(jié)點(diǎn)上。

所以,RDD 只是抽象意義的數(shù)據(jù)集合,分區(qū)內(nèi)部并不會存儲具體的數(shù)據(jù),只會存儲它在該 RDD 中的 index,通過該 RDD 的 ID 和分區(qū)的 index 可以唯一確定對應(yīng)數(shù)據(jù)塊的編號,然后通過底層存儲層的接口提取到數(shù)據(jù)進(jìn)行處理。

在集群中,各個(gè)節(jié)點(diǎn)上的數(shù)據(jù)塊會盡可能的存儲在內(nèi)存中,只有當(dāng)內(nèi)存沒有空間時(shí)才會放入硬盤存儲,這樣可以最大化的減少硬盤 IO 的開銷。

b,不可變

不可變性是指每個(gè) RDD 都是只讀的,它所包含的分區(qū)信息是不可變的。由于已有的 RDD 是不可變的,所以我們只有對現(xiàn)有的 RDD 進(jìn)行轉(zhuǎn)化 (Transformation) 操作,才能得到新的 RDD ,一步一步的計(jì)算出我們想要的結(jié)果。

這樣會帶來這樣的好處:我們在 RDD 的計(jì)算過程中,不需要立刻去存儲計(jì)算出的數(shù)據(jù)本身,我們只要記錄每個(gè) RDD 是經(jīng)過哪些轉(zhuǎn)化操作得來的,即:依賴關(guān)系,這樣一方面可以提高計(jì)算效率,一方面是錯誤恢復(fù)會更加容易。如果在計(jì)算過程中,第 N 步輸出的 RDD 的節(jié)點(diǎn)發(fā)生故障,數(shù)據(jù)丟失,那么可以根據(jù)依賴關(guān)系從第 N-1 步去重新計(jì)算出該 RDD,這也是 RDD 叫做**"彈性"**分布式數(shù)據(jù)集的一個(gè)原因。

c,并行操作

因?yàn)?RDD 的分區(qū)特性,所以其天然支持并行處理的特性。即不同節(jié)點(diǎn)上的數(shù)據(jù)可以分別被處理,然后生成一個(gè)新的 RDD。

2,RDD 的結(jié)構(gòu)

每個(gè) RDD 里都會包括分區(qū)信息、依賴關(guān)系等等的信息,如下圖所示:

a,Partitions

Partitions 就是上面所說的,代表著 RDD 中數(shù)據(jù)的邏輯結(jié)構(gòu),每個(gè) Partion 會映射到某個(gè)節(jié)點(diǎn)內(nèi)存或者硬盤的一個(gè)數(shù)據(jù)塊。

b,SparkContext

SparkContext 是所有 Spark 功能的入口,代表了與 Spark 節(jié)點(diǎn)的連接,可以用來創(chuàng)建 RDD 對象以及在節(jié)點(diǎn)中的廣播變量等等。一個(gè)線程只有一個(gè) SparkContext。

c,SparkConf

SparkConf 是一些配置信息。

d,Partitioner

Partitioner 決定了 RDD 的分區(qū)方式,目前兩種主流的分區(qū)方式:Hash partioner 和 Range partitioner。Hash 就是對數(shù)據(jù)的 Key 進(jìn)行散列分布,Rang 是按照 Key 的排序進(jìn)行的分區(qū)。也可以自定義 Partitioner。

e,Dependencies

Dependencies 也就是依賴關(guān)系,記錄了該 RDD 的計(jì)算過程,也就是說這個(gè) RDD 是通過哪個(gè) RDD 經(jīng)過怎么樣的轉(zhuǎn)化操作得到的。

這里有個(gè)概念,根據(jù)每個(gè) RDD 的分區(qū)計(jì)算后生成的新的 RDD 的分區(qū)的對應(yīng)關(guān)系,可以分成窄依賴和寬依賴。

窄依賴就是父 RDD 的分區(qū)可以一一對應(yīng)到子 RDD 的分區(qū),寬依賴是說父 RDD 的每個(gè)分區(qū)可以被多個(gè)子 RDD 分區(qū)使用。如圖:

由于窄依賴的特性,窄依賴允許子 RDD 的每個(gè)分區(qū)可以被并行處理產(chǎn)生,而且支持在同一個(gè)節(jié)點(diǎn)上鏈?zhǔn)綀?zhí)行多條指令,無需等待其它父 RDD 的分區(qū)操作。

Spark 區(qū)分寬窄依賴的原因主要有兩點(diǎn):

    窄依賴支持在同一節(jié)點(diǎn)上進(jìn)行鏈?zhǔn)讲僮?,比如在?zhí)行了 map 后,緊接著執(zhí)行 filter 操作。相反,款依賴需要所有父分區(qū)都是可用的。

    從失敗恢復(fù)的角度考慮,窄依賴失敗恢復(fù)更有效,因?yàn)橹灰匦掠?jì)算丟失的父分區(qū)即可,而寬依賴涉及到 RDD 的各級多個(gè)父分區(qū)。

f,Checkpoint

檢查點(diǎn)機(jī)制,在計(jì)算過程中有一些比較耗時(shí)的 RDD,我們可以將它緩存到硬盤或者 HDFS 中,標(biāo)記這個(gè) RDD 有被檢查點(diǎn)處理過,并且清空它的所有依賴關(guān)系。同時(shí),給它新建一個(gè)依賴于 CheckpointRDD 的依賴關(guān)系,CheckpintRDD 可以用來從 硬盤中讀取 RDD 和生成新的分區(qū)信息。

這么做之后,當(dāng)某個(gè) RDD 需要錯誤恢復(fù)時(shí),回溯到該 RDD,發(fā)現(xiàn)它被檢查點(diǎn)記錄過,就可以直接去硬盤讀取該 RDD,無需重新計(jì)算。

g,Preferred Location

針對每一個(gè)分片,都會選擇一個(gè)最優(yōu)的位置來計(jì)算,數(shù)據(jù)不動,代碼動。

h,Storage Level

用來記錄 RDD 持久化時(shí)存儲的級別,常用的有:

    MEMORY_ONLY:只存在緩存中,如果內(nèi)存不夠,則不緩存剩余的部分。這是 RDD 默認(rèn)的存儲級別。

    MEMORY_AND_DISK:緩存在內(nèi)存中,不夠則緩存至內(nèi)存。

    DISK_ONLY:只存硬盤。

    MEMORY_ONLY_2 和 MEMORY_AND_DISK_2等:與上面的級別和功能相同,只不過每個(gè)分區(qū)在集群兩個(gè)節(jié)點(diǎn)上建立副本。

i,Iterator

迭代函數(shù)和計(jì)算函數(shù)是用來表示 RDD 怎樣通過父 RDD 計(jì)算得到的。

迭代函數(shù)首先會判斷緩存中是否有想要計(jì)算的 RDD,如果有就直接讀取,如果沒有就查找想要計(jì)算的 RDD 是否被檢查點(diǎn)處理過。如果有,就直接讀取,如果沒有,就調(diào)用計(jì)算函數(shù)向上遞歸,查找父 RDD 進(jìn)行計(jì)算。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/7189.html

相關(guān)文章

  • 『 Spark 』4. spark 之 RDD

    摘要:是設(shè)計(jì)用來表示數(shù)據(jù)集的一種數(shù)據(jù)結(jié)構(gòu)。而正因?yàn)闈M足了這么多特性,所以把叫做,中文叫做彈性分布式數(shù)據(jù)集。按照這篇論文中文譯文的解釋,窄依賴是指子的每個(gè)分區(qū)依賴于常數(shù)個(gè)父分區(qū)即與數(shù)據(jù)規(guī)模無關(guān)寬依賴指子的每個(gè)分區(qū)依賴于所有父分區(qū)。 原文鏈接 寫在前面 本系列是綜合了自己在學(xué)習(xí)spark過程中的理解記錄 + 對參考文章中的一些理解 + 個(gè)人實(shí)踐spark過程中的一些心得而來。寫這樣一個(gè)系列僅僅是...

    timger 評論0 收藏0
  • 『 Spark 』2. spark 基本概念解析

    摘要:原文基本概念解析寫在前面本系列是綜合了自己在學(xué)習(xí)過程中的理解記錄對參考文章中的一些理解個(gè)人實(shí)踐過程中的一些心得而來。是項(xiàng)目組設(shè)計(jì)用來表示數(shù)據(jù)集的一種數(shù)據(jù)結(jié)構(gòu)。 原文:『 Spark 』2. spark 基本概念解析 寫在前面 本系列是綜合了自己在學(xué)習(xí)spark過程中的理解記錄 + 對參考文章中的一些理解 + 個(gè)人實(shí)踐spark過程中的一些心得而來。寫這樣一個(gè)系列僅僅是為了梳理個(gè)人學(xué)習(xí)...

    Luosunce 評論0 收藏0

發(fā)表評論

0條評論

yanest

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<