Spark SQL WebUI監(jiān)控,查看SQL執(zhí)行計(jì)劃

摘要:Spark SQL

啟動Spark SQL應(yīng)用

#! /bin/bash
cd /home/test_gp/SparkSQLExample
nohup spark2-submit \
--class com.example.SparkSQLExample.SparkSQLExampleMain \
--master yarn \
--num-executors 20 \
--executor-cores 3 \
--executor-memory 10g \
--conf spark.yarn.executor.memoryOverhead=12288 \
--conf spark.dynamicAllocation.enabled=false \
--conf spark.network.timeout=300 \
--conf spark.sql.shuffle.partitions=20 \
SparkSQLExample-1.0-SNAPSHOT.jar \
hdfs:///tmp/SparkSQLExample.properties > logs/detail.log 2>&1 &

跟蹤日志到Spark WebUI的鏈接tracking URL

tracking URL.png

查看jobs

查看任務(wù)一共被分為4個job,以及每個job在scala代碼中出發(fā)的行數(shù),還包括提交時間,執(zhí)行時間,每個job得到stage數(shù)量以及成功的stage數(shù)量,每個job所有的task數(shù)量和成功的task數(shù)量。

jobs.png


查看stages

點(diǎn)擊每個job可以看待當(dāng)下job的所有stage,也可以直接點(diǎn)擊stages面板,顯示一共有19個stage??梢圆榭疵總€stage的task數(shù)量成功的task數(shù)量,Input從hadoop或者spark storage讀取的數(shù)據(jù)大小,Output寫入hadoop的數(shù)據(jù)大小,shuffle read每個stage讀取的數(shù)據(jù)大小,shuffle write每個stage寫入磁盤的數(shù)據(jù)大小供于未來某個stage讀取。

查看stages.png

一般而言task數(shù)量(partition)等于spark.sql.shuffle.partitions數(shù)量,當(dāng)spark從hive,kudu讀取數(shù)據(jù)時,task數(shù)量和數(shù)據(jù)表的分區(qū)數(shù)保持一致。
如下圖spark sql task數(shù)為226,hive在hdfs上的分區(qū)也是226

spark讀取hive task分區(qū)數(shù).png

hive分區(qū).png


如下圖spark sql task數(shù)為255,kudu的tablet也是255


spark讀取kudu task分區(qū)數(shù).png

kudu tablet數(shù)量.png

查看executors

點(diǎn)擊executors面板,可以看到driver所在機(jī)器以及其他20個executor所在機(jī)器和端口號,以及executor端的日志


executor.png

一般executors數(shù)量和num-executors數(shù)量一致,如果開啟了spark.dynamicAllocation.enabled,spark會根據(jù)task數(shù)量動態(tài)調(diào)整executors數(shù)量,num-executors只是executors數(shù)量的初始值

查看SQL的執(zhí)行計(jì)劃

點(diǎn)擊SQL面板查看執(zhí)行計(jì)劃


SQL計(jì)劃.png
  • scan:從hive,kudu讀取數(shù)據(jù)
  • Filter:過濾操作,包括去除缺失值,條件篩選
  • Project:映射,選擇需要的列
  • HashAggregate:聚合,本例中HashAggregate+Exchange+HashAggregate用來distinct去重
  • wholestagecodegen全階段代碼生成,用來將多個處理邏輯整合到單個代碼模塊中,是Spark的新的SQL代碼生成模型
  • Exchange:數(shù)據(jù)重分區(qū)
  • Sort:數(shù)據(jù)根據(jù)某個key排序
  • SortMergeJoin:大表和大表join的策略,本例中Exchange+Sort+SortMergeJoin用來做大表和大表join

SortMergeJoin
SortMergeJoin.png
  • shuffle階段:將兩張大表根據(jù)join key進(jìn)行重新分區(qū),對應(yīng)執(zhí)行計(jì)劃中的Exchange
  • sort階段:對單個分區(qū)節(jié)點(diǎn)的兩表數(shù)據(jù),分別進(jìn)行排序,對應(yīng)執(zhí)行計(jì)劃中的Sort
  • merge階段:對排好序的兩張分區(qū)表數(shù)據(jù)執(zhí)行join操作。遍歷兩張表的有序序列,從第一行開始,碰到相同join key就merge輸出,否則取更小一邊下一個進(jìn)行對碰
    SortMergeJoin.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容