hadoop - 未能放置足够的副本:预期大小为 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,以便对于临时故障,我们不会收到错误。但这似乎也无济于事。
这里还有什么建议吗?
解决方案
在我的情况下,这是通过为数据节点(在 Docker 上)打开防火墙端口 50010 来解决的
推荐阅读
- oracle - Oracle NUMTODSINTERVAL 函数和区间函数
- couchdb - CouchDB 是否共享多个视图使用的地图功能?
- c# - StreamReader 无法从引用的程序集中读取代码的 FileStream
- .net-core - .net core 2.0+ 的 rdlc 报告替代方案
- javascript - 使用javascript合并行
- reactjs - 如何为 react-typist 或其他包创建声明文件
- r - 使用 EndNote (.enl) 库在 R Markdown 中引用的引用 ID 是什么?
- angular - 遍历对象中的数组参数
- r - ZendeskR 尝试连接 api 时产生以下错误
- php - 如何知道我是否使用了作曲家依赖项?