2016-11-28 18 views
5

我使用SQL星火1.6.1 望着火花UI我看到有一些就業機會,說明運行幾個星火工作「在ThreadPoolExecutor.java:1142運行」什麼是Web UI中的ThreadPoolExecutors作業?

Example of some of these jobs

我想知道爲什麼有些工作會得到這樣的描述?

+0

你在做什麼'join's? –

+0

對不起,當你寫下你的問題時,我並不在電腦附近。我正在使用Spark SQL,並且正在執行連接 – Gideon

+0

您可以共享您執行的「連接」嗎?查看SQL選項卡並將Spark作業與其查詢相關聯。你的問題有什麼疑問?只是好奇,因爲我相信我們足夠了解能夠解釋爲什麼我們在Web UI中運行TPE。我們不? –

回答

5

經過一番調查,我發現運行在ThreadPoolExecutor.java:1142 Spark作業與join運算符的查詢有關。

scala> spark.version 
res16: String = 2.1.0-SNAPSHOT 

scala> val left = spark.range(1) 
left: org.apache.spark.sql.Dataset[Long] = [id: bigint] 

scala> val right = spark.range(1) 
right: org.apache.spark.sql.Dataset[Long] = [id: bigint] 

scala> left.join(right, Seq("id")).show 
+---+ 
| id| 
+---+ 
| 0| 
+---+ 

當您切換到SQL選項卡,你應該看到完成查詢部分及其喬布斯(右側)。

SQL tab in web UI with Completed Queries

在我的情況下,星火作業(S)上運行 「在運行ThreadPoolExecutor.java:1142」,其中IDS 12和16

Jobs tab in web UI with "run at ThreadPoolExecutor.java:1142" jobs

他們都對應join查詢。

如果你想知道「我的一個連接是否會導致這個工作出現,但據我所知join是一個shuffle轉換而不是一個動作,那麼爲什麼這個工作是用ThreadPoolExecutor描述的,而不是我的行爲(就像我的其他工作一樣)?「,那麼我的回答通常是沿着這條線:

Spark SQL是Spark的擴展,有自己的抽象(Dataset)很快就會想起),他們有自己的執行者。一個「簡單」的SQL操作可以運行一個或多個Spark作業。它由Spark SQL的執行引擎自行決定要運行或提交多少個Spark作業(但他們的確使用RDDs) - 您不必知道如此低的細節,因爲它是......好吧.. .too低級別...因爲您使用Spark SQL的SQL或查詢DSL是如此高級的。