当hadoop中的所有数据节点都失败时会发生什么?
我从hadoop操作中了解到,如果数据节点在写入过程中失败 将创建一个包含剩余数据节点的新复制管道 打开并继续写入。在这一点上,事情基本上回到了过去 正常,写入操作将继续,直到文件关闭。这个 namenode将注意到文件中的一个块是 在“已复制”下,将安排创建新的复制副本 异步的。客户端可以从多个失败的数据节点恢复 前提是至少写入了最少数量的副本(由 默认值为1) 但是如果所有的数据节点都失败了会发生什么呢?i、 例如,未写入的复制副本的最小数量? 客户端是否会要求namenode提供新的数据节点列表?还是工作会失败 注意:我的问题不是集群中所有数据节点发生故障时会发生什么。问题是,如果客户端本应写入的所有数据节点在写入操作期间失败,会发生什么情况当hadoop中的所有数据节点都失败时会发生什么?,hadoop,hdfs,Hadoop,Hdfs,我从hadoop操作中了解到,如果数据节点在写入过程中失败 将创建一个包含剩余数据节点的新复制管道 打开并继续写入。在这一点上,事情基本上回到了过去 正常,写入操作将继续,直到文件关闭。这个 namenode将注意到文件中的一个块是 在“已复制”下,将安排创建新的复制副本 异步的。客户端可以从多个失败的数据节点恢复 前提是至少写入了最少数量的副本(由 默认值为1) 但是如果所有的数据节点都失败了会发生什么呢?i、 例如,未写入的复制副本的最小数量? 客户端是否会要求namenode提供新的数据节
假设namenode告诉客户端将块B1写入Rack1中的数据节点D1、Rack2中的D2和Rack1中的D3。集群中可能还有其他机架(机架4、5、6等)。如果Rack1和Rack2在写入过程中失败,客户机知道数据没有成功写入,因为它没有从datanodes接收到ACK,此时,它会要求Namenode提供新的datanodes集吗?可能在还活着的架子上吗?好的,我知道你在问什么了。DFSClient将从namenode中获得一个datanodes列表,它应该在其中写入一个文件块(例如a)。DFSClient将迭代该数据节点列表,并在这些位置写入块A。如果块写入在第一个datanodes中失败,它将放弃块写入,并向namenode请求一组新的datanodes,以便再次尝试写入 下面是DFSClient的示例代码,它解释了-
private DatanodeInfo[] nextBlockOutputStream(String client) throws IOException {
//----- other code ------
do {
hasError = false;
lastException = null;
errorIndex = 0;
retry = false;
nodes = null;
success = false;
long startTime = System.currentTimeMillis();
lb = locateFollowingBlock(startTime);
block = lb.getBlock();
accessToken = lb.getBlockToken();
nodes = lb.getLocations();
//
// Connect to first DataNode in the list.
//
success = createBlockOutputStream(nodes, clientName, false);
if (!success) {
LOG.info("Abandoning block " + block);
namenode.abandonBlock(block, src, clientName);
// Connection failed. Let's wait a little bit and retry
retry = true;
try {
if (System.currentTimeMillis() - startTime > 5000) {
LOG.info("Waiting to find target node: " + nodes[0].getName());
}
Thread.sleep(6000);
} catch (InterruptedException iex) {
}
}
} while (retry && --count >= 0);
if (!success) {
throw new IOException("Unable to create new block.");
}
return nodes;
}
谢谢你的答复。我知道,如果所有数据节点都出现故障,数据将丢失,这种情况也非常罕见。很抱歉,可能是我的问题不清楚,所以我在问题上添加了一个注释。很抱歉,我找不到我问题的答案,您没有理解哪一部分,或者我理解错了您的问题?我真的很好奇?我想这对我也有帮助!感谢客户端C1正在将块B1写入数据节点D1。D2和D3正在排队。在D1上执行写入操作时,节点D1、D2和D3失败。现在,C1应该写入的数据节点中没有一个是活动的。在这一点上会发生什么?C1是否会尝试从namenode获取新的数据节点列表(可能是D4、D5、D6)?还有一个问题,如果块B1在所有数据节点中损坏,会发生什么?i、 例如,如果校验和不正确。塔克斯