1. 实现
当task执行failed时,发送邮件
import org.apache.spark._import org.apache.spark.scheduler.{SparkListener, SparkListenerTaskEnd}class SparkAppListener(conf: SparkConf) extends SparkListener{override def onTaskEnd(taskEnd: SparkListenerTaskEnd): Unit = synchronized {val info = taskEnd.taskInfoval AppName = conf.get("spark.app.name")val taskId = info.taskIdval stageId = taskEnd.stageIdif (info != null && taskEnd.stageAttemptId != -1) {val errorMessage: Option[String] =taskEnd.reason match {case e: ExceptionFailure =>Some(e.toErrorString)case e: TaskFailedReason =>Some(e.toErrorString)case _ => None}if (errorMessage.nonEmpty) {if (conf.getBoolean("enableSendEmailOnTaskFail", false)) {val messageInfo = "please note: ******AppName:"+AppName+"******\n"+"******stageId:"+stageId+"******\n"+"******taskId:"+taskId+"******\n"+ errorMessage.getval args = Array("wangsheying@qq.com", "spark任务监控", messageInfo)try {Message.sendMail(args)} catch {case e: Exception => e.printStackTrace()}}}}}}
