我有一个用例,其中我正在运行一个Spark作业,该作业将从一个Hive表读取,然后写入另一个Hive表。 我想要实现的是,当为此启动我的Spark作业时,该作业应该在第一次尝试中失败,但是在第二次尝试中成功。 spark参数:spark.yarn.maxAttempts设置为其默认值,即2,在我的环境中我无法控制它。
下面是我尝试过的代码(感谢@Jacek):
import org.apache.spark.TaskContext
class TaskContextTest {
val atmptNumber = TaskContext.get.attemptNumber
if (atmptNumber==0) {
println("Failing the task in first attempt")
throw new IllegalArgumentException("attemptNumber == 0")
}
println(s"Proceeding to the 2nd attempt")
}
我得到的错误是:
java.util.NoSuchElementException: None.get
at scala.None$.get(Option.scala:347)
at scala.None$.get(Option.scala:345)
答案 0 :(得分:0)
在不使用TaskContext的情况下,我可以解决第一次尝试失败而第二次尝试成功的问题。
Sudo代码:
if(Temp Folder is Empty ){
//Executes for First attempt
Write Dummy File to Temp Folder
Raise an Exceptio to Fail
}
else{
//Executes for second attempt
....Execute your code
Clean Temp Folder
}
希望它对您有帮助。