什么是HDFS写作一致性

时间:2016-05-30 20:57:58

标签: hadoop hdfs

HDFS是否具有与Cassandra一样的写入一致性,让我们说当我将一个文件写入HDFS时,何时能获得成功的响应,是第一次复制完成还是完成3次复制? (假设rep = 3)

3 个答案:

答案 0 :(得分:3)

Hadoop相比,Cassandra的工作方式不同。

您有两个与复制相关的参数。

dfs.replication:默认块复制。创建文件时,可以指定实际的复制数。如果未在创建时间

中指定复制,则使用默认值

dfs.namenode.replication.min:最小块复制。

一旦满足dfs.namenode.replication.min,写操作将被视为成功。

但是这个复制到dfs.replication将在顺序管道中发生。第一个Datanode写入块并将其转发到第二个Datanode。第二个Datanode写入块并将其转发到第三个Datanode。

DFSOutputStream还维护一个等待数据节点确认的数据包内部队列,称为ack队列。

只有当管道中的所有Datanode确认时,才会从ack队列中删除数据包。

您可以在相关的SE问题中找到更多详细信息:

Hadoop 2.0 data write operation acknowledgement

答案 1 :(得分:1)

在正常过程中,客户端将等到所有副本发送"确认"对于所有数据包。但是如果在写入过程中DataNode失败,客户端将继续将数据写入剩余的DataNode,如果确认接收所有包的DataNode数量等于或大于最小副本数量,则它将成功(默认1)。在这种情况下,由于副本数量少于所需的副本数量,因此这些块将被标记为未复制,NameNode将以异步方式复制它们。

然后,即使没有创建所有必需的副本,写入过程也可以返回成功。

如果您想强制仅在创建所有副本时成功,则可以将属性 dfs.namenode.replication.min (默认值1)设置为等于 dfs.replication (默认3)

答案 2 :(得分:0)

写入解剖结构就像 - 当客户端尝试在群集上写入文件时,它将联系NN以获取DN。 NN将执行所有检查并验证客户端。现在客户端将直接联系DN来编写文件。如果复制因子设置为3并且有2个文件分割。数据将存储在6个DN中。在这里,机架意识政策有所了解。

现在存储并行完成的2个文件分割,并以顺序方式完成复制。第3个DN将向第2个DN发送确认,第2个DN将向第1个DN发送确认信号。

当收到第一个DN +其他DN(另一个分割)的确认时,将向客户发送确认。