Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory Hadoop名称节点内存使用情况_Memory_Hadoop_Distributed Computing - Fatal编程技术网

Memory Hadoop名称节点内存使用情况

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非常昂贵,其冲突解决方案

我被hadoop的namenode内存问题弄糊涂了

  • 当namenode内存使用率高于某个百分比(比如75%)时,通过hadoop api读写hdfs文件将失败(例如,调用某个open()将抛出异常),原因是什么?有人有同样的东西吗? 另外,这次namenode磁盘io不高,CPU相对空闲

  • 什么决定了namenode的QPS(每秒查询数)


  • 非常感谢

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

  • Java
    HashMap
    非常昂贵,其冲突解决方案(分离链接算法)也很昂贵,因为它将冲突的元素存储在一个链表中
  • RPC服务器需要线程来处理请求-Hadoop附带了自己的RPC框架,您可以使用数据节点的
    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获取