假设我有一个 Spark 2.x 应用程序,它启用了推测 (spark.speculation=true),它将数据写入 HDFS 上的特定位置。
现在,如果任务(将数据写入 HDFS)需要很长时间,Spark 将在另一个执行器上创建相同任务的副本,并且两个作业将并行运行。
Spark 是如何处理这个问题的?显然,这两个任务不应该同时尝试在同一个文件位置写入数据(在这种情况下似乎正在发生)。
任何帮助,将不胜感激。
谢谢
假设我有一个 Spark 2.x 应用程序,它启用了推测 (spark.speculation=true),它将数据写入 HDFS 上的特定位置。
现在,如果任务(将数据写入 HDFS)需要很长时间,Spark 将在另一个执行器上创建相同任务的副本,并且两个作业将并行运行。
Spark 是如何处理这个问题的?显然,这两个任务不应该同时尝试在同一个文件位置写入数据(在这种情况下似乎正在发生)。
任何帮助,将不胜感激。
谢谢
据我了解,我的任务中发生了什么:
原因:org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException): 无法创建文件/<hdfs_path>/.spark-staging-<...>///part-00191 -.c000.snappy.parquet 用于 10.3.110.14 上的 DFSClient_NONMAPREDUCE_936684547_1,因为此文件租约当前由 10.0.14.64 上的 DFSClient_NONMAPREDUCE_-1803714432_1 拥有,位于 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.recoverLeaseInternal(FSNamesystem.java:2629.java )
我将继续研究这种情况,所以也许有一天答案会更有帮助