TDH中inceptor監控界面詳解-task、core、stage關係

inceptor監控界面說明


  1. job監控界面
  • jobs 代表單獨的sql job,一個sql進來之後會形成一個job,下面顯示的有正在執行的job,完成的job,失敗的job
  • stages 代表階段,一個sql進來之後會拆分成不同的階段來執行,這裏涉及到spark的知識,下面會講到
  • username 提交的用戶名是誰
  • submission 提交時間
  • duration (total tasktime)總共job執行完成耗時
  • stages:succeed/total 階段中成功和總共數量
  • tasks:succeed/total 任務中成功和總共數量,這裏task代表任務,是stages執行sql過程需要用到多少個任務數量

 2. stages監控界面

  • Furion Scheduler代表inceptor內部調度算法,FIFO 先進先出,FAIR 公平調度
  • cores 代表集羣inceptor一共有多少個cores能用,這裏顯示是80個
  • active stages 正在執行的stages
  • completed stages 完成的stages
  • shuffle 產生shuffle階段文件大小
  • 點擊連接進入可以看到如下界面代表task執行情況,主要是隻佔用時間,在哪些節點上執行的等等

task、core、executor、節點關係


1. inceptor執行sql之後會轉化成spark任務,我們知道到spark的執行原理來分析,下面給出原理流程

  1. 輸入可能以多個文件的形式存儲在HDFS上,每個File都包含了很多塊,稱爲Block
  2. 當Spark讀取這些文件作爲輸入時,會根據具體數據格式對應的InputFormat進行解析,一般是將若干個Block合併成一個輸入分片,稱爲InputSplit
  3. 隨後將爲這些輸入分片生成具體的Task。InputSplit與Task是一一對應的關係
  4. 隨後這些具體的Task每個都會被分配到集羣上的某個節點的某個Executor去執行

2. 看到這裏我們可能有很多不清楚的地方

  • 什麼是block?可以理解爲存在hdfs上的文件,256M爲一個塊是hdfs的核心知識;
  • 什麼是inputsplit?可以理解爲將這些block做一次輸入和切分,這樣才能進行讀取,進行合理切分,否則數據讀取很難處理
  • 每個Task執行的結果就是生成了目標RDD的一個partiton,什麼是RDD?RDD是一個不可變的分佈式對象集合,每個RDD都被分爲多個分區,分區是spark中數據集的最小單位。也就是說spark當中數據是以分區爲單位存儲的,不同的分區被存儲在不同的節點上。spark一個重要的理念。即移動數據不如移動計算,也就是說在spark運行調度的時候,會傾向於將計算分發到節點,而不是將節點的數據蒐集起來計算。RDD正是基於這一理念而生的,它做的也正是這樣的事情。

3. 關係

  • 一個節點上可以啓動多個executor,每個Executor由若干core組成,每個Executor的每個core一次只能執行一個Task;
  • 這裏的core是虛擬的core而不是機器的物理CPU核,虛擬core《=物理的core;
  • Task被執行的併發度 = Executor數目 * 每個Executor核數,這裏是80個core,也就是併發80個task,也就是佔用80個core,這樣理解;
 
1.也就是說如果文件太大,比如歷史表數據,block也就有很多,導致task就比較多,有時候會上萬個task在執行,運行起來就比較慢,導致其他任務等待資源;
2.spark調優,爲什麼有時候說block是200M最優:核心思想是同時用所有的task數量,而且不是拆分的越多越好,最優是200M
  • RDD在計算的時候,每個分區都會起一個task,所以rdd的分區數目決定了總的的task數目。
  • 申請的計算節點(Executor)數目和每個計算節點核數,決定了你同一時刻可以並行執行的task。
  • 比如的RDD有100個分區,那麼計算的時候就會生成100個task,你的資源配置爲10個計算節點,每個兩2個核,同一時刻可以並行的task數目爲20,計算這個RDD就需要5個輪次。
  • 如果計算資源不變,你有101個task的話,就需要6個輪次,在最後一輪中,只有一個task在執行,其餘核都在空轉。
  • 如果資源不變,你的RDD只有2個分區,那麼同一時刻只有2個task運行,其餘18個核空轉,造成資源浪費。這就是在spark調優中,增大RDD分區數目,增大任務並行度的做法。

4.inceptor中executor經常出現warning告警

       ---現象是inceptor中節點會出現worker節點批量告警,發現正在運行的sql比較多,導致集羣內存溢出,原因如下:

  • 一臺機器的內存分配給越多的executor,每個executor的內存就越小,因爲每個機器的內存是固定的,以致出現過多的數據spill over甚至out of memory的情況;

5.task出現skipped

  • 不是報錯,而是spark已經將數據裝載在內存中,直接讀取的內存數據,就會跳過task任務執行,速度就很快

spark中提供了兩種方式來創建RDD,一種是讀取外部的數據集,另一種是將一個已經存儲在內存當中的集合進行並行化。這裏就是存儲在了內存

 

 

隨後將爲這些輸入分片生成具體的Task。InputSplit與Task是一一對應的關係

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章