Apache Spark مجموعهای از رابطهای کاربری وب (Web UI) ارائه میدهد که میتوانید از آنها برای نظارت بر وضعیت و مصرف منابع کلستر Spark خود استفاده کنید.
تب Jobs یک صفحه خلاصه از تمام jobهای موجود در برنامه Spark نمایش میدهد و همچنین صفحه جزئیات برای هر job جداگانه دارد.
صفحه خلاصه اطلاعات سطح بالا را نشان میدهد، مانند:
با کلیک روی یک job در صفحه خلاصه، به صفحه جزئیات آن job هدایت میشوید. صفحه جزئیات شامل موارد زیر است:

اطلاعات نمایشدادهشده در این بخش:

این صفحه جزئیات یک job خاص را بر اساس Job ID نشان میدهد.


مثال visualisation DAG برای عملیات sc.parallelize(1 to 100).toDF.count()

تب Stages یک صفحه خلاصه از وضعیت تمام stageهای تمام jobهای برنامه Spark نشان میدهد.
در ابتدای صفحه، خلاصهای از تعداد stageها بر اساس وضعیت (active، pending، completed، skipped، failed) وجود دارد.
در حالت Fair scheduling، جدولی از ویژگیهای poolها نمایش داده میشود.

سپس جزئیات stageها بر اساس وضعیت گروهبندی شدهاند.

صفحه جزئیات stage با اطلاعات کلی شروع میشود:
همچنین visualisation DAG این stage نمایش داده میشود (گرهها = RDD/DataFrame، یالها = عملیات). گرهها بر اساس scope عملیات گروهبندی شده و با نام scope لیبل میشوند (مثل BatchScan، WholeStageCodegen، Exchange). عملیات Whole Stage Code Generation با id تولید کد مشخص میشوند. این امکان را میدهد که جزئیات stage را با گرافهای پلن SQL در تب SQL مقایسه کنید.

متریکهای خلاصه تمام taskها (به صورت جدول و تایملاین):
متریکهای تجمیعی بر اساس executor همان اطلاعات را به تفکیک executor نشان میدهد.

Accumulators: متغیرهای مشترک قابل تغییر در transformationها. فقط accumulatorهای نامدار نمایش داده میشوند.

جزئیات taskها: اطلاعات مشابه خلاصه، اما به تفکیک هر task + لینک به لاگها و شماره attempt در صورت شکست.

تب Storage تمام RDDها و DataFrameهای persist شده در برنامه را نشان میدهد.

صفحه خلاصه شامل:
صفحه جزئیات برای هر RDD/DataFrame حجم و executorهای نگهدارنده هر پارتیشن را نشان میدهد.
مثال کد:
val rdd = sc.range(0, 100, 1, 5).setName("rdd")
rdd.persist(MEMORY_ONLY_SER)
rdd.count() // برای materialize شدن
val df = Seq((1, "andy"), (2, "bob"), (2, "andy")).toDF("count", "name")
df.persist(DISK_ONLY)
df.count()
پس از اجرای کد بالا، دو RDD در تب Storage ظاهر میشوند.
نکته مهم: RDD/DataFrameهای persist شده تا زمانی که یک action روی آنها اجرا نشود (materialize نشود)، در تب نمایش داده نمیشوند.
با کلیک روی نام RDD میتوانید توزیع داده روی کلستر را ببینید.
تب Environment مقادیر متغیرهای محیطی و تنظیمات مختلف را نشان میدهد (JVM، Spark، System Properties).

این تب پنج بخش دارد و مکان عالی برای چک کردن درست تنظیم شدن properties است:
spark.app.name، spark.driver.memory
تب Executors اطلاعات خلاصه executorهای ساختهشده برای برنامه را نشان میدهد:
ستون Storage Memory مقدار حافظه مصرفی و رزروشده برای caching را نشان میدهد.
همچنین اطلاعات عملکردی مثل زمان GC و shuffle را ارائه میدهد.

اگر برنامه کوئری Spark SQL اجرا کند، تب SQL اطلاعات زیر را نشان میدهد:
مثال:
val df = Seq((1, "andy"), (2, "bob"), (2, "andy")).toDF("count", "name")
df.count()
df.createGlobalTempView("df")
spark.sql("select name, sum(count) from global_temp.df group by name").show()

سه عملیات بالا در لیست ظاهر میشوند. با کلیک روی لینک کوئری آخر، DAG و جزئیات اجرا نمایش داده میشود.
صفحه جزئیات کوئری شامل:

بلوکها مثل WholeStageCodegen (1) چندین عملیات را با هم کامپایل میکنند (برای بهبود عملکرد). متریکهایی مثل تعداد ردیف خروجی و حجم spill نمایش داده میشود.
با کلیک روی Details در پایین، پلنهای منطقی و فیزیکی کوئری نشان داده میشود. عملیات subject به whole stage code generation با * و id مشخص میشوند (مثل *(۱) LocalTableScan).
متریکهای اپراتورهای SQL در بلوکهای فیزیکی نمایش داده میشوند. مثالهایی از متریکها:
| متریک | معنی | اپراتورهای مرتبط |
|---|---|---|
| number of output rows | تعداد ردیفهای خروجی اپراتور | Aggregate، Join، Filter، Scan و … |
| data size | حجم داده broadcast/shuffle/collected | BroadcastExchange، ShuffleExchange |
| scan time | زمان اسکن داده | ColumnarBatchScan، FileSourceScan |
| shuffle bytes written | تعداد بایتهای نوشتهشده در shuffle | ShuffleExchange، CollectLimit و … |
| shuffle write time | زمان صرفشده برای نوشتن shuffle | همان بالا |
| remote bytes read | بایتهای خواندهشده از executorهای ریموت | ShuffleExchange و … |
| peak memory | حداکثر حافظه مصرفی اپراتور | Sort، HashAggregate |
| spill size | حجم داده spill شده به دیسک | Sort، HashAggregate |
| data sent to Python workers | حجم داده سریالایزشده ارسالشده به workerهای Python | Python UDF، Pandas UDF و … |
در اجرای Structured Streaming به صورت micro-batch، تب Structured Streaming ظاهر میشود.
صفحه overview آمار مختصری از کوئریهای در حال اجرا و تمامشده نشان میدهد (و آخرین exception در صورت شکست).

صفحه آمار جزئی شامل متریکهای مفید زیر است:
این صفحه هنوز در حال توسعه است و در نسخههای آینده بهبود خواهد یافت.
اگر برنامه از Spark Streaming با API DStream استفاده کند، تب Streaming ظاهر میشود.
این تب تأخیر زمانبندی (scheduling delay) و زمان پردازش هر micro-batch را نشان میدهد – مفید برای عیبیابی برنامههای streaming.
این تب وقتی Spark به عنوان موتور SQL توزیعشده اجرا میشود، ظاهر میشود.
بخش اول: اطلاعات کلی سرور (زمان شروع، uptime)
بخش دوم: sessionهای فعال و تمامشده
بخش سوم: آمار SQL عملیات ارسالشده
برای آشنایی عملی با واسط گرافیکی اسپارک میتوانید از این مقاله مدیوم هم استفاده کنید.