Memory Hadoop名称节点内存使用情况
我被hadoop的namenode内存问题弄糊涂了Memory Hadoop名称节点内存使用情况,memory,hadoop,distributed-computing,Memory,Hadoop,Distributed Computing,我被hadoop的namenode内存问题弄糊涂了 当namenode内存使用率高于某个百分比(比如75%)时,通过hadoop api读写hdfs文件将失败(例如,调用某个open()将抛出异常),原因是什么?有人有同样的东西吗? 另外,这次namenode磁盘io不高,CPU相对空闲 什么决定了namenode的QPS(每秒查询数) 非常感谢 由于namenode基本上只是一个RPC服务器,管理带有块的HashMap,因此存在两个主要内存问题: JavaHashMap非常昂贵,其冲突解决方案
非常感谢 由于namenode基本上只是一个RPC服务器,管理带有块的
HashMap
,因此存在两个主要内存问题:
HashMap
非常昂贵,其冲突解决方案(分离链接算法)也很昂贵,因为它将冲突的元素存储在一个链表中dfs.namenode.service.handler.count
配置它,默认设置为10。或者,您可以为其他要运行作业的客户端配置此dfs.namenode.handler.count,如MapReduce作业、JobClient
。当一个请求进入,并且它想要创建一个新的处理程序时,它可能会耗尽内存(新线程也在分配一大块堆栈空间,可能您需要增加这个)李>
这就是为什么namenode需要这么多内存的原因
What determines namenode'QPS (Query Per Second) ?
我还没有对它进行基准测试,所以我不能给你很好的提示。当然,微调处理程序的计数高于并行+推测执行中可以运行的任务数。
根据提交作业的方式,还必须微调其他属性
当然,您应该始终为namenode提供足够的内存,这样它就有了空间,不会陷入完全的垃圾收集周期。谢谢,我将dfs.namenode.handler.count设置为8000,根据您的回答,它会花费namnode 8000*2M(假设一个线程花费2M)吗,当namenode内存使用率>75%时,为什么读取或写入hdfs文件失败?我想不出一个原因一般来说你不能这么说,但is使用至少1mb的堆栈,2mb是一个很好的上限,我相信。我写了一个程序,需要从hdfs获取很多文件,当namonode内存使用率>75%时,会发现很多文件无法从hdfs获取