如何解决指定mapreduce.map.java.opts而不覆盖内存设置?
我正在使用运行mapr 5.2的hadoop集群,该集群在Unicode字符编码方面存在问题。我发现在mapred-site.xml
中添加以下几行可以解决此问题:
<property>
<name>mapreduce.map.java.opts</name>
<value>-Dfile.encoding=utf-8</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Dfile.encoding=utf-8</value>
</property>
不幸的是,这会导致许多作业(在没有这些属性的情况下都能正常工作)引发如下错误:
Container [pid=63155,containerID=container_e40_1544666751235_12271_01_000004] is running beyond physical memory limits. Current usage: 8.0 GB of 8 GB physical memory used; 31.7 GB of 16.8 GB virtual memory used. Killing container.
我已尝试根据此错误消息将mapreduce.map.memory.mb
的值增加到允许的最大值:
Job job_1544666751235_12267 failed with state KILLED due to: MAP capability required is more than the supported max container capability in the cluster. Killing the Job. mapResourceRequest: <memory:16000,vCores:1,disks:0.5> maxContainerCapability:<memory:8192,vCores:20,disks:4.0>
但是容器仍然被杀死。就像我说的那样,这些作业在设置mapreduce.*.java.opts
属性之前运行良好,所以我认为它们覆盖了某些内容。有没有一种方法可以设置-Dfile.encoding
而不会覆盖其他Java参数?
解决方法
mapreduce.*.java.opts
之前是否存在一个值?通常,Java存储器设置(例如-Xmx
等都放在其中)。因此,仅保留-Dfile.encoding=utf-8
可能会删除这些设置,并可能影响其他作业。您在这里有两个选择
- 将编码设置附加到先前存在的值。但此处的编码设置将适用于使用该
mapred-site.xml
的所有作业
<property>
<name>mapreduce.map.java.opts</name>
<value>your_earlier_existed_java_opts_value_goes_here -Dfile.encoding=utf-8</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>your_earlier_existed_java_opts_value_goes_here -Dfile.encoding=utf-8</value>
</property>
- 仅在运行时为您的作业设置此值,前提是您在代码上使用
org.apache.hadoop.util.GenericOptionsParser
。因此,编码设置仅适用于您的工作。
yarn jar <your_jar> <class> -Dmapreduce.map.java.opts="your_earlier_existed_java_opts_value_goes_here -Dfile.encoding=utf-8"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。