我对hadoop namenode内存问题感到困惑。
当namenode内存使用率高于某个百分比(比如说75%)时,通过hadoop api读取和写入hdfs文件会失败(例如,调用一些open()会抛出异常),是什么原因?有没有人有同样的事情? PS。这次namenode磁盘io不高,CPU相对空闲。
什么决定了namenode'QPS(每秒查询数)?
非常感谢!
答案 0 :(得分:1)
由于namenode基本上只是一个使用块管理HashMap
的RPC服务器,因此存在两个主要的内存问题:
HashMap
非常昂贵,它的冲突解决方案(单独的链接算法)也很昂贵,因为它将冲突的元素存储在链表中。dfs.namenode.service.handler.count
为数据节点配置,默认设置为10.或者您可以为其他客户端配置此dfs.namenode.handler.count
,例如想要运行作业的MapReduce作业JobClients
。当一个请求进来并想要创建一个新的处理程序时,它可能会内存不足(新的Threads也分配了很多堆栈空间,也许你需要增加它)。 所以这些是你的namenode需要这么多内存的原因。
What determines namenode'QPS (Query Per Second) ?
我还没有对它进行基准测试,所以我不能给你很好的提示。当然,微调处理程序的数量高于可以并行运行的任务数量+推测执行。 根据您提交作业的方式,您还必须对其他属性进行微调。
当然你应该给namenode足够的内存,所以它有余量不会落入完整的垃圾收集周期。