Hadoop namenode内存使用情况

时间:2012-11-02 09:48:52

标签: memory hadoop distributed-computing

我对hadoop namenode内存问题感到困惑。

  1. 当namenode内存使用率高于某个百分比(比如说75%)时,通过hadoop api读取和写入hdfs文件会失败(例如,调用一些open()会抛出异常),是什么原因?有没有人有同样的事情? PS。这次namenode磁盘io不高,CPU相对空闲。

  2. 什么决定了namenode'QPS(每秒查询数)?

  3. 非常感谢!

1 个答案:

答案 0 :(得分:1)

由于namenode基本上只是一个使用块管理HashMap的RPC服务器,因此存在两个主要的内存问题:

  1. Java HashMap非常昂贵,它的冲突解决方案(单独的链接算法)也很昂贵,因为它将冲突的元素存储在链表中。
  2. RPC服务器需要线程处理请求 - Hadoop附带自己的RPC框架,您可以使用dfs.namenode.service.handler.count 为数据节点配置,默认设置为10.或者您可以为其他客户端配置此dfs.namenode.handler.count ,例如想要运行作业的MapReduce作业JobClients。当一个请求进来并想要创建一个新的处理程序时,它可能会内存不足(新的Threads也分配了很多堆栈空间,也许你需要增加它)。
  3. 所以这些是你的namenode需要这么多内存的原因。

    What determines namenode'QPS (Query Per Second) ?
    

    我还没有对它进行基准测试,所以我不能给你很好的提示。当然,微调处理程序的数量高于可以并行运行的任务数量+推测执行。 根据您提交作业的方式,您还必须对其他属性进行微调。

    当然你应该给namenode足够的内存,所以它有余量不会落入完整的垃圾收集周期。