Spark---SparkCore(一)

一、術語與寬窄依賴

1、術語解釋

1、Master(standalone):資源管理的主節點(進程)

2、Cluster Manager:在集群上獲取資源的外部服務(例如:standalone,Mesos,Yarn)

3、Worker Node(standalone):資源管理的從節點(進程)或者說管理本機資源的進程

4、Driver Program:用于連接工作進程(Worker)的程序

5、Executor:是一個worker進程所管理的節點上為某Application啟動的一個進程,該進程負責運行任務,并且負責將數據存在內存或者磁盤上。每個應用都有各自獨立的executors

6、Task:被送到某個executor上的工作單元

7、Job:包含很多任務(Task)的并行計算,可以看做和action對應

8、Stage:一個Job會被拆分很多組任務,每組任務被稱為Stage(就像Mapreduce分map task和reduce task一樣)

2、窄依賴和寬依賴

RDD之間有一系列的依賴關系,依賴關系又分為窄依賴和寬依賴。

窄依賴

父RDD和子RDD partition之間的關系是一對一的。或者父RDD一個partition只對應一個子RDD的partition情況下的父RDD和子RDD partition關系是多對一的。不會有shuffle的產生。

寬依賴

父RDD與子RDD partition之間的關系是一對多。會有shuffle的產生。

寬窄依賴圖理解:

二、Stage的計算模式

Spark任務會根據RDD之間的依賴關系,形成一個DAG有向無環圖,DAG會提交給DAGScheduler,DAGScheduler會把DAG劃分相互依賴的多個stage,劃分stage的依據就是RDD之間的寬窄依賴。遇到寬依賴就劃分stage,每個stage包含一個或多個task任務。然后將這些task以taskSet的形式提交給TaskScheduler運行。stage是由一組并行的task組成。

stage切割規則:

切割規則:從后往前,遇到寬依賴就切割stage。

stage計算模式:

pipeline管道計算模式,pipeline只是一種計算思想,模式。

1、數據一直在管道里面什么時候數據會落地?

  1. 對RDD進行持久化。
  2. shuffle write的時候。

2、Stage的task并行度是由stage的最后一個RDD的分區數來決定的 。

3、如何改變RDD的分區數?

例如:reduceByKey(XXX,3),GroupByKey(4)

4、測試驗證pipeline計算模式

1.val conf = new SparkConf()
2.conf.setMaster("local").setAppName("pipeline");
3.val sc = new SparkContext(conf)
4.val rdd = sc.parallelize(Array(1,2,3,4))
5.val rdd1 = rdd.map { x => {
6.  println("map--------"+x)
7.  x
8.}}
9.val rdd2 = rdd1.filter { x => {
10.  println("fliter********"+x)
11.  true
12.} }
13.rdd2.collect()
14.sc.stop()

三、Spark資源調度和任務調度

  1. Spark資源調度和任務調度的流程:

啟動集群后,Worker節點會向Master節點匯報資源情況,Master掌握了集群資源情況。當Spark提交一個Application后,根據RDD之間的依賴關系將Application形成一個DAG有向無環圖。任務提交后,Spark會在Driver端創建兩個對象:DAGScheduler和TaskScheduler,DAGScheduler是任務調度的高層調度器,是一個對象。DAGScheduler的主要作用就是將DAG根據RDD之間的寬窄依賴關系劃分為一個個的Stage,然后將這些Stage以TaskSet的形式提交給TaskScheduler(TaskScheduler是任務調度的低層調度器,這里TaskSet其實就是一個集合,里面封裝的就是一個個的task任務,也就是stage中的并行度task任務),TaskSchedule會遍歷TaskSet集合,拿到每個task后會將task發送到計算節點Executor中去執行(其實就是發送到Executor中的線程池ThreadPool去執行)。task在Executor線程池中的運行情況會向TaskScheduler反饋,當task執行失敗時,則由TaskScheduler負責重試,將task重新發送給Executor去執行,默認重試3次。如果重試3次依然失敗,那么這個task所在的stage就失敗了。stage失敗了則由DAGScheduler來負責重試,重新發送TaskSet到TaskSchdeuler,Stage默認重試4次。如果重試4次以后依然失敗,那么這個job就失敗了。job失敗了,Application就失敗了。

TaskScheduler不僅能重試失敗的task,還會重試straggling(落后,緩慢)task(也就是執行速度比其他task慢太多的task)。如果有運行緩慢的task那么TaskScheduler會啟動一個新的task來與這個運行緩慢的task執行相同的處理邏輯。兩個task哪個先執行完,就以哪個task的執行結果為準。這就是Spark的推測執行機制。在Spark中推測執行默認是關閉的。推測執行可以通過spark.speculation屬性來配置。

注意:

  1. 對于ETL類型要入數據庫的業務要關閉推測執行機制,這樣就不會有重復的數據入庫。
  2. 如果遇到數據傾斜的情況,開啟推測執行則有可能導致一直會有task重新啟動處理相同的邏輯,任務可能一直處于處理不完的狀態。

2、圖解Spark資源調度和任務調度的流程

3、粗粒度資源申請和細粒度資源申請

  • 粗粒度資源申請(Spark)

在Application執行之前,將所有的資源申請完畢,當資源申請成功后,才會進行任務的調度,當所有的task執行完成后,才會釋放這部分資源。

優點:在Application執行之前,所有的資源都申請完畢,每一個task直接使用資源就可以了,不需要task在執行前自己去申請資源,task啟動就快了,task執行快了,stage執行就快了,job就快了,application執行就快了。

缺點:直到最后一個task執行完成才會釋放資源,集群的資源無法充分利用。

  • 細粒度資源申請(MapReduce)

Application執行之前不需要先去申請資源,而是直接執行,讓job中的每一個task在執行前自己去申請資源,task執行完成就釋放資源。

優點:集群的資源可以充分利用。

缺點:task自己去申請資源,task啟動變慢,Application的運行就相應的變慢了。

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

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

相關文章

用Python寫一個瀏覽器集群框架

更多Python學習內容:ipengtao.com 在分布式爬蟲和大規模數據采集的場景中,使用瀏覽器集群是一種有效的方式,可以提高數據采集的速度和效率。本文將介紹如何用Python編寫一個簡單但強大的瀏覽器集群框架,以應對需要使用多個瀏覽器實…

WebGL/threeJS面試題掃描與總結

什么是 WebGL?什么是 Three.js?請解釋three.js中的WebGL和Canvas的區別? WebGL(全寫Web Graphics Library)是一種3D繪圖協議,這種繪圖技術標準允許把JavaScript和OpenGL ES 2.0結合在一起,通過增加OpenGL ES 2.0的一個…

分庫分表、分布式數據庫、MPP

分庫分表、分布式數據庫、MPP的區別嗎? 一、MySQL分庫分表和MySQL分布式集群在性能方面各有優劣,具體取決于應用場景和需求。 MySQL分庫分表: 在分庫分表的場景下,可以將負載分散到多個數據庫實例上,從而提高整體性能…

【模糊測試】課堂筆記

模糊測試 模糊測試過程通常是自動化的。這個過程經典地分為以下幾個階段。 準備:這是第一階段,重點是 SUT 輸入和輸出格式的識別和規范。基于此,規范可以減少生成初始無效模糊數據的可能性并創建有效且精確的輸入。Fuzz Data Generation&am…

思科模擬器操作命令

模式 思科模擬器常見的模式有 用戶模式 能夠操作的命令比較少 特權模式特權模式下面可以操作的比較多 全局模式 接口模式 用戶模式進入特權模式: 命令enable 特權模式進行全局模式命令: configure terminal 退出命令 exit命令:返回上一層,即一步一步…

RocketMQ 消息中間件 知識點匯總

目錄 RocketMQ1、什么是RocketMQ?常用術語:2、為什么需要消息隊列3、什么是異步處理4、什么是服務解耦5、什么是流量控制6、消息隊列兩種模型隊列模型:發布/訂閱模型:總結:7、怎么保證消息不丟失8、如何處理消息被重復消費**出現消息重復的情況:****解決方法:**9、如何保…

流量分析-PhishingEmail_WriteUp

一、題目問題 問題1:黑客的email名稱 問題2:黑客向幾人發送了釣魚郵件 問題3:黑客傳輸的木馬文件名 問題4:下載并運行了木馬文件的人的email名稱和ip地址,用“-”連接 問題5:黑客用于反彈shell的主機i…

什么葡萄酒會適用這種雙重潷析方法呢?

潷析有兩個主要目的,一種是去除陳年或未經過濾的葡萄酒中的沉淀物。雖然沉淀物不會對你造成任何傷害,但當喝葡萄酒滿嘴都是葡萄沉淀物時是一件很糟糕的事。其次,傾析葡萄酒是可以讓葡萄酒“呼吸”與氧氣接觸的,氧氣可以軟化單寧&a…

二維數值型數組例題

1、單位矩陣初始化 題目描述 對用作單位矩陣的數組初始化。單位矩陣在主對角線上的值為1,而其他的地方的值為0,并且主對角線上的行、列下標是一樣的。 輸入要求 輸入一個整數n表示矩陣的行數 輸出要求 輸出n*n的單位矩陣。數據之間以空格間隔&…

LeetCode Hot100 102.二叉樹的層序遍歷

題目&#xff1a; 給你二叉樹的根節點 root &#xff0c;返回其節點值的 層序遍歷 。 &#xff08;即逐層地&#xff0c;從左到右訪問所有節點&#xff09;。 方法&#xff1a;迭代 class Solution {public List<List<Integer>> levelOrder(TreeNode root) {if …

C語言——輸入一個4位正整數,輸出其逆數。

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i,j 0;int a1,a2,a3,a4;printf("輸入一個4位正整數&#xff1a;\n");scanf("%d",&i);a1 i/1000; a2 i/100%10; a3 i/10%10; a4 i%10; printf("千位a1%d,百位a…

【JavaFx】利用JavaFx寫一個登錄頁面

以下是一個基本的JavaFX登錄頁面示例: import javafx.application.Application; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.co…

mysql的alter怎么使用?

在MySQL中&#xff0c;ALTER語句用于修改數據庫的表結構。下面是一些ALTER語句的示例用法&#xff1a; 1. 添加列&#xff1a; ALTER TABLE 表名 ADD 列名 數據類型; 2. 修改列的數據類型&#xff1a; ALTER TABLE 表名 MODIFY 列名 新數據類型; 3. 修…

新人工作方法論:高效率的工作

引言&#xff1a; 轉眼間入職半載&#xff0c;在工作期間曾迷茫、困惑&#xff0c;深深的感受到職場身份的轉變帶來的痛苦。痛苦的原因不僅僅包括學生時代自己悶頭做事的思維習慣與團隊合作需求的差異性&#xff0c;也包括缺乏體系的工作方法。 自己在網絡上查了一些方法論&a…

80C51單片機----數據傳送類指令

目錄 一.一般傳送指令&#xff0c;即mov指令 1.16位傳送&#xff08;僅1條&#xff09; 2.8位傳送 &#xff08;1&#xff09;目的字節為A&#xff08;累加器&#xff09; &#xff08;2&#xff09;目的字節為Rn(工作寄存器) &#xff08;3&#xff09;目的字節為direct…

超分辨率重建

意義 客觀世界的場景含有豐富多彩的信息&#xff0c;但是由于受到硬件設備的成像條件和成像方式的限制&#xff0c;難以獲得原始場景中的所有信息。而且&#xff0c;硬件設備分辨率的限制會不可避免地使圖像丟失某些高頻細節信息。在當今信息迅猛發展的時代&#xff0c;在衛星…

導入PIL時報錯

在導入PIL時,報以下錯誤: 查找原因 參考博客 Could not find a version that satisfies the requirement PIL (from versions: ) No matching distributi-CSDN博客,按照wheel后,安裝PIL時,報如下的錯誤。 查找說是python版本與wheel文件版本不同,確認本機python版本 …

C++ 指針進階:動態分配內存

工作原理 malloc 是 stdlib.h 庫中的函數,聲明為 void *__cdecl malloc(size_t _Size); 原理: malloc 函數沿空閑鏈表(位于內存 堆空間 中)申請一塊滿足需求的內存塊,將所需大小的內存塊分配給用戶剩下的返回到鏈表上; 并返回指向該內存區的首地址的指針,意該指針的類型…

ElasticSearch之cat allocation API

查看各節點上各個shard的硬件使用情況&#xff0c;命令樣例如下&#xff1a; curl -X GET "https://localhost:9200/_cat/allocation?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"執行結果如下&#x…

MyBatis常見面試題總結

MyBatis常見面試題總結 #{} 和 ${} 的區別是什么&#xff1f; ${}是 Properties 文件中的變量占位符&#xff0c;它可以用于標簽屬性值和 sql 內部&#xff0c;屬于靜態文本替換&#xff0c;比如${driver}會被靜態替換為com.mysql.jdbc. Driver。 #{}是 sql 的參數占位符&…