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";
?
?
?