hdfs复制因子-最小化数据丢失风险

l5tcr1uw  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(311)

编辑-tl;博士:
在写入hdfs被认为成功之前,所有副本节点是否都必须存储一个文件(其所有块)?如果是,复制因素是否会影响写入延迟?
原始问题:
Hadoop 2 我可以通过设置 dfs.replication 属性设置为大于1的值(在某些hadoop发行版(如emr)中,默认值并不总是3)。
我的理解是,hdfs行为是同步地写入第一个副本,而其他副本是流水线的,复制以异步方式进行。是这样吗?
如果上述情况属实,那么如果第一个节点向namenode发送ack,然后在能够完成异步复制之前被陨石击中,那么总是存在数据丢失的风险。
有没有办法保证至少有x个节点在一次写入被认为是成功之前写入该块?这样做明智吗?我想我可以用 dfs.namenode.replication.min 属性,但我读到它只在“安全模式”下使用,因此在正常操作期间无法提供帮助。

bhmjp9jg

bhmjp9jg1#

您在哪里看到复制不可靠?来自cloudera博客:
当文件被写入时,数据节点形成一个管道来按顺序写入副本。数据通过管道以数据包(小于一个块)的形式发送,每个数据包都必须被确认为成功写入。如果某个数据节点在写入块时发生故障,则会将其从管道中删除。写入当前块后,名称节点将重新复制它,以弥补由于数据节点失败而丢失的副本。随后的块将使用具有所需数据节点数的新管道写入
如果复制块失败,那么写操作将失败,hdfs写操作将返回错误。在成功写入所有副本之前,操作不会被视为已完成:
下面是关于hdfs高可用性的具体细节。热释光;在整个写入操作被视为完成之前,在所有副本中验证最后一个块。仅仅“失败”也是不够的。相反,自动故障转移是指查找不同的数据节点并将失败的块写入其中。
有关块副本失败检测的详细信息:
http://blog.cloudera.com/blog/2015/02/understanding-hdfs-recovery-processes-part-1/
如果正在写入的文件的最后一个块没有传播到管道中的所有datanode,则在发生租约恢复时,写入到不同节点的数据量可能不同。在租约恢复导致文件关闭之前,必须确保最后一个块的所有副本具有相同的长度;这个过程称为块恢复。块恢复仅在租约恢复过程中触发,如果文件的最后一个块未处于完整状态(在后面的部分中定义),租约恢复仅在该块上触发块恢复。
有关块故障恢复的详细信息:
在写管道操作期间,管道中的某些数据节点可能会失败。当这种情况发生时,底层的写操作不能仅仅失败。相反,hdfs将尝试从错误中恢复,以允许管道继续运行,并且客户端继续写入文件。从管道错误中恢复的机制称为管道恢复。
我经历过多次数据节点/块写入失败。但我很少经历过成功的写作“不是真的”。而这些罕见的事件是由于物理磁盘的损坏而导致的。

相关问题