hdfs的编写一致性是什么

e3bfsja2  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(320)

hdfs是否像cassandra一样具有写入一致性,比如说,当我将一个文件写入hdfs时,何时才能获得成功响应,是第一次复制完成还是3次复制完成(假设rep=3)

oxf4rvwz

oxf4rvwz1#

在正常过程中,客户端将等待所有副本发送所有数据包的“确认”。但是,如果在写入过程中一个数据节点失败,客户机将继续将数据写入其余的数据节点,并且如果确认接收到所有包的数据节点数等于或大于最小副本数(默认值为1),则将成功写入。在这种情况下,由于副本的数量少于所需的副本数量,因此块将被标记为未复制,namenode将异步复制它们。
然后,即使没有创建所有必需的副本,写入过程也可以返回成功。
如果要强制仅在创建了所有副本时成功,可以将属性dfs.namenode.replication.min(默认值1)设置为等于dfs.replication(默认值3)

vybvopom

vybvopom2#

写剖析的工作原理类似于-当一个客户端试图在集群上写一个文件时,它会联系nn以获取dns。nn将执行所有检查并对客户端进行身份验证。现在客户端将直接联系dns来编写文件。如果复制因子设置为3,并且有2个文件分割。数据将存储在6个dns中。在这里,机架意识政策的一些图片。
现在,存储文件的两个拆分并行完成,复制是按顺序完成的。第3个dn将向第2个dn发送确认,第2个dn将向第1个dn发送ack信号。
当其他dn(对于另一个拆分)的第一个dn+接收到确认时,将向客户端发送一个确认。

hmtdttj4

hmtdttj43#

它的工作原理不同 Hadoop 相比 Cassandra .
您有两个与复制相关的参数。 dfs.replication :默认块复制。创建文件时可以指定实际的复制次数。如果在创建时中未指定复制,则使用默认值 dfs.namenode.replication.min :最小块复制。
一次 dfs.namenode.replication.min 已满足,写入操作将被视为成功。
但这种复制 dfs.replication 将在顺序管道中发生。第一个datanode写入块并将其转发给第二个datanode。第二个datanode写入块并将其转发给第三个datanode。 DFSOutputStream 还维护等待datanodes确认的数据包的内部队列,称为ack队列。
只有当数据包已被管道中的所有数据节点确认时,才会从ack队列中删除该数据包。
您可以在相关问题中找到更多详细信息:
hadoop 2.0数据写入操作确认

相关问题