spark底層核心 RDD詳解

2021-09-10 22:58:19 字數 1983 閱讀 9604

##spark底層核心rdd##

是什麼?

彈性分布式資料集

簡單點就理解成乙個list集合

rdd = {1,2,3}

有什麼屬性?

用idea中注釋的話來解釋有5大屬性

1、乙個分割槽列表,資料集的基本組成單位

rdd以分割槽為單位,乙個分割槽乙個task任務來處理執行,可以在建立rdd時指定rdd的分割槽個數,如果沒有指定,那麼就會採用預設值。

2、乙個計算每個分割槽的函式

sparkrdd計算是以分割槽為單位的,每個rdd都會實現compter計算函式以達到目的

3、乙個rdd,可能會依賴多個rdd(可選項)

乙個rdd由另乙個rdd轉換而來,形成乙個流水線,所以其中哪個rdd丟失可以通過上乙個rdd執行相應的操作得到

4、乙個partitioner,即rdd的分割槽函式

當前spark中實現了兩種型別的分割槽函式,乙個是基於雜湊的hashpartitioner,另外一 個是基於範圍的rangepartitioner。只有對於key-value的rdd,才會有partitioner(必須要產生shuffle),非key-value的rdd的parititioner的值是none。

5、乙個列表,儲存每個partition的優先位置(可選項)

對於乙個hdfs檔案來說,這個列表儲存的就是每個partition所在的塊的位置。按照「移動資料不如移動計算」的理念,spark在進行任務排程的時候,會盡可能地將計算任務分配到其所要處理資料塊的儲存位置(spark進行任務分配的時候盡可能選擇那些存有資料的worker節點來進行任務計算)。簡單說就是資料的本地性。資料在哪rdd函式就送到哪。

rdd解決了什麼?

乙個技術或者框架的出現,總是為了解決上乙個技術的問題。spark的出現就是為了解決傳統平行計算模型無法解決的迭代式計算和互動式計算。而spark其主要實現思想就是rdd,把所有計算的資料儲存在分布式的記憶體中。迭代計算通常情況下都是對同乙個資料集做反覆的迭代計算,資料在記憶體中將大大提公升io操作。這也是spark涉及的核心:記憶體計算。

互動式計算是因為spark是scala語言寫的,所以操作簡單。

建立rdd

1、由乙個已經存在的scala集合建立。

val rdd1 = sc.parallelize(array(1,2,3,4,5,6,7,8))

2、由外部儲存系統的檔案建立。包括本地的檔案系統,還有所有hadoop支援的資料集,比如hdfs、cassandra、hbase等。

val rdd2 = sc.textfile("/words.txt")

sc是spark-shell內建建立的sparkcontext

3、已有的rdd經過運算元轉換生成新的rdd

val rdd3=rdd2.flatmap(_.split(" "))

rdd依賴

寬依賴shuffer之後

寬依賴指的是多個子rdd的partition會依賴同乙個父rdd的partition

總結:寬依賴我們形象的比喻為超生

窄依賴窄依賴指的是每乙個父rdd的partition最多被子rdd的乙個partition使用

總結:窄依賴我們形象的比喻為獨生子女

寬、窄依賴是劃分stage的依據,從後往前,碰到寬依賴終止成為乙個stage。dagscheduler基於每個stage生成乙個taskset,交給taskscheduler,然後由taskscheduler排程task分配給worker節點執行任務。

lineage(血統)

rdd轉換成下乙個rdd1 過程叫做血統

所以rdd1丟失 可以通過rdd和血統來恢復

rdd快取

spark速度非常快的原因之一,就是在不同操作中可以在記憶體中持久化或者快取資料集。可以說,快取是spark構建迭代式演算法和快速互動式查詢的關鍵。

預設快取級別 cache

可設定快取級別 persisit

高容錯機制checkpoint(最安全的快取)

剩下的記不起來了,,有啥我在添吧。。。

Spark 核心 RDD 剖析(上)

本文將通過描述 spark rdd 的五大核心要素來描述 rdd,若希望更全面了解 rdd 的知識,請移步 rdd rdd 基於記憶體的集群計算容錯抽象 spark 的五大核心要素包括 下面一一來介紹 rdd 由若干個 partition 組成,共有三種生成方式 那麼,在使用上述方法生成 rdd 的...

《spark實戰》筆記03 核心模組 RDD

spark的核心元件包括rdd scheduler storage shuffle四部分 rdd是spark最核心最精髓的部分,spark將所有資料都抽象成rdd。scheduler是spark的排程機制,分為dagscheduler和taskscheduler。storage模組主要管理快取後的r...

spark 教程一 RDD和核心概念

1.rdd 的介紹 rdd是spark的核心概念,可以將rdd是做資料庫中的一張表,rdd可以儲存任何型別的資料,可以用api來處理rdd及rdd中的資料,類似於mapreduce,rdd 也有分割槽的概念。rdd是不可變的可以變換 transformation 操作rdd,但是這個變換返回的是乙個...