apache-spark - 如何将 Spark Streaming 检查点位置存储到 S3 中?
问题描述
我对获取 S3 parquet 数据并将 parquet 数据写入 S3 的 Spark Streaming 应用程序 (Spark v2.3.2) 感兴趣。应用程序的数据帧流使用groupByKey()
并flatMapGroupsWithState()
使用GroupState
.
是否可以将其配置为使用s3检查点位置?例如:
val stream = myDataset.writeStream
.format("parquet")
.option("path", s3DataDestination)
.option("checkpointLocation", s3CheckpointPath)
.option("truncate", false)
.option(Trigger.Once)
.outputMode(OutputMode.Append)
stream.start().awaitTermination()
我确认以上是能够成功将数据写入s3DataDestination
.
但是,写入 s3 检查点位置时会引发异常:
java.lang.IllegalStateException: Error committing version 1 into HDFSStateStore[id=(op=0, part=9), dir=s3://<my_s3_location>
at org.apache.spark.sql.execution.streaming.state.HDFSBackedStateStoreProvider$HDFSBackedStateStore.commit(...)
...
Caused by: java.io.IOException: Failed to rename s3://.../checkpoint/state/0/9/temp... to s3://.../checkpoint/state/0/9/1.delta
这需要自定义实现 S3StateStoreProvider
吗?或者,检查点位置是否需要写入 HDFS?
解决方案
问题是写入和读取的并发频率太高。AWS S3 不提供此类功能。
解决方案 :
- 我们必须切换到本地安装的永久磁盘以进行 Spark 检查点
- S3Guard:这将使 S3 的读写更加一致(注意:这是实验性的,我个人从未见过它实际使用过)
- 使用 HDFS
推荐阅读
- css - 如何设置 v-btn-toggle 的样式以跳过主题--light
- windows - Windows Embedded Handheld 6.5 Professional VPN 配置
- robotframework - Robotframework - 没有零填充十进制数字的月份中的哪一天
- tensorflow - 使用图形文件的 Tf 到 tflite 转换问题
- python-3.x - 如何在python中找到从给定节点到所有叶节点的路径
- python-3.x - 我的脚本被阻止抓取该网站(http:403),但不是我的浏览器
- computer-vision - 有没有办法通过 xamarin.forms 中的计算机视觉 API 从名片中获取姓名、电子邮件和电话号码
- hibernate - 将 jsp 连接到数据库 - DAO
- javascript - 如何使用javascript实时动态计算元素/类的长度......?
- java - 如何远程提交mapreduce作业