我们正在使用Spark运行ETL流程,通过该流程从海量(500 + GB)的MySQL数据库中加载数据并转换为聚合的JSON文件,然后将其写到Amazon S3。
我的问题有两个:
此工作可能需要很长时间才能运行,并且很高兴知道该映射的进行情况。我知道Spark具有内置的日志管理器。就像在每个映射中放入一个log语句一样简单吗?我想知道每条记录何时被映射。
假定此繁重的工作在中间失败(也许它在数据库记录上阻塞或MYSQL连接断开)。有没有一种简单的方法可以从Spark中恢复呢?我听说缓存/检查点可以解决这个问题,但是我不确定如何?
谢谢!
答案 0 :(得分:1)
似乎有2个问题,但缺少答案和详细信息。无论如何,假设非SPARK Streaming答案并根据我自己的阅读/研究结果引用了其他答案,那么响应有限:
以下有关记录阶段,任务,作业的进度检查的内容:
通过log4j进行全局日志记录,并通过使用SPARK_HOME / conf文件夹下存储的模板进行定制,此模板log4j.properties.template文件用作定义日志需求的基础,这些目的是出于个人目的,但在SPARK水平。
使用Logger以编程方式,使用import org.apache.log4j。{Level,Logger}。
REST API以获取SPARK Jobs的状态。参见以下启发性博客:http://arturmkrtchyan.com/apache-spark-hidden-rest-api
还有一个可以使用的Spark侦听器
:http://:8080,以通过Web UI查看进度。
取决于故障的类型。正常与非正常,容错方面或内存使用问题,以及严重的数据库重复键错误等问题,具体取决于所使用的API。
顺便说一句,即使某些方面,例如,某些方面也不会记录为失败。在某些Hadoop存储管理器上重复的密钥插入。