开始
加载和管理数据
处理数据
政府
引用和资源
2023年8月1日更新
给我们反馈
一个挑战与交互式数据工作流处理大型查询。这包括查询生成过多的输出行,获取许多外部分区,或计算上非常大的数据集。这些查询可能会非常慢,饱和集群资源,并使其他人很难共享相同的集群。
查询监督是一个过程,防止查询垄断集群资源通过检查大型查询和终止的最常见原因的查询通过一个阈值。本文描述了如何启用和配置查询监督。
重要的
启用查询监管机构对所有通用集群使用UI创建的。
分析师执行一些临时查询实时数据仓库。分析师使用共享集群自动定量,可以让多个用户同时使用一个集群。假设有两个表,每个有一百万行。
进口org。apache。火花。sql。功能。_火花。相依。集(“spark.sql.shuffle.partitions”,10)火花。范围(1000000)。withColumn(“join_key”,点燃(”“))。createOrReplaceTempView(“出现”)火花。范围(1000000)。withColumn(“join_key”,点燃(”“))。createOrReplaceTempView(“table_y”)
这些表大小可控的Apache火花。但是,他们每一双都包含一个join_key列在每一行一个空字符串。这可能发生,如果数据没有完全清洗或如果有重要数据倾斜一些键比其他人更为普遍。这些空连接键被更为普遍比其他任何价值。
join_key
在以下代码中,分析师加入这两个表的键,并产生输出一万亿条结果,这些都是产生一个执行人(得到的遗嘱执行人””键):
””
选择id,数(id)从(选择x。id从出现x加入table_yy在x。join_key=y。join_key)集团通过id
这个查询似乎运行。但没有了解的数据,分析师认为,“只有”一个任务了在执行工作。查询从未结束,离开分析师沮丧和困惑为什么它不工作。
在本例中只有一个有问题的连接键。有时可能会有更多。
要启用和配置查询监督机构,以下步骤是必需的。
让监管机构spark.databricks.queryWatchdog.enabled。
spark.databricks.queryWatchdog.enabled
任务运行时配置spark.databricks.queryWatchdog.minTimeSecs。
spark.databricks.queryWatchdog.minTimeSecs
显示输出,spark.databricks.queryWatchdog.minOutputRows。
spark.databricks.queryWatchdog.minOutputRows
配置的输出率spark.databricks.queryWatchdog.outputRatioThreshold。
spark.databricks.queryWatchdog.outputRatioThreshold
防止一个查询创建太多的输出输入的行数行,您可以启用查询监督机构和配置的最大输出行数的多个输入的行数。在这个例子中,我们使用一个比1000(默认)。
火花。相依。集(“spark.databricks.queryWatchdog.enabled”,真正的)火花。相依。集(“spark.databricks.queryWatchdog.outputRatioThreshold”,1000升)
后者配置宣称任何给定的任务不应该生产超过1000倍的数量输入行。
提示
输出比例是完全可定制的。我们建议开始降低,看到什么阈值适用于您和您的团队。一系列的1000年到10000年是一个很好的起点。
查询监督防止用户不仅垄断集群资源的工作永远不会完成,它也节省时间通过fast-failing查询就不会完成。例如,下面的查询将失败后几分钟,因为它超过了比率。
选择z。idjoin_key,总和(z。id),数(z。id)从(选择x。id,y。join_key从出现x加入table_yy在x。join_key=y。join_key)z集团通过join_key,z。id
这就是你会看到:
通常足以使查询监督并设置输出/输入阈值比,但你也可以选择设置两个附加属性:spark.databricks.queryWatchdog.minTimeSecs和spark.databricks.queryWatchdog.minOutputRows。这些属性指定的最小时间给定的查询必须在取消之前运行的任务,任务的最小数量的输出行查询。
例如,您可以设置minTimeSecs到一个更高的价值,如果你想给它一个机会产生大量的行每个任务。同样地,您可以设置spark.databricks.queryWatchdog.minOutputRows一千万如果你想要停止查询任务后,查询已经产生了一千万行。少东西,查询成功,即使输出/输入比例是超过。
minTimeSecs
火花。相依。集(“spark.databricks.queryWatchdog.minTimeSecs”,10 l)火花。相依。集(“spark.databricks.queryWatchdog.minOutputRows”,100000 l)
如果你在笔记本中配置查询监督机构,配置不存在跨集群重启。如果你想为所有用户配置查询监管机构的一个集群,我们建议你使用集群配置。
另一个典型的大型查询可能从大表扫描大量数据/数据集。扫描操作可能会持续很长一段时间和饱和集群资源(甚至阅读大蜂巢的元数据表会花费大量的时间)。你可以设置maxHivePartitions为了防止获取太多的分区从一个大蜂巢表。同样,你也可以设置maxQueryTasks限制在一个非常大的数据集的查询。
maxHivePartitions
maxQueryTasks
火花。相依。集(“spark.databricks.queryWatchdog.maxHivePartitions”,20000年)火花。相依。集(“spark.databricks.queryWatchdog.maxQueryTasks”,20000年)
查询监管机构应该为临时启用SQL分析师和数据科学家分析集群共享一个给定的集群和管理员需要确保查询完美地结合。
一般我们不建议急切地取消查询中使用ETL的场景,因为通常不是一个人类的循环来纠正这个错误。我们建议您禁用查询监督除了特别分析集群。