View a markdown version of this page

使用 Spark 事件日志轮替 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Spark 事件日志轮替

借助 Amazon EMR 6.3.0 及更高版本,您可以启用 Amazon EMR on EKS 的 Spark 事件日志轮换功能。此功能根据配置的时间间隔轮替文件,并删除最旧的事件日志文件,而不是生成单个事件日志文件。

轮替 Spark 事件日志,以助您避免因长时间运行或串流任务而生成的大型 Spark 事件日志文件出现潜在问题。例如,启动一个长时间运行的 Spark 任务,并且其启用了使用 persistentAppUI 参数的事件日志。Spark 驱动程序会生成一个事件日志文件。如果任务运行数小时或数天,并且 Kubernetes 节点上的磁盘空间有限,则事件日志文件可以占用所有可用磁盘空间。启用 Spark 事件日志轮替功能,可通过将日志文件拆分为多个文件,并删除最旧的文件来解决问题。

注意

此功能只能在 Amazon EMR on EKS 上使用。在 Amazon EC2 上运行的 Amazon EMR 不支持 Spark 事件日志轮换。

注意

在 EKS 上的 Amazon EMR 上,基于时间的事件日志轮换(本页中描述的spark.eventLog.rotation.*参数)会根据时间间隔限制 Spark 事件日志的增长,这是支持的机制。在 EKS 上的 Amazon EMR 上上传事件日志时不支持基于开源大小的滚动事件日志 (spark.eventLog.rolling.*)。启用滚动后,Spark 驱动程序会写入基于大小的分段文件。EKS 上的 Amazon EMR 托管日志传送组件(上传事件日志以使应用程序显示在 Spark 历史服务器中的代理)不收集这些文件。因此,即使作业成功运行,应用程序也不会出现在 Spark 历史服务器中。

如果您的事件日志未出现在 Spark History Server 中,请检查spark.eventLog.rolling.enabled是否已设置,然后按照下一节所述切换到事件日志轮换。

要打开 Spark 事件日志轮替功能,请配置以下 Spark 参数:

  • spark.eventLog.rotation.enabled:启用日志轮替功能。默认情况下,Spark 配置文件中会禁用它。将其设置为 true 以启用此功能。

  • spark.eventLog.rotation.interval:指定日志轮替的时间间隔。最小值为 60 秒。默认值为 300 秒。

  • spark.eventLog.rotation.minFileSize:指定轮替日志文件的最小文件大小。默认值最少为 1MB。

  • spark.eventLog.rotation.maxFilesToRetain:指定清理期间要保留的轮替日志文件的数量。有效范围为 1 到 10。默认值是 2。

您可以在 StartJobRun API 的 sparkSubmitParameters 部分指定这些参数,如以下示例所示。

"sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi --conf spark.eventLog.rotation.enabled=true --conf spark.eventLog.rotation.interval=300 --conf spark.eventLog.rotation.minFileSize=1m --conf spark.eventLog.rotation.maxFilesToRetain=2"

从滚动事件日志迁移到轮换

如果您当前使用基于开源大小的滚动事件日志,请将spark.eventLog.rolling.*参数替换为轮换参数。轮换是按时间间隔(最小文件大小)而不是纯粹根据文件大小来限制事件日志的上限,因此请选择适合工作事件速率的间隔和最小文件大小。切换时移除所有spark.eventLog.rolling.*设置。下表将每个滚动参数映射到其等效旋转参数。

滚动参数(不支持) 旋转参数(支持)
spark.eventLog.rolling.enabled=true spark.eventLog.rotation.enabled=true
spark.eventLog.rolling.maxFileSize(按大小划分上限) spark.eventLog.rotation.interval(按时间上限;最少 60 秒,默认 300 秒),与spark.eventLog.rotation.minFileSize(最小和默认 1 MB)一起使用
spark.eventLog.rolling.maxFilesToRetain spark.eventLog.rotation.maxFilesToRetain(有效范围 1 到 10,默认为 2)