在交互工作流處理大型查詢

一個挑戰與交互式數據工作流處理大型查詢。這包括查詢生成過多的輸出行,獲取許多外部分區,或計算上非常大的數據集。這些查詢可能會非常慢,飽和集群資源,並使其他人很難共享相同的集群。

查詢監督是一個過程,防止查詢壟斷集群資源通過檢查大型查詢和終止的最常見原因的查詢通過一個閾值。本文描述了如何啟用和配置查詢監督。

重要的

啟用查詢監管機構對所有通用集群使用UI創建的。

一個破壞性的查詢的例子

分析師執行一些臨時查詢實時數據倉庫。分析師使用共享集群自動定量,可以讓多個用戶同時使用一個集群。假設有兩個表,每個有一百萬行。

進口orgapache火花sql功能_火花相依(“spark.sql.shuffle.partitions”,10)火花範圍(1000000)withColumn(“join_key”,點燃(”“))createOrReplaceTempView(“出現”)火花範圍(1000000)withColumn(“join_key”,點燃(”“))createOrReplaceTempView(“table_y”)

這些表大小可控的Apache火花。但是,他們每一雙都包含一個join_key列在每一行一個空字符串。這可能發生,如果數據沒有完全清洗或如果有重要數據傾斜一些鍵比其他人更為普遍。這些空連接鍵被更為普遍比其他任何價值。

在以下代碼中,分析師加入這兩個表的鍵,並產生輸出一萬億條結果,這些都是產生一個執行人(得到的遺囑執行人鍵):

選擇id,(id)(選擇xid出現x加入table_yyxjoin_key=yjoin_key)集團通過id

這個查詢似乎運行。但沒有了解的數據,分析師認為,“隻有”一個任務了在執行工作。查詢從未結束,離開分析師沮喪和困惑為什麼它不工作。

在本例中隻有一個有問題的連接鍵。有時可能會有更多。

啟用和配置查詢監督

要啟用和配置查詢監督機構,以下步驟是必需的。

  • 讓監管機構spark.databricks.queryWatchdog.enabled

  • 任務運行時配置spark.databricks.queryWatchdog.minTimeSecs

  • 顯示輸出,spark.databricks.queryWatchdog.minOutputRows

  • 配置的輸出率spark.databricks.queryWatchdog.outputRatioThreshold

防止一個查詢創建太多的輸出輸入的行數行,您可以啟用查詢監督機構和配置的最大輸出行數的多個輸入的行數。在這個例子中,我們使用一個比1000(默認)。

火花相依(“spark.databricks.queryWatchdog.enabled”,真正的)火花相依(“spark.databricks.queryWatchdog.outputRatioThreshold”,1000升)

後者配置宣稱任何給定的任務不應該生產超過1000倍的數量輸入行。

提示

輸出比例是完全可定製的。我們建議開始降低,看到什麼閾值適用於您和您的團隊。一係列的1000年到10000年是一個很好的起點。

查詢監督防止用戶不僅壟斷集群資源的工作永遠不會完成,它也節省時間通過fast-failing查詢就不會完成。例如,下麵的查詢將失敗後幾分鍾,因為它超過了比率。

選擇zidjoin_key,總和(zid),(zid)(選擇xid,yjoin_key出現x加入table_yyxjoin_key=yjoin_key)z集團通過join_key,zid

這就是你會看到:

查詢監督”src=

通常足以使查詢監督並設置輸出/輸入閾值比,但你也可以選擇設置兩個附加屬性:spark.databricks.queryWatchdog.minTimeSecsspark.databricks.queryWatchdog.minOutputRows。這些屬性指定的最小時間給定的查詢必須在取消之前運行的任務,任務的最小數量的輸出行查詢。

例如,您可以設置minTimeSecs到一個更高的價值,如果你想給它一個機會產生大量的行每個任務。同樣地,您可以設置spark.databricks.queryWatchdog.minOutputRows一千萬如果你想要停止查詢任務後,查詢已經產生了一千萬行。少東西,查詢成功,即使輸出/輸入比例是超過。

火花相依(“spark.databricks.queryWatchdog.minTimeSecs”,10 l)火花相依(“spark.databricks.queryWatchdog.minOutputRows”,100000 l)

提示

如果你在筆記本中配置查詢監督機構,配置不存在跨集群重啟。如果你想為所有用戶配置查詢監管機構的一個集群,我們建議你使用集群配置

檢測查詢非常大的數據集

另一個典型的大型查詢可能從大表掃描大量數據/數據集。掃描操作可能會持續很長一段時間和飽和集群資源(甚至閱讀大蜂巢的元數據表會花費大量的時間)。你可以設置maxHivePartitions為了防止獲取太多的分區從一個大蜂巢表。同樣,你也可以設置maxQueryTasks限製在一個非常大的數據集的查詢。

火花相依(“spark.databricks.queryWatchdog.maxHivePartitions”,20000年)火花相依(“spark.databricks.queryWatchdog.maxQueryTasks”,20000年)

何時啟用查詢監督?

查詢監管機構應該為臨時啟用SQL分析師和數據科學家分析集群共享一個給定的集群和管理員需要確保查詢完美地結合。

當你應該禁用查詢監督嗎?

一般我們不建議急切地取消查詢中使用ETL的場景,因為通常不是一個人類的循環來糾正這個錯誤。我們建議您禁用查詢監督除了特別分析集群。