在項目中,我進行RDD內的行動和變革的一些副作用。我想測試一下,即使Spark引擎必須重試某些分區的計算,我的業務邏輯也能正常工作。 所以我試圖在計算過程中模擬失敗。測試火花的故障轉移
object Test extends App {
val conf = new SparkConf()
conf.setMaster("local[4]")
conf.setAppName(getClass.getName)
val sc = new SparkContext(conf)
try {
val data = sc.parallelize(1 to 10)
val res = data.map(n => {
if (TaskContext.get().attemptNumber() == 0 && n==5) {
sys.error("boom!")
}
n * 2
}).collect()
}
finally {
sc.stop()
}
}
但它不起作用:異常傳播到驅動程序。 似乎Spark試圖僅故障轉移其內部錯誤。 有什麼方法可以測試它嗎?