博客,Spark依赖于Hadoop的“提交协议”类,因此,如果由于某些故障输出目录而没有完成工作,则如果没有完成工作(部分输出文件不会发生)。 我的问题是; to does spark阻止部分写作在发生故障的情况下(HDFS,S3等)?
是否有可能在最终写操作之前使用相同的临时位置使用相同的位置?
有可能使用不止一次的同一临时位置提交的同一火花作业?
这是一个非常有趣的问题,也是您如何以不可避免的失败为基础实施数据分析的基础。
HADOOPV1算法O(1)
要执行任务,有弹性,可以在任务提交中失败。职位提交是〜
O(files)
O(data)
提起任务,提交工作很慢(对于整个作业的输出)。缺乏原子质重命名的潜在危险。hadoop v2提交算法HDFS:
O(data)
执行任务,无法处理失败。工作提交是O(1)
O(files)
呼叫。
s3:touch _SUCCESS
要执行任务,无法处理失败,并且在较长的副本操作下进行提交,任务犯下失败的机会更高。
我个人不认为V2算法的失败语义; MapReduce和Spark都假定可以重复一个在提交过程中失败的任务...这在这里不存在。
有一些您不想知道的额外细节,例如驾驶员如何结论一项任务失败,MapReduce如何决定它已经从纱线中分配了,因此一定不能承诺,但总的来说,这一切都取决于心跳和心跳和一旦任务就无法重新铺设的假设。如果您自己实施了提交算法,请确保悬挂在整个工作之后挂起的任务委员
databricks dbio。看不到代码,听起来像是他们将dynamoDB用于XAS.
IBMStocator:阅读纸张,Stocator:Spark的高性能对象存储连接器。重点是最大程度地减少HTTP请求,并能够从失败的工作/任务提交中回滚。
hadoop3.1的S3A提交者,请阅读:零重命名committer。提交任务的时间取决于选择哪个参数。最糟糕的时间将数据从VM上传到S3。任务失败可恢复。作业提交:每个文件创建的一个 *http帖子,可行的,所以
O(data)
对于Azure和GCS,请使用manifestcommitter。这解决了工作提交中的Azure量表问题(加上可以触发的重命名故障模式),并且缺乏GCS中的目录重命名。
临时位置位于最终的目标文件夹中,temp作为subsubfolder 有可能使用不止一次的同一临时位置提交的同一火花作业? 是的,他们使用外源/临时工作为目的地