Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Výzvou s interaktivními datovými pracovními postupy je zpracování velkých dotazů. To zahrnuje dotazy, které generují příliš mnoho výstupních řádků, načítají mnoho externích oddílů, nebo provádějí výpočty na extrémně velkých datových sadách. Tyto dotazy můžou být extrémně pomalé, nasytit výpočetní prostředky a znesnadnit ostatním sdílení stejného výpočetního výkonu.
Watchdog dotazů je proces, který brání dotazům v monopolizaci výpočetních prostředků prozkoumáním nejběžnějších příčin velkých dotazů a ukončením dotazů, které překročí prahovou hodnotu. Tento článek popisuje, jak povolit a nakonfigurovat Query Watchdog.
Důležitý
Služba Watchdog pro dotazy je umožněná pro všechny multifunkční výpočty vytvořené pomocí uživatelského rozhraní.
Příklad rušivého dotazu
Analytik provádí některé ad hoc dotazy v datovém skladu za běhu. Analytik používá sdílené výpočetní prostředky automatického škálování, které více uživatelům usnadňuje použití jednoho výpočetního výkonu najednou. Předpokládejme, že existují dvě tabulky, které mají každý milion řádků.
import org.apache.spark.sql.functions._
spark.conf.set("spark.sql.shuffle.partitions", 10)
spark.range(1000000)
.withColumn("join_key", lit(" "))
.createOrReplaceTempView("table_x")
spark.range(1000000)
.withColumn("join_key", lit(" "))
.createOrReplaceTempView("table_y")
Tyto velikosti tabulek se dají spravovat v Apache Sparku. Každý z nich ale obsahuje sloupec join_key s prázdným řetězcem v každém řádku. K tomu může dojít v případě, že data nejsou dokonale čistá nebo pokud dochází k významné nerovnoměrné distribuci dat, kde jsou některé klíče častější než jiné. Tyto prázdné klíče spojení jsou mnohem častější než jakákoli jiná hodnota.
Analytik v následujícím kódu spojuje tyto dvě tabulky na svých klíčích, což vytváří výstup jeden tribilión výsledkůa všechny tyto tabulky se vytvářejí na jednom exekutoru (exekutor, který získá " " klíč):
SELECT
id, count(id)
FROM
(SELECT
x.id
FROM
table_x x
JOIN
table_y y
on x.join_key = y.join_key)
GROUP BY id
Zdá se, že tento dotaz je v běhu. Ale bez znalosti dat analytik vidí, že v průběhu provádění úlohy zbývá jen jeden úkol. Dotaz se nikdy nedokončí, analytik je frustrovaný a zmatený o tom, proč nefungoval.
V tomto případě existuje pouze jeden problematický klíč spojení. Jindy může existovat mnohem víc.
Povolení a konfigurace hlídacího psa dotazů
Pokud chcete povolit a nakonfigurovat Query Watchdog, je potřeba provést následující kroky.
- Povolte Watchdog s
spark.databricks.queryWatchdog.enabled. - Nakonfigurujte běhové prostředí úloh pomocí
spark.databricks.queryWatchdog.minTimeSecs. - Zobrazení výstupu s
spark.databricks.queryWatchdog.minOutputRows. - Nakonfigurujte výstupní poměr pomocí
spark.databricks.queryWatchdog.outputRatioThreshold.
Pokud chcete zabránit, aby dotaz vytvářel příliš mnoho výstupních řádků pro počet vstupních řádků, můžete povolit watchdog dotazu a nakonfigurovat maximální počet výstupních řádků jako násobek počtu vstupních řádků. V tomto příkladu používáme poměr 1 000 (výchozí).
spark.conf.set("spark.databricks.queryWatchdog.enabled", true)
spark.conf.set("spark.databricks.queryWatchdog.outputRatioThreshold", 1000L)
Druhá konfigurace deklaruje, že každý daný úkol by nikdy neměl generovat více než 1000krát počet vstupních řádků.
Spropitné
Výstupní poměr je zcela přizpůsobitelný. Doporučujeme začít s nižší hodnotou a zjistit, jaká prahová hodnota pro vás a váš tým dobře funguje. Dobrým výchozím bodem je rozsah 1 000 až 10 000.
Kromě toho, že query Watchdog brání uživatelům v monopolizaci výpočetních prostředků pro úlohy, které se nikdy nedokončí, šetří také čas tím, že rychle selhává dotaz, který by se nikdy nedokončil. Například následující dotaz po několika minutách selže, protože překračuje poměr.
SELECT
z.id
join_key,
sum(z.id),
count(z.id)
FROM
(SELECT
x.id,
y.join_key
FROM
table_x x
JOIN
table_y y
on x.join_key = y.join_key) z
GROUP BY join_key, z.id
Podívejte se, co byste viděli:
Obvykle stačí povolit watchdog dotazu a nastavit poměr prahových hodnot výstupu a vstupu, ale máte také možnost nastavit dvě další vlastnosti: spark.databricks.queryWatchdog.minTimeSecs a spark.databricks.queryWatchdog.minOutputRows. Tyto vlastnosti určují minimální dobu, po kterou má daný úkol v dotazu běžet, než dojde k jeho zrušení, a minimální počet řádků výstupu pro úkol v tomto dotazu.
Můžete například nastavit minTimeSecs na vyšší hodnotu, pokud chcete dát šanci vytvořit velký počet řádků na úkol. Podobně můžete nastavit spark.databricks.queryWatchdog.minOutputRows na deset milionů, pokud chcete dotaz zastavit až po vytvoření deseti milionů řádků v daném dotazu. Cokoliv menšího a dotaz bude úspěšný, i když byl překročen poměr výstupu a vstupu.
spark.conf.set("spark.databricks.queryWatchdog.minTimeSecs", 10L)
spark.conf.set("spark.databricks.queryWatchdog.minOutputRows", 100000L)
Spropitné
Pokud nakonfigurujete Query Watchdog v poznámkovém bloku, konfigurace se při restartu výpočetního prostředí neuchová. Pokud chcete nakonfigurovat Query Watchdog pro všechny uživatele určitého výpočetního prostředku, doporučujeme použít konfiguraci výpočtu.
Detekce dotazu na extrémně velkou datovou sadu
Dalším typickým velkým dotazem může prohledávat velké množství dat z velkých tabulek nebo datových sad. Operace prohledávání může trvat dlouhou dobu a saturovat výpočetní prostředky (i čtení metadat velké tabulky Hive může trvat značné množství času). Můžete nastavit maxHivePartitions, aby se zabránili načtení příliš velkého počtu partitionů z rozsáhlé tabulky Hive. Podobně můžete také nastavit maxQueryTasks pro omezení dotazů na extrémně velkou datovou sadu.
spark.conf.set("spark.databricks.queryWatchdog.maxHivePartitions", 20000)
spark.conf.set("spark.databricks.queryWatchdog.maxQueryTasks", 20000)
Kdy byste měli aktivovat sledování dotazů?
Služba Watchdog dotazů by měla být povolena pro výpočetní prostředky ad hoc analytiky, kdy analytici SQL a datoví vědci sdílejí dané výpočetní prostředky a správce musí zajistit, že dotazy se navzájem neruší.
Kdy byste měli vypnout Query Watchdog?
Obecně nedoporučujeme nadšeně rušit dotazy používané ve scénáři ETL, protože obvykle není člověk zapojený k opravě chyby. Doporučujeme, abyste zakázali Query Watchdog pro všechny kromě ad hoc výpočtů analýz.