增加 hdfs java 堆内存的正确方法
correct way to increase hdfs java heap memory
我的 hadoop 名称节点日志中出现以下错误:
2015-12-20 06:15:40,717 WARN [IPC Server handler 21 on 9000] ipc.Server
(Server.java:run(2029)) - IPC Server handler 21 on 9000, call
org.apache.hadoop.hdfs.server.protocol.DatanodeProtocol.blockReport
from 172.31.21.110:46999 Call#163559 Retry#0:
error: java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
2015-12-20 06:15:42,710 WARN [IPC Server handler 22 on 9000] ipc.Server
(Server.java:run(2029)) - IPC Server handler 22 on 9000, call
org.apache.hadoop.hdfs.server.protocol.DatanodeProtocol.blockReport from
172.31.24.250:45624 Call#164898 Retry#0:
error: java.lang.OutOfMemoryError: Java heap space
这导致所有节点都被列为死节点。
我检查了其他 Whosebug 问题,最有用的建议似乎是我需要将 conf/mapred-site.xml
中的 mapred.child.java.opts
选项设置为高于 2048MB,
但我担心这可能还不够。
我正在使用带有 --hadoop-major-version=yarn
选项的 spark 启动我的集群,所以如果我理解正确的话,所有 MapReduce 作业都是 运行 通过 Yarn,包括 HDFS 创建的作业。
我的问题是:我还需要修改哪些其他设置(以及我如何确定它们的数量,假设我想为 mapreduce.child.java.opts 设置使用 4GB)来增加HDFS 的 MapReduce 作业可用的内存?
Hadoop 守护进程通过使用名称后缀为 _OPTS
的环境变量来控制其 JVM 参数,包括堆大小设置。这些环境变量定义在配置目录下的各种*-env.sh文件中。
以NameNode为例,你可以在你的hadoop-env.sh文件中这样设置一行
export HADOOP_NAMENODE_OPTS="-Xms4G -Xmx4G $HADOOP_NAMENODE_OPTS"
这为 NameNode 设置了 4 GB 的 minimum/maximum 堆大小,并且还保留了在脚本前面 HADOOP_NAMENODE_OPTS
中放置的任何其他参数。
我的 hadoop 名称节点日志中出现以下错误:
2015-12-20 06:15:40,717 WARN [IPC Server handler 21 on 9000] ipc.Server
(Server.java:run(2029)) - IPC Server handler 21 on 9000, call
org.apache.hadoop.hdfs.server.protocol.DatanodeProtocol.blockReport
from 172.31.21.110:46999 Call#163559 Retry#0:
error: java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError: Java heap space
2015-12-20 06:15:42,710 WARN [IPC Server handler 22 on 9000] ipc.Server
(Server.java:run(2029)) - IPC Server handler 22 on 9000, call
org.apache.hadoop.hdfs.server.protocol.DatanodeProtocol.blockReport from
172.31.24.250:45624 Call#164898 Retry#0:
error: java.lang.OutOfMemoryError: Java heap space
这导致所有节点都被列为死节点。
我检查了其他 Whosebug 问题,最有用的建议似乎是我需要将 conf/mapred-site.xml
中的 mapred.child.java.opts
选项设置为高于 2048MB,
但我担心这可能还不够。
我正在使用带有 --hadoop-major-version=yarn
选项的 spark 启动我的集群,所以如果我理解正确的话,所有 MapReduce 作业都是 运行 通过 Yarn,包括 HDFS 创建的作业。
我的问题是:我还需要修改哪些其他设置(以及我如何确定它们的数量,假设我想为 mapreduce.child.java.opts 设置使用 4GB)来增加HDFS 的 MapReduce 作业可用的内存?
Hadoop 守护进程通过使用名称后缀为 _OPTS
的环境变量来控制其 JVM 参数,包括堆大小设置。这些环境变量定义在配置目录下的各种*-env.sh文件中。
以NameNode为例,你可以在你的hadoop-env.sh文件中这样设置一行
export HADOOP_NAMENODE_OPTS="-Xms4G -Xmx4G $HADOOP_NAMENODE_OPTS"
这为 NameNode 设置了 4 GB 的 minimum/maximum 堆大小,并且还保留了在脚本前面 HADOOP_NAMENODE_OPTS
中放置的任何其他参数。