我遇到了EMR作业的问题,其中有太多输入文件会导致内存错误。做一些研究我认为改变HADOOP_HEAPSIZE配置参数是解决方案。 2010年的旧亚马逊论坛表示无法做到。 我们现在可以在2018年那样做吗?
我使用C#API为EMR运行我的作业,通常我使用如下语句设置配置。我可以使用类似的命令设置HADOOP_HEAPSIZE。
config.Args.Insert(2, "-D");
config.Args.Insert(3, "mapreduce.output.fileoutputformat.compress=true");
config.Args.Insert(4, "-D");
config.Args.Insert(5, "mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec");
config.Args.Insert(6, "-D");
config.Args.Insert(7, "mapreduce.map.output.compress=true");
config.Args.Insert(8, "-D");
config.Args.Insert(9, "mapreduce.task.timeout=18000000");
如果我需要使用文件进行引导,我也可以这样做。如果有人可以向我显示配置更改的文件内容。
由于
答案 0 :(得分:1)
我明白了...... 我创建了一个shell脚本来增加主机上的内存大小(最后的代码)...... 我像这样运行一个引导动作
ScriptBootstrapActionConfig bootstrapActionScriptForHeapSizeIncrease = new ScriptBootstrapActionConfig
{
Path = "s3://elasticmapreduce/bootstrap-actions/run-if",
Args = new List<string> { "instance.isMaster=true", "<s3 path to my shell script>" },
};
shell脚本代码是这个
#!/bin/bash
SIZE=8192
if ! [ -z $1 ] ; then
SIZE=$1
fi
echo "HADOOP_HEAPSIZE=${SIZE}" >> /home/hadoop/conf/hadoop-user-env.sh
现在我可以使用master machine tye作为r3.xlarge运行EMR作业并处理3100万个输入文件