gpt4 book ai didi

hadoop - 当客户端关闭连接时,Hadoop 如何处理未复制的数据?

转载 作者:可可西里 更新时间:2023-11-01 16:11:33 24 4
gpt4 key购买 nike

我正在运行 Hadoop 2.5.0-cdh5.3.2 集群。 Flume 正在别处运行,正在向这个集群写入数据。当集群负载较重时,flume-agent 完成写入并尝试在 HDFS 完成数据复制之前关闭文件。关闭失败并重试,但 flume-agent 配置了超时,当关闭无法及时完成时,flume-agent 断开连接。

HDFS对没有完成复制的文件做了什么?我的印象是后台线程会完成复制,但我在我的集​​群中只看到部分写入的 block 。该 block 有一个好的副本,并且副本仅部分写入,因此 HDFS 认为该 block 已损坏。

我已经通读了 recovery process没想到我会留下未写的 block 。

我有以下客户端设置:

dfs.client.block.write.replace-datanode-on-failure.enable=true
dfs.client.block.write.replace-datanode-on-failure.policy=ALWAYS
dfs.client.block.write.replace-datanode-on-failure.best-effort=true

我设置这些是因为 flume-agent 似乎正在失去与数据节点的连接并且失败了。我希望它重试,但如果写入了一个 block ,就称它为好并继续。

best-effort 是否阻止写入剩余的 block ?如果它导致最后一个 block 被称为损坏,这似乎毫无用处。

最佳答案

我认为 flume agend 在成功关闭文件之前正在失去 hdfs 连接。 DFS 客户端在本地缓存一些数据。在关闭文件之前,它必须刷新这个本地缓存。如果 hdfs 连接丢失,关闭将失败, block 将被标记为损坏。有一种情况是 hdfs 连接意外关闭。 Hdfs 客户端注册关闭 Hook 。不保证调用关闭 Hook 的顺序。在您的情况下,如果水槽代理正在关闭,则可能会调用 hdfs 客户端关闭并且文件关闭将失败。如果您认为这是可能的,请尝试禁用关闭 Hook 。

fs.automatic.close = false

关于hadoop - 当客户端关闭连接时,Hadoop 如何处理未复制的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29952799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com