指定 mapreduce.map.java.opts 而不覆盖内存设置?
Specifying mapreduce.map.java.opts without overriding memory settings?
我正在使用 hadoop 集群 运行 mapr 5.2,它在 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
属性之前运行良好,所以我假设它们覆盖了某些东西。有没有办法在不覆盖其他 Java 参数的情况下设置 -Dfile.encoding
?
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"
我正在使用 hadoop 集群 运行 mapr 5.2,它在 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
属性之前运行良好,所以我假设它们覆盖了某些东西。有没有办法在不覆盖其他 Java 参数的情况下设置 -Dfile.encoding
?
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"