减少由于 Azure Databricks 中 GC 分配失败而导致的时间延迟的步骤

Posted

技术标签:

【中文标题】减少由于 Azure Databricks 中 GC 分配失败而导致的时间延迟的步骤【英文标题】:Steps to reduce time delay due to GC allocation failure in azure databricks 【发布时间】:2019-07-27 17:12:13 【问题描述】:

我正在火花集群上的 azure databricks python notebook 中执行打印“Hello World”作业。每次运行 Job 都需要超过 12 秒的时间来执行,预计需要不到 12 秒,因为它是任何人都能想到的最简单的 python 代码。当我验证日志时,它显示 GC 分配失败,如下所示:

2019-02-15T15:47:27.551+0000: [GC (Allocation Failure) [PSYoungGen: 312512K->57563K(390144K)] 498744K->243803K(1409024K), 0.0153696 secs] [Times: user=0.05 sys=0.00, real=0.02 secs] 
2019-02-15T15:47:28.703+0000: [GC (Metadata GC Threshold) [PSYoungGen: 206668K->65267K(385024K)] 392909K->251515K(1403904K), 0.0187692 secs] [Times: user=0.06 sys=0.00, real=0.02 secs] 
2019-02-15T15:47:28.722+0000: [Full GC (Metadata GC Threshold) [PSYoungGen: 65267K->0K(385024K)] [ParOldGen: 186248K->244119K(1018880K)] 251515K->244119K(1403904K), [Metaspace: 110436K->110307K(1144832K)], 0.3198827 secs] [Times: user=0.64 sys=0.04, real=0.32 secs] 

想知道由于 GC 分配失败导致作业延迟 > 12 秒吗?如果是,我怎样才能减少它?如果没有,延迟的其他原因是什么以及如何纠正?

【问题讨论】:

你能考虑接受这个答案吗? 【参考方案1】:

在集群上启动 Spark 作业会产生开销。如果处理 PB,那么开销很小,但在这里很明显。 GC 在这里不是问题。

【讨论】:

感谢您的回复。有没有办法减少这种开销? 不,只是 Spark 的本质。 感谢您的澄清。另外,你知道如何重用火花上下文吗?据我了解,每次在 Spark 上执行作业时,它都会创建一个 spark 上下文,最终加起来就是作业的开始时间。 我不熟悉那个环境,但是使用 spark-shell 做 2 个prinlns 时没有问题。可能有设置,见data-flair.training/blogs/learn-apache-spark-sparkcontext和tutorialspoint.com/pyspark/pyspark_sparkcontext.htm,或者查阅软件手册。我不确定它以什么模式运行,但如果提交到集群,那么正如我所说,您将获得开销。干杯。 感谢分享链接,会调查的。虽然我仍然不明白直接通过 databricks 笔记本运行“Hello World”程序之间的真正区别,它只需要 0.06 秒即可运行,而通过 databricks 作业触发相同的笔记本需要很长时间才能运行(> 12秒)。

以上是关于减少由于 Azure Databricks 中 GC 分配失败而导致的时间延迟的步骤的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中从 Azure Databricks 插入 Azure SQL 数据库

Azure Databricks:如何在 Databricks 群集中添加 Spark 配置

在 Azure 中检查 Databricks 运行时的版本

在 Azure Databricks 中编辑 Azure 存储帐户

Azure Databricks 的 Azure DevOps 管道

从 Azure Databricks 将数据写入 Azure Blob 存储