【问题标题】:Why Hadoop need that amount of RAM?为什么 Hadoop 需要这么多内存?
【发布时间】:2017-09-14 09:21:40
【问题描述】:

Hadoop 容器需要的 RAM 比它本身的数据大小(我用于测试 0.5GB 大小的数据)实际上要多一倍,为什么它太多了?

物理内存和容器外的虚拟内存的概念是什么:有时您会遇到异常,例如物理内存中的 100mb 和 500mb,但虚拟内存中的 2.5Gb 超过 2GB。为什么 hadoop 超过了虚拟内存限制,只要 2 GB 基本上足以运行整个操作系统并将我的所有数据保存在 RAM 内存中,为什么 2GB 还不够?

【问题讨论】:

  • 我从未见过 RAM 多于存储的 hadoop 集群。您甚至可以购买 4 TB 的 RAM 吗?并将其与单个 4 TB 磁盘放在同一个主板上?
  • @cricket_007 亲爱的仔细阅读我提到的数据大小不是我为测试 0.5GB 数据大小的任务而运行的存储大小。我会提到尺寸以便更清楚。
  • 并非所有数据都需要一次存储在内存中,除非您正在运行 Spark 或类似的东西。如果您超出了容器大小,您只需要编辑 yarn 配置文件以了解在您的集群中有意义的内容。我相信 2G 是默认最大值
  • 此外,如果您正在测试半场演出,则不需要 hadoop。我 6 岁的笔记本电脑可以处理它;)
  • @cricket_007 谢谢,但我的整个问题是为什么这么多内存?以及为什么只要 2GB 的 RAM 已经专用且数据为 0.5GB,它就会超过内存限制?

标签: hadoop hadoop-yarn hadoop2 resourcemanager


【解决方案1】:

基本上,您需要更多 RAM,因为 Java 运行 mapper 或 reducer 任务会产生开销。该进程的 java 堆 + JVM。

这张来自Configuring Heapsize for Mappers and Reducers in Hadoop 2 的图片可能最好地解释了这一点。

虽然您的数据可能都适合 0.5 GB(例如),但 Hadoop (Java) 中用于表示该数据的数据结构使用了更多数据,并且随着数据的处理,这些临时数据结构用于计算结果将使用更多仍然。而且由于Java使用垃圾 在垃圾回收发生之前,收集所有这些表示可能正在使用堆。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 2017-05-22
    • 2014-11-25
    • 1970-01-01
    • 2014-08-29
    相关资源
    最近更新 更多