Spark CommitCoordinator 保证数据一致性

2019-07-10  本文已影响0人  Entry_1

本文引用了技术世界文章,来自:http://www.jasongj.com/spark/committer/

问题引入

【 三个重要目录 】

写入目录:

${output.dir.root}/_temporary/${appAttempt}/_temporary/${taskAttempt}/${fileName}

写入步骤:

  需要commit && 开启了commit coordinator
     commit coordinator检查是否可以commit:
      - 若该taskAttempt为失败的attempt,直接拒绝
      - 若该taskAttempt成功,且commit coordinator未允许过其该task的其他attempt的commit请求,则允许
      - 若该taskAttempt之前已经被同意过,则commit coordinator会继续同意
      - 若该taskAttempt成功,但已经有其他该task的attempt被授权commit了,则拒绝该attempt的commit请求
  不需要commit(则拒绝写入)
该值为1时
task commitTask 会将 ${output.dir.root}/_temporary/${appAttempt}/_temporary/${taskAttempt} 目录重命名为${output.dir.root}/_temporary/${appAttempt}/${taskAttempt}

该值为2时
task commitTask 会将 ${output.dir.root}/_temporary/${appAttempt}/_temporary/${taskAttempt} 内所有文件移动到${output.dir.root}
该值为1,则遍历${output.dir.root}/_temporary/${appAttempt}/${taskAttempt},并将所有文件移动到${output.dir.root}
该值为2,无需移动
上一篇 下一篇

猜你喜欢

热点阅读