cdh4 vs cdh3 client处理DataNode异常的不同

cdh4在处理pipeline中的错误时,逻辑上与原先不一样。 

cdh3在处理pipeline的错误时,假设当前pipeline有3个datanode,如果一个有问题,那么通过移除掉坏的datanode,重新建立只有2个datanode的pipeline,然后接着往这两个节点的pipeline写,直到结束。 

cdh4默认处理时不一样,如果当前pipeline有3个datanode,有一个出了问题,那么把这个从pipeline中移除,然后向namenode在申请一个新的datanode,从其中一个好的datanode上面的块数据拷贝到这个新的datanode,然后建立一个新的3个datanode的pipeline。 

cdh4这个策略可以配置,见类ReplaceDatanodeOnFailure,默认见下面:

  public static final String  DFS_CLIENT_WRITE_REPLACE_DATANODE_ON_FAILURE_ENABLE_KEY = "dfs.client.block.write.replace-datanode-on-failure.enable";
  public static final boolean DFS_CLIENT_WRITE_REPLACE_DATANODE_ON_FAILURE_ENABLE_DEFAULT = true;
  public static final String  DFS_CLIENT_WRITE_REPLACE_DATANODE_ON_FAILURE_POLICY_KEY = "dfs.client.block.write.replace-datanode-on-failure.policy";
  public static final String  DFS_CLIENT_WRITE_REPLACE_DATANODE_ON_FAILURE_POLICY_DEFAULT = "DEFAULT";

猜你喜欢

转载自bupt04406.iteye.com/blog/1942080