Spark學習3.0

目錄

10.3.4 Spark運行原理

?1.設計背景

?2.RDD概念

?3.RDD特性

?4.RDD之間的依賴關系

?窄依賴和寬依賴

5.Stage的劃分

?Stage的類型包括兩種:ShuffleMapStage和ResultStage

?6.RDD運行過程


10.3.4 Spark運行原理

?1.設計背景

許多 迭代式算法(比如機器學習、圖算法等)和交互式數據挖掘工具 共同之處是,不同計算階段之間會重用中間 結果
目前的MapReduce框架都是把中間結果寫入到HDFS中,帶來了大量的數據復制、磁盤IO和序列化開銷

RDD就是為了滿足這種需求而出現的,它提供了一個抽象的數據架構,我們不必擔心底層數據的分布式特性,只需將具體的應用邏輯表達為一系列轉換處理,不同RDD之間的轉換操作形成依賴關系,可以實現管道化,避免中間數據存儲,大大降低了數據復制、磁盤IO和序列化開銷

?2.RDD概念

一個RDD就是一個分布式對象集合,本質上是一個只讀的分區記錄集合,每個RDD可分成多個分區,每個分區就是一個數據集片段,并且一個RDD的不同分區可以被保存到集群中不同的節點上,從而可以在集群中的不同節點上進行并行計算

RDD提供了一種高度受限的共享內存模型,即RDD是只讀的記錄分區的集合,不能直接修改,只能基于穩定的物理存儲中的數據集創建RDD,或者通過在其他RDD上執行確定的轉換操作(如mapjoingroup by)而創建得到新的RDD

RDD 提供了一組豐富的操作以支持常見的數據運算,分為 “動作”( Action “轉換”( Transformation 兩種類型
RDD 提供的 轉換 接口都非常簡單,都是類似 map filter groupBy join 等粗粒度的數據轉換操作,而不是針對某個數據項的細粒度修改 (不適合網頁爬蟲)
表面上 RDD 的功能很受限、不夠強大 實際上 RDD 已經被實踐證明可以高效地表達許多框架的編程模型 比如 MapReduce SQL Pregel
Spark Scala 語言實現了 RDD API ,程序員可以通過調用 API 實現對 RDD 的各種操作
RDD 典型的執行過程如下:
RDD 讀入外部數據源進行創建
RDD 經過一系列的轉換( Transformation )操作,每一次都會產生不同的 RDD ,供給下一個轉換操作使用
最后一個 RDD 經過“動作”操作進行轉換,并輸出到外部數據源

RDD采用了惰性調用:RDD的執行過程中,真正的計算發生在RDD的“行動”操作,對于行動之前的所有“轉換”操作Spark只是會記錄下“轉換”操作應用的一些基礎數據集以及RDD生成的軌跡,即相互依賴關系,而不會觸發真正的計算。

上述這一系列處理稱為一個“血緣關系(Lineage)”,即DAG拓撲排序的結果。采用惰性調用,通過血緣關系連接起來的一系列RDD操作就可以實現管道化(pipeline),避免了多次轉換操作之間數據同步的等待,而且不用擔心有過多的中間數據,因為這些具有血緣關系的操作都管道化了,一個操作得到的結果不需要保存為中間數據,而是直接管道式地流入到下一個操作進行處理。

同時,這種通過血緣關系把一系列操作進行管道化連接的設計方式,也使得管道中每次操作的計算變得相對簡單,保證了每個操作在處理邏輯上的單一性;相反,在MapReduce的設計中,為了盡可能地減少MapReduce過程,在單個MapReduce中會寫入過多復雜的邏輯。

一個Spark的“Hello World”程序:以一個“Hello World”入門級Spark程序來解釋RDD執行過程,這個程序的功能是讀取一個HDFS文件,計算出包含字符串“Hello World”的行數。

創建這個 Spark 程序的執行上下文,即創建 SparkContext 對象
從外部數據源(即 HDFS 文件)中讀取數據創建 fileRDD 對象;
構建 fileRDD filterRDD 之間的依賴關系,形成 DAG 圖,這時候并沒有發生真正的計算,只是記錄轉換的軌跡
執行到第 5 行代碼時, count() 是一個行動類型的操作,觸發真正的計算,開始實際執行從 fileRDD filterRDD 的轉換操作,并把結果持久化到內存中,最后計算出 filterRDD 中包含的元素個數。

3.RDD特性

Spark采用RDD以后能夠實現高效計算的原因主要在于:

1高效的容錯性

現有容錯機制:數據復制或者記錄日志

RDD:血緣關系、重新計算丟失分區、無需回滾系統、重算過程在不同節點之間并行、只記錄粗粒度的操作

2中間結果持久化到內存數據在內存中的多個RDD操作之間進行傳遞避免了不必要的讀寫磁盤開銷

(3)存放的數據可以是Java對象,避免了不必要的對象序列化和反序列化

?4.RDD之間的依賴關系

RDD不同操作,會使得RDD分區之間產生不同的依賴關系,DAG調度器根據RDD之間的依賴關系,把DAG劃分為若干個階段,依賴關系分為窄依賴和寬依賴,二者主要區別:是否包含Shuffle操作。

窄依賴和寬依賴

? 窄依賴表現為一個父 RDD 的分區對應于一個子 RDD 的分區或多個父 RDD 的分區對應于一個子 RDD 的分區
? 寬依賴則表現為存在一個父 RDD 的一個分區對應一個子 RDD 的多個分區

5.Stage的劃分

Spark通過分析各個RDD的依賴關系生成了DAG,再通過分析各個RDD中的分區之間的依賴關系來決定如何劃分Stage,具體劃分方法是:

?DAG中進行反向解析,遇到寬依賴就斷開
?遇到窄依賴就把當前的RDD加入到Stage
?將窄依賴盡量劃分在同一個Stage中,可以實現流水線計算

?Stage的類型包括兩種:ShuffleMapStageResultStage

Stage 的類型包括兩種: ShuffleMapStage ResultStage ,具體如下:
1 ShuffleMapStage :不是最終的 Stage ,在它之后還有其他 Stage ,所以,它的輸出一定需要經過 Shuffle 過程,并作為后續 Stage 的輸入;這種 Stage 是以 Shuffle 為輸出邊界,其輸入邊界可以是從外部獲取數據,也可以是另一個 ShuffleMapStage 的輸出,其輸出可以是另一個 Stage 的開始;在一個 Job 里可能有該類型的 Stage ,也可能沒有該類型 Stage

2ResultStage:最終的Stage,沒有輸出,而是直接產生結果或存儲。這種Stage是直接輸出結果,其輸入邊界可以是從外部獲取數據,也可以是另一個ShuffleMapStage的輸出。在一個Job里必定有該類型Stage

因此,一個Job含有一個或多個Stage其中至少含有一個ResultStage

?6.RDD運行過程

通過上述對RDD概念、依賴關系和Stage劃分的介紹,結合之前介紹的Spark運行基本流程,再總結一下RDDSpark架構中的運行過程:

1)創建RDD對象;

2SparkContext負責計算RDD之間的依賴關系,構建DAG

3DAGScheduler負責把DAG圖分解成多個Stage,每個Stage中包含了多個Task,每個Task會被TaskScheduler分發給各個WorkerNode上的Executor去執行。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/38393.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/38393.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/38393.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI繪畫工具介紹常見的AI繪畫工具及其特點和應用場景的詳細介紹

AI繪畫工具是一類利用人工智能技術,特別是深度學習和神經網絡技術,來輔助或自動生成藝術作品的軟件。這些工具在藝術創作、設計、廣告制作等領域有廣泛的應用,極大地降低了創作門檻,提高了效率。以下是一些常見的AI繪畫工具及其特…

mybatis#號和$區別

在MyBatis中,#{}和${}都是用于實現動態SQL的占位符,但它們在使用場景和安全性上有明顯的區別: 用途區別: #{}主要用于傳遞接口傳輸過來的具體數據,如參數值,它可以防止SQL注入,因為MyBatis會…

硬的不行來軟的,我還破解不了你?看老哥如何Dump 你的 BootRom。

最近曾寫了一篇:【牛掰!這小哥用顯微鏡攝取芯片ROM,還原了芯片的二進制固件】,蠻多朋友說這要是采用多層堆疊,你還能這么原始的操作?自然不行,而且這也是一篇考古的文章。但是!!! 今天帶來的這篇,老哥從軟件采用了非侵入式的方式,實現了破解。從EL2 層層逆向最終獲…

實驗5 圖像分割

1. 實驗目的 ①掌握圖像分割的含義與目的; ②掌握迭代法、最大類間方差法、直方圖法等閾值分割方法; ③掌握霍夫變換、區域生長法、區域分裂與合并法的原理,并能編程實現。 2. 實驗內容 ①調用Matlab / PythonOpenCV中的相關函數&#xff…

nginx優勢以及應用場景,編譯安裝和nginx

一. Nginx是什么? 1. Nginx概述 高性能、輕量級Web服務軟件系統資源消耗低對HTTP并發連接的處理能力高單臺物理服務器可支持30,000~50,000個并發請求Nginx(發音同 “engine x”)是一個高性能的反向代理和Web服務器軟件&#xff0c…

OffscreenCanvas:Web Workers 中的畫布操作

在 Web 開發中,我們經常需要處理復雜的圖形和動畫,這些操作可能會影響頁面的性能和用戶體驗。為了解決這個問題,現代瀏覽器引入了 OffscreenCanvas 接口,它允許我們在后臺線程(Web Workers)中進行畫布操作&…

python教程---網絡爬蟲

7.1 urllib Urllib是Python內置的一個用于讀取來自Web的數據的庫。它是一個請求庫,可以用來發送HTTP請求,獲取網頁內容,支持多種HTTP方法,如GET和POST等。 使用Urllib讀取網頁內容的步驟如下: 導入Urllib庫中的reque…

Redis--18--Redis Desktop Manage下載與安裝

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 Redis Desktop Manage1.官網下載https://redis.io/insight/ 2.安裝方法3.使用方法3.1.進入RedisDesktopManager的主界面3.2 新建連接3.3 支持操作 Redis Desktop Ma…

J021_QQ號格式校驗

一、需求描述 校驗QQ號碼是否正確。要求全部是數字,數字長度(6-20位之間),不能以0開頭。 二、代碼實現 package com.itheima.sort;public class Test {public static void main(String[] args) {System.out.println("----…

汽車尾燈(轉向燈)電路設計

即當汽車進行轉彎時,司機打開轉向燈,尾燈會根據轉向依次被點亮,經過一定的間隔后,再全部被消滅。不停地重復,直到司機關閉轉向燈。 該效果可由以下電路實現: 完整電路圖: 02—電路設計要點 延時電路的要點主要有兩個: 一、當轉向開關被按下時,LED需要逐個亮起; 二、LED被逐…

uniapp 使用cavans 生成海報

uniapp 使用cavans 生成海報 npm install qs-canvas1.創建 useCanvas.js /*** Shopro qs-canvas 繪制海報* version 1.0.0* author lidongtony* param {Object} options - 海報參數* param {Object} vm - 自定義組件實例*/ import QSCanvas from qs-canvas; import { getPos…

NVIDIA Visual Profiler啟動失敗報錯

在銀河麒麟V10安裝完NVIDIA后,想著試著運行一下NVIDIA Visual Profiler,發現報錯,如下圖。 照著提示翻閱日志文件。看見其中寫著 !ENTRY com.nvidia.viper.birt 2 0 2024-06-30 08:39:39.806 !MESSAGE Could not resolve module: com.nvidi…

ACE之Task框架

簡介 其提供了并發處理事件的能力 結構 #mermaid-svg-8gxc0Agd7gZ9tHdf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8gxc0Agd7gZ9tHdf .error-icon{fill:#552222;}#mermaid-svg-8gxc0Agd7gZ9tHdf .error-text{…

R學習資源及R包安裝

轉自生信師兄 生信必備技巧之R語言基礎教程 1. 學習資源 推薦書籍:R語言實戰,R數據科學等等; 這兩本書在公眾號【生信師兄】都有pdf版,有需要的可以關注公眾號【生信師兄】并回復:“R語言”,即可獲得免費…

【自然語言處理】預訓練語言模型實現與應用

預訓練語言模型實現與應用 1 任務目標 1.1 案例簡介 ? 2018年,Google提出了預訓練語言模型BERT,該模型在各種NLP任務上都取得了很好的效果。與此同時,它的使用十分方便,可以快速地對于各種NLP任務進行適配。因此,B…

《每天5分鐘用Flask搭建一個管理系統》第8章:權限管理

第8章:權限管理 8.1 權限管理的概念 權限管理是控制用戶對應用內不同資源訪問的機制。它確保用戶只能訪問他們被授權的資源。 8.2 Flask-Principal擴展的使用 Flask-Principal是一個提供權限管理功能的Flask擴展,它允許您定義角色和權限,…

基于HarmonyOS NEXT開發智能提醒助手

目錄 目錄 目錄 前言 關于HarmonyOS NEXT 智能提醒助手需求分析 智能提醒助手設計 1、系統架構 2、功能模塊 智能提醒助手的應用場景 智能提醒助手的競爭力 具體技術實現 未來展望 結束語 前言 隨著智能設備的普及和物聯網技術的飛速發展,人們對于智能…

基于大津閾值法和二值化與聯通區域標記進行圖像目標計數

1 建模 A.讀取圖像: 1.使用imread函數讀取圖像文件。 2.如果圖像是彩色的,通常需要先轉換為灰度圖像,因為大津閾值法通常應用于灰度圖像。 B.灰度化: 1.如果圖像是彩色的,使用rgb2gray函數將其轉換為灰度…

《昇思25天學習打卡營第16天 | 昇思MindSpore基于MobileNetv2的垃圾分類》

16天 本節學習了垃圾分類代碼開發的方法。通過讀取本地圖像數據作為輸入,對圖像中的垃圾物體進行檢測,并且將檢測結果圖片保存到文件中。 MobileNet網絡是由Google團隊于2017年提出的專注于移動端、嵌入式或IoT設備的輕量級CNN網絡,相比于傳…

Excel顯示/隱藏批注按鈕為什么是灰色?

在excel中,經常使用批注來加強數據信息的提示,有時候會把很多的批注顯示出來,但是再想將它們隱藏起來,全選工作表后,“顯示/隱藏批注”按鈕是灰色的,不可用。 二、可操作方法 批注在excel、WPS表格中都是按…