2

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

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

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

非常感谢!

4

1 回答 1

1

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

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

所以这些就是你的namenode需要这么多内存的原因。

What determines namenode'QPS (Query Per Second) ?

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

当然,您应该始终为 namenode 提供足够的内存,这样它就有足够的空间来不陷入完整的垃圾回收周期。

于 2012-11-02T10:11:17.450 回答