Spark中Task數量的分析

2021-10-08 07:37:28 字數 1008 閱讀 2117

開始

先說明一下spark作業的幾個核心概念:

job(作業):spark根據行動操作觸發提交作業,以行動操作將我們的**切分為多個job。

stage(排程階段):每個job中,又會根據寬依賴將job劃分為多個stage(包括shufflemapstage和resultstage)。

task(任務):真正執行計算的部分。stage相當於taskset,每個stage內部包含了多個task,將各個task下發到各個executor執行計算。

每個task的處理邏輯完全一樣,不同的是對應處理的資料。即:移動計算而不是移動資料。

partition(分割槽):這個是針對rdd而言的,rdd內部維護了分割槽列表,表示資料在集群中存放的不同位置。

job、stage、task的對應關係如下

num-executors:配置執行任務的executor的數量。

executor-cores:每個executor的核的數量。此核非彼核,它不是機器的cpu核,可以理解為executor的乙個執行緒。

每個核同時只可以執行乙個task。

也就是說乙個spark應用同時執行的任務數 = 用於執行任務的executor數 * 每個executor的核數。

spark.executor.memory:每個executor的記憶體大小。

spark.default.parallelism:rdd的預設分割槽數。

在我們沒有指定這個引數的前提下,如果是shuffle操作,這個值預設是父rdd中分割槽數較大的那個值;如果是普通操作,這個值的預設大小取決於集群管理器(yarn, local這些)。

以yarn為例,如果我們沒有指定,它的大小就是所有用於執行任務的executor核的總數。

spark.sql.shuffle.partitions:這個配置是針對於spark sql在shuffle時的預設分割槽數。預設值是200。只對spark sql起作用。

Spark 之 Task 原理分析

目錄 1 接收請求,準備操作 executor 接收到了launchtask的請求後,在taskrunner中會做一些準備工作,例如 反序列化task,因為task傳送過來時,是被序列化的。然後通過網路拉取需要的檔案,jar包等。在準備工作之後,執行task的run 方法,該方法最核心的就是呼叫rd...

Task中啟動task的風險分析

序 這兩天遇到乙個task中引數傳遞錯誤的問題,折騰了一天多,總算找到原因了,記錄之。設計思維 maintask是程式的主task,在 maintask 中重新建立新的task,呼叫關係 maintask 實際引數 位址 資訊 param 0x12a154 0x0 void taskastart i...

Spark運算元 RDD分割槽中的元素和數量統計

1 分割槽邏輯 spark rdd是被分割槽的,在生成rdd時候,一般可以指定分割槽的數量,如果不指定分割槽數量,當rdd從集合建立時候,則預設為該程式所分配到的資源的cpu核數,如果是從hdfs檔案建立,預設為檔案的block數。2 分割槽元素統計 示例1 假如建立乙個rdd,預設分割槽15個,因...