我目前负责管理雇主的一个快速增长的 Hadoop 集群,该集群目前基于 0.21.0 版本构建,每个工作节点和主节点的操作系统均为 CentOS。我已解决了大多数标准配置问题(负载平衡、HDFS 的 IO 规划、确保有足够的磁盘空间用于溢出操作等),但尚未找到有关如何管理每个任务跟踪器、数据节点、映射器或化简器所需的文件描述符数量的良好文档。
到目前为止,我读过的文档(涵盖 Hadoop 和 HBase)都模糊地指出,溢出操作在尝试写入磁盘时会同时消耗大量描述符。当然,该文档并未提供上述描述符的范围或预期寿命的细分。给出的唯一建议是提高系统限制,这作为一种变通方法是可行的,但作为一种长期规划策略则显得荒谬。
我不知道 Hadoop 对其所需文件描述符数量做了哪些假设。因此,在正常作业的整个生命周期内(即不依赖于 MultipleOutputs),对每个映射器、reducer、任务跟踪器和数据节点所需的文件描述符总数进行配置相关的计算将非常有用。
目前是否存在这样的计算?如果存在,我能否对我所定义的任意数量的工作的限制做出合理的估计?
(为了增加遇到此问题的其他人发现此问题的可能性,当可用描述符池耗尽时,Hadoop 会很乐意抛出 java.io.EOFException 和 java.io.IOException(指向错误的文件描述符)。我花了好几个小时才找到答案,因为这些异常中包含的消息非常通用。)
答案1
这是 Hadoop 生态系统中的主要问题来源,据我所知,目前还没有针对此类资源进行全面规划的好办法。总体而言,这不是一个企业级质量的 Hadoop 发行版,无法支持您在系统中应用的值得称赞的勤奋程度。
但我确信在接下来的几个月里一定会有一个。