云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

云服务器_网上购物网站建设_排行榜

小七 141 0

使用Databricks更快地调试apachespark代码的7个技巧

Vida Ha是Databricks的首席解决方案架构师。她在Google、Square和Databricks拥有十多年的构建大数据应用程序的经验。她是apachespark的早期用户,两年多以来一直在帮助Databricks客户构建生产应用程序。在一个完美的世界里,我们都会编写完美的apachespark代码,而且所有的东西都会一直完美地运行,对吧?开玩笑吧——实际上,我们知道处理大型数据集并不那么容易——不可避免地会有一些数据点暴露代码中的任何角落情况。下面是一些使用databrick调试Spark程序的技巧。技巧1:使用count()对中间RDD/DataFrame调用操作。Spark遵循一个懒惰的计算模型,因此在必要时才进行任何计算,但缺点是当您确实遇到错误时,可能不清楚代码中错误出现的确切位置。因此,您需要考虑代码的因素,以便可以将中间RDD/数据帧存储为变量。调试时,应该对RDD/Dataframes调用count(),以查看错误发生的阶段。这是一个非常有用的提示,不仅可以用于错误,甚至可以优化Spark作业的性能。它将允许你测量每个阶段的运行时间并对其进行优化。技巧2:处理错误的输入。当使用大型数据集时,您将有错误的输入,或者不是您预期的那样。我建议您积极主动地决定您的用例,是否可以删除任何错误的输入,或者尝试修复和恢复,或者调查输入数据为什么不好。filter命令是一种很好的方法,可以只获取好的输入点或错误的输入数据(如果您想进一步研究并调试)。如果您想修复输入数据,或者在无法修复的情况下删除它,那么使用flatMap()操作是一种很好的方法。技巧3:使用Databricks笔记本中的调试工具。Databricks笔记本是Spark代码开发和调试中最有效的工具。当您将代码编译到JAR中,然后将其提交到Spark集群时,您的整个数据管道就变成了一个黑匣子,迭代速度很慢。笔记本允许您隔离和查找数据管道中有缺陷或速度较慢的部分,还允许您快速尝试不同的修复方法。在Databricks中,我们有许多附加的内置功能,使调试变得非常容易:评论组织中的其他用户可以对您的代码发表评论并提出改进建议。你甚至可以直接在笔记本上进行代码审查,或者只是分享对功能的评论。版本控制Databricks笔记本电脑有两种不同类型的版本控制。第一种是将笔记本直接同步到GitHub的传统方法。另一个是你的笔记本在以前的时间点上是什么样子的历史记录,并允许你通过点击按钮恢复到旧版本。分区数的压缩视图。当您运行Spark作业时,您可以深入查看运行作业所需的作业和阶段,以及它们的进展情况。在下面的工作负载中,对于阶段11,有200个分区,42个分区已经完成,8个分区当前正在运行。如果这个阶段真的很慢,那么一个更大的Spark集群将允许您一次运行更多的分区,并使整个作业更快地完成。Spark UI弹出如果您点击上面的"查看"链接,整个Spark用户界面将弹出供您调试。在技巧4中,我们将介绍Spark UI。我们做了一个关于这个功能的博客,查看更多细节。技巧4:了解如何使用Databricks Spark UI进行调试。Spark UI包含了大量可用于调试Spark作业的信息。有很多很棒的可视化效果,我们在这里有一篇关于这些特性的博客文章。一般来说,我发现Spark用户界面使用起来很直观。我唯一看到的是,有时候如果一个作业失败了,用户只会看到出现在笔记本中单元格中的错误。当你有一个火花阶段,有一大堆任务,即使是一个单一的任务持续失败,你的整个工作也会失败。因此,我建议一直深入到任务页面,按状态对页面进行排序,并检查"错误"列中失败的任务。您将在那里得到详细的错误消息。任务页面如下所示-尽管此处描述的阶段已成功完成:技巧5:对于非常大的数据集,要缓慢地放大Spark作业。如果您有一个非常大的数据集要分析并遇到错误,您可能需要首先尝试对数据集的一部分进行调试/测试。然后当你顺利运行时,回到完整的数据集。使用较小的数据集可以快速地再现任何错误,在数据管道的各个阶段了解数据集的特性,等等。请注意,当您运行较大的数据集时,您肯定会遇到更多的问题—希望是,如果您能够在较小的范围内重现错误,那么比起您需要完整的数据集,您更容易修复错误。技巧6:使用Databricks作业重现错误或慢火花作业。与任何bug一样,可靠地复制bug只需解决bug的一半。为此,我建议使用Databricks作业特性复制错误和慢火花作业。这将有助于您捕捉缺陷/缓慢的条件,并了解缺陷有多脆弱。您还将永久捕获输出以查看–包括每个单独单元的运行时间、每个单元的输出以及任何错误消息。由于我们的jobs特性包含一个历史用户界面,所以即使在集群关闭之后,您也可以查看任何日志文件和Spark用户界面。您还可以在一个非常受控制的环境中试验不同的Spark版本、实例类型、集群大小、编写代码的其他方法等,以了解它们如何影响您的Spark作业。技巧7:检查数据集的分区。虽然Spark为您的数据选择了合理的默认值,但是如果您的Spark作业内存不足或运行缓慢,则可能是错误的分区。对我来说,我首先尝试不同的分区大小,看看它们如何影响您的工作。如果数据集很大,可以尝试重新分区到更大的数字,以便在作业中实现更多的并行性。如果在Spark UI中没有很多任务,但每个任务都很难完成,这是一个很好的指示。另一方面,如果您没有那么多的数据,而您有大量的分区,那么拥有太多分区的开销也会导致您的工作速度变慢。您可以将分区重新分配到一个较小的数目,但coalesce可能更快,因为它将尝试在同一台计算机上合并分区,而不是再次混乱数据。如果您使用的是sparksql,那么可以通过设置spark.sql.shuffle.分区。下一步是什么这是关于如何在Databricks上调试和优化apachespark代码的系列文章的第一篇。要在下一个博客发布时收到通知,请在Twitter上关注我们或订阅时事通讯。如果您有兴趣尝试Databricks,请注册免费试用或与我们联系。免费试用Databricks。今天就开始吧