iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
AI & Data

30天認識主流大數據框架:Hadoop + Spark + Flink系列 第 14

Day14 - Spark 介紹 (2):RDD

  • 分享至 

  • xImage
  •  

前言
昨天的文章介紹了 Spark 的架構,還沒看過的人可以先看看:Day13 - Spark 介紹 (1):簡介與架構

什麼是 RDD ?

昨天有提到,Resilient Distributed Datasets (RDD) 是 Spark 的核心數據結構,RDD 直接翻譯成中文是彈性-分散式-數據集,因此白話地說,RDD 就是一個「數據的集合」,其數據被「分散存儲」在群集中的多個節點上,且「有彈性」,意思是指 RDD 雖然預設存放於記憶體中,但當記憶體資源不足時會自動改為存入硬體,由 RDD 自動權衡與切換記憶體與硬體之間的存儲。

較為正式的說法是,RDD 是不可變分區、可平行處理的資料集合:

  • 不可變:也就是所謂的 read-only,存儲的訊息無被更改,如果要更改的話只能對現有 RDD 進行轉換操作。
  • 分區:其實就是前面提到的分散式,每個 RDD 都會被切分為一個或多個分區,這些分區會被存儲在群集中的多個節點上。
  • 平行處理:因為分區的特性,各個節點上的數據可以被分開處理,然後生成新的 RDD。

RDD 的創建方式

  1. 從 HDFS (或與 HDFS 兼容的資料倉儲 (Hive、HBase、Cassandra) 創建
  2. 從其他 RDD 轉換而成,Parent RDD 與 Child RDD 彼此之間透過 Lineage (血統) 產生依賴關係。

RDD 的操作類型

  1. Transformation 轉換
    從現有 RDD 創建一個新的 RDD,值得注意的是,轉換屬於懶惰操作(Lazy Operation),也就是 Transformation 並不會立刻被執行,而是會等到 Action 操作時才會執行。
    • 常見的 Transformation 有:map、flatMap、filter、distinct、union、reduceByKey 等
  2. Action 動作
    在對數據集運行計算後,返回一個值給驅動程序。
    • 常見的 Action 有:foreach、saveAsTextFile、collect、count、top、reduce 等

Shuffle

Shuffle 本身不算是操作類型的一種,而是只有在部分 Transformation 操作中會被觸發的一種機制。Shuffle 會將數據重新分配,使新的分區結果與原先的分區結果有所不同,這些操作通常涉及 executors 之間的數據溝通,如因此運算成本很高,應該謹慎使用。

  • 會導致 Shuffle 有操作包括:repartition 類、ByKey 類與 join 類

RDD 的依賴模式

https://ithelp.ithome.com.tw/upload/images/20230929/20138939qt61S5BuHG.png

  1. Narrow Dependency 窄依賴

    Parent RDD 的一個分區最多只會對應到 Child RDD 的一個分區。

    對於部分 Transformation 來說,其轉換具有一對一的映射關係,也就是 RDD 在轉換時並不需要進行跨分區的數據溝通,如 map()filter(),而新產生的 Child RDD 的分區關係理所當然直接依賴於 Parent RDD 的分區。

  2. Wide Dependency 寬依賴

    Parent RDD 的一個分區可以對應到多個 Child RDD 的一個分區 (需要 Shuffle)。

    部分 Transformation 操作會觸發 Shuffle 機制進行跨分區的數據溝通,如 reduceByKey()groupByKey(),而這也導致 Child RDD 的一個分區通常需要依賴於 Parent RDD 的多個分區。

預告

RDD 雖然是 Spark 的核心,但使用起來比較複雜,因此現在主流的用法是使用更高階的抽象 API,也就是明天準備要介紹的 SparkSQLDataFrameDataSet

參考資料

RDD Programming Guide
RDD vs. DataFrame vs. DataSet
Apache Spark - RDD
说下spark的RDD
Spark RDD 之间的依赖关系


上一篇
Day13 - Spark 介紹 (1):簡介與架構
下一篇
Day15 - Spark 介紹 (3):Spark SQL、DataFrame、DataSet
系列文
30天認識主流大數據框架:Hadoop + Spark + Flink30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言