【HDFS】EC写数据时checkStreamerFailures逻辑

本文试图弄清楚以下问题:

  • checkStreamerFailures方法主要目的是做什么的?
  • checkStreamerFailures方法的调用点(调用时机、条件)?
  • checkStreamerFailures及其周边函数的逻辑。

RQ1:checkStreamerFailures方法主要目的是做什么的?

此方法的目的是在close流或者每次写完一整个stripe时,对streamer做健康判断。
因为cell是ec写的最小单位,那每次一个条带包含6+3个cell,在这一个条带写入的过程中,如果有写入失败的streamer就要做一些额外工作。
例如:

  • 调用updateBlockForPipeline RPC来把block的GS值更新。
  • 等待
  • 调用updatePipeline RPC来把这个block的写入pipeline的datanode列表进行更新。(NN侧会通过setExpectedLocations方法更新ReplicaUnderConstruction[] replicas
  • 检查如果总计失败的streamer数超过parity block数,抛IOE,关闭所有streamer,写文件失败。

RQ2:checkStreamerFailures方法的调用点(调用时机、条件)?

checkStreamerFailures方法有三处调用点,分别是:

  • writeChunk–cell

你可能感兴趣的:(HDFS全方位实战,hdfs,hadoop,大数据)