Apache spark 如何在长时间运行的Spark map作业中监视进度和恢复?
我们使用Spark来运行一个ETL过程,通过该过程,数据从一个大型(500+GB)MySQL数据库加载,并转换为聚合的JSON文件,然后写入AmazonS3 我的问题有两个方面:Apache spark 如何在长时间运行的Spark map作业中监视进度和恢复?,apache-spark,Apache Spark,我们使用Spark来运行一个ETL过程,通过该过程,数据从一个大型(500+GB)MySQL数据库加载,并转换为聚合的JSON文件,然后写入AmazonS3 我的问题有两个方面: 这项工作可能需要很长时间才能运行,如果能够了解映射的进展情况,那就太好了。我知道Spark有一个内置的日志管理器。它是否像在每个映射中放置一个log语句那样简单?我想知道每个记录何时被映射 假设这个巨大的任务在中间失败(可能是在DB记录上阻塞或者MySQL连接下降)。有没有一种简单的方法可以从火花中恢复?我听说缓存/检
谢谢 似乎有两个问题,没有答案和细节。无论如何,假设我的答案是非火花流式回答,并根据我自己的阅读/研究参考其他答案,有限的回答:
- 通过log4j进行全局日志记录,并通过在SPARK_HOME/conf文件夹下存储的模板下使用模板log4j.properties.template文件对其进行裁剪,该文件作为定义日志记录要求的基础,用于个人目的,但在SPARK级别
- 通过使用Logger编程,使用import org.apache.log4j.{Level,Logger}
- RESTAPI以获取SPARK作业的状态。请看这个启发性的博客:
- 还可以使用Spark侦听器
- :http://:8080通过Web UI查看进度
- 请参阅SPARK通过查看DAG并尝试通过重新执行所需内容来重建分区来处理其自身的故障。这一切都包含了无需进行任何操作的容错方面李>
- SPARK无法控制的事情意味着一切都结束了。例如,由于在大规模计算中超过上的各种参数而可能导致的内存问题,DF JDBC针对存储写入时出现重复错误,JDBC连接中断。这意味着重新执行
另一方面,有些方面即使存在故障,也不会被记录为故障,例如,某些Hadoop存储管理器上的重复密钥插入。回答得很好!这对我很有帮助。我已经使用log4j设置了日志记录,只需在我的映射和reduce函数中记录一些内容,以确保在运行过程中所有映射都正确。此外,对于失败,我发现一篇文章建议使用累加器优雅地处理错误。我最终通过一个累加器收集失败的记录。这样,剩下的工作就可以运行了,我可以回来在以后的运行中修复损坏的记录。对你很好,先生,有很多方法可以解决这个问题-尽管我是一个爱猫的人!