Spark事件日志无法写入s3



我试图将我的spark应用程序的事件日志写入s3以便稍后通过历史服务器消费,但我在日志

中得到以下警告消息

WARN S3ABlockOutputStream:应用程序调用Syncable API对流写入/spark_logs/eventlog_v2_local-1671627766466/events_1_local-1671627766466。这是不支持的

下面是我使用的spark配置:

config("spark.eventLog.enabled", "true")
.config("spark.eventLog.dir", 's3a://change-data-capture-cdc-test/pontus_data_load/spark_logs')
.config("spark.eventLog.rolling.enabled", "true")
.config("spark.eventLog.rolling.maxFileSize", "10m")
  • spark版本- 3.3.1
  • 依赖jar文件:
    • org.apache.hadoop: hadoop-aws: 3.3.0
    • com.amazonaws: aws-java-sdk-bundle: 1.11.901

只创建appstatus_local-1671627766466.inprogress文件,不创建实际日志文件。但是对于我的本地文件系统,它的工作与预期的一样。

该警告意味着"应用程序调用了Syncable API来阻止流写入/spark_logs/eventlog_v2_local-1671627766466/events_1_local-1671627766466"。不支持">

应用程序代码使用sync()来刷新和保存数据到文件系统。显然是火花记录在调用这个。如前所述,3a客户端说"no can do"。

s3不是文件系统。它是一个对象存储;对象是用单个原子操作编写的。如果您查看S3ABlockOutputStream类—它毕竟是完全开源的—您可以看到它可以上传数据,但它只在close()中完成写入。

因此,在日志记录过程中是不可见的。这个警告是为了表明这种情况正在发生。一旦日志关闭,它就会出现。

如果您愿意,您可以将spark.hadoop.fs.s3a.downgrade.syncable.exceptions设置为true,而它将引发异常。对于hbase这样的应用程序来说,这个文件系统确实缺乏它所需要的语义。

最新更新