首页 > 解决方案 > 未能放置足够的副本:预期大小为 1,但只能选择 0 个存储类型

问题描述

未能放置足够的副本:预期大小为 1,但只能选择 0 个存储类型(replication=1,selected=[],不可用=[DISK],removed=[DISK],policy=BlockStoragePolicy

{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}

我们有一个场景,其中有多个 hdfs 文件正在写入(500-1000 个文件的顺序 - 最多同时写入 10-40 个这样的文件)——我们不会在每次写入时立即在每个文件上调用 close——但继续写入直到结束,然后关闭。

似乎有时我们会收到上述错误 - 并且写入失败。我们已将 hdfs 重试次数设置为 10 - 但这似乎没有帮助。

我们还将 dfs.datanode.handler.count 增加到 200 - 这有时会有所帮助,但并非总是如此。a)在这里增加 dfs.datanode.handler.count 会有所帮助吗?即使同时写入 10 个 .. b) 应该做些什么,这样我们就不会在应用程序级别出现错误 - 因为这样的 hadoop 监控页面表明磁盘是健康的 - 但从警告消息来看,似乎有时磁盘不可用 -- org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy: 未能放置足够的副本,仍然需要 1 才能达到 1 (unavailableStorages=[DISK], storagePolicy=BlockStoragePolicy

{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]} , newBlock=true) 所有必需的存储类型都不可用:availableStorages=[DISK], storagePolicy=BlockStoragePolicy

假设上述情况仅在我们发现磁盘故障时发生——我们还尝试将 dfs.client.block.write.replace-datanode-on-failure.enable 设置为 false,以便对于临时故障,我们不会收到错误。但这似乎也无济于事。

这里还有什么建议吗?

标签: hadoophdfs

解决方案


在我的情况下,这是通过为数据节点(在 Docker 上)打开防火墙端口 50010 来解决的


推荐阅读