我正在研究以下选项,以重新执行在Spark上提交的scala scode。请帮助我提供您的意见:
a。批次1-创建了scala代码,其中包含一整套SPARK SQL语句。整个代码使用Livy以代码提交的形式提交给Spark。它一个接一个地创建约400个数据框的计划,以实现功能逻辑。
b。使用步骤a在Livy上提交的代码。上面的代码不会触发执行,大约需要5分钟才能解析所有SPARK SQL以及其他数据框/数据集API代码。在这一步仍然没有执行/动作。
c。批处理2-我在Livy上的代码中作为第二批处理的一部分,对最后出现的数据帧发送了几个Count操作,以便执行可以在批处理1中创建的同一会话之上触发。从代码提交开始执行,代码解析花费大量时间(大约5分钟),执行时间大约为2分钟。因此,总共工作在7分钟内完成。但是,如果将Batch1和Batch2组合在一起,执行似乎总共需要7分钟。由于count触发了操作,因此只要提交了代码,我就能清楚地看到整个处理过程仅需2分钟即可完成。
我能够执行上述步骤,而且我可以清楚地看到在Livy上发送代码需要5分钟,而在Spark内需要2分钟的执行时间。它们可以分开并单独运行。例如(粗略的),我可以在上午9点运行批处理1,它将提交代码,而批处理2将在9:30加载数据后立即触发执行。 Livy会话在集群上保持为RUNNING模式,仅将1-2个内核用作代码提交的一部分(已验证为YARN资源管理器UI的一部分)。一旦批次2触发,整个处理输出将在2分钟内可用。
到此为止,一切似乎都按照上面解释的方式进行。
现在我想到的问题是-是否可以对已经作为Batch1的一部分提交的同一代码重复执行(步骤a)?因此,在使用Batch1提交代码一次之后,我正在寻找重新执行Batch2。 Batch1将不会再次触发。如果再次触发Batch2(读取数据并再次执行整个处理),如何确保重新计算数据帧。
谢谢