我正在尝试对来自多个Cassandra表的数据运行Spark作业,这些表被分组为作业的一部分。我试图用一个巨大的数据集13m数据点结束运行并且它已经失败了多个点。当我解决这些故障并继续前进时,我遇到了我修复的下一个问题并再次重新启动作业。有没有办法加快实际数据的测试周期,以便我可以重新启动/恢复来自特定检查点的先前失败的作业?
答案 0 :(得分:5)
您可以在各个中点检查RDD到磁盘的位置,这样可以在必要时从那里重新启动。您必须将中间体保存为序列文件或文本文件,并做一些工作以确保所有内容干净地进出磁盘。
我发现启动spark-shell并在那里构建我的数据流更有用。如果您能够识别出具有代表性的数据子集,那就更好了。进入REPL后,您可以创建RDD,检查第一个值或取(100)并将它们打印到stdout,计算各种结果数据集,依此类推。 REPL使得火花10倍于我的生产效率。
一旦我在REPL中构建了一个转换和动作流程,可以获得我需要的结果,那么我可以将其形成一个scala文件并重构为干净;提取可以重用和单元测试的函数,调整并行性,无论如何。
当我需要扩展数据流时,我经常发现自己会回到REPL中,因此我从scala文件中复制并粘贴代码以获得一个良好的起点,并从那里试验扩展。