Hadoop Amazon Elastic MapReduce引导操作不起作用

Hadoop Amazon Elastic MapReduce引导操作不起作用,hadoop,amazon-web-services,mapreduce,elastic-map-reduce,amazon-emr,Hadoop,Amazon Web Services,Mapreduce,Elastic Map Reduce,Amazon Emr,我尝试了以下引导操作组合以增加作业的堆大小,但它们似乎都不起作用: --mapred-key-value mapred.child.java.opts=-Xmx1024m --mapred-key-value mapred.child.ulimit=unlimited --mapred-key-value mapred.map.child.java.opts=-Xmx1024m --mapred-key-value mapred.map.child.ulimit=unlimited -m

我尝试了以下引导操作组合以增加作业的堆大小,但它们似乎都不起作用:

--mapred-key-value mapred.child.java.opts=-Xmx1024m 
--mapred-key-value mapred.child.ulimit=unlimited

--mapred-key-value mapred.map.child.java.opts=-Xmx1024m 
--mapred-key-value mapred.map.child.ulimit=unlimited

-m mapred.map.child.java.opts=-Xmx1024m
-m mapred.map.child.ulimit=unlimited 

-m mapred.child.java.opts=-Xmx1024m 
-m mapred.child.ulimit=unlimited 

正确的语法是什么?

您有两个选项来实现这一点:

自定义JVM设置 为了应用自定义设置,您可能需要查看文档,特别是操作:

此预定义引导操作允许您指定堆大小或 Hadoop守护进程的其他Java虚拟机(JVM)选项。你 可以使用此引导操作为需要的大型作业配置Hadoop 需要比Hadoop默认分配的内存更多的内存。你也可以使用 此引导操作用于修改高级JVM选项,例如垃圾 收集行为

还提供了一个示例,该示例将堆大小设置为2048,并配置Java namenode选项:

预定义的JVM设置 或者,根据常见问题解答,如果作业流任务是内存密集型的,则可以选择每个核心使用较少的任务,并减少作业跟踪器堆大小。对于这种情况,可以使用预定义的引导操作在启动时配置作业流-这是指操作,它允许您将集群范围的Hadoop设置设置为适合内存密集型工作负载的作业流的值,例如:

$ ./elastic-mapreduce --create \
--bootstrap-action \
  s3://elasticmapreduce/bootstrap-actions/configurations/latest/memory-intensive
中列出了此预定义引导操作应用的特定配置设置


祝你好运

Steffen的回答很好,很有效。另一方面,如果您只想快速而肮脏的东西,只想替换一个或两个变量,那么您可能希望通过命令行对其进行更改,如下所示:

elastic-mapreduce --create \
--bootstrap-action s3://elasticmapreduce/bootstrap-actions/configure-hadoop \
  --args "-m,mapred.child.java.opts=-Xmx999m"
--bootstrap-action "s3://elasticmapreduce/bootstrap-actions/configure-hadoop -m \
    mapred.child.java.opts=-Xmx999m"    ### I tried this style, it no longer works!
我看到了另一个文档,尽管是较旧的文档,它只是在一个引号中引用了整个表达式,如下所示:

elastic-mapreduce --create \
--bootstrap-action s3://elasticmapreduce/bootstrap-actions/configure-hadoop \
  --args "-m,mapred.child.java.opts=-Xmx999m"
--bootstrap-action "s3://elasticmapreduce/bootstrap-actions/configure-hadoop -m \
    mapred.child.java.opts=-Xmx999m"    ### I tried this style, it no longer works!
无论如何,这是不容易发现的。我怀疑mapred.child.java.opts是最容易被重写的变量之一——当我遇到一个GC错误时,我也在寻找答案:“java.lang.OutOfMemoryError:超出了GC开销限制”,并无意中发现了这个页面。默认值200m太小了()


祝你好运

谢谢JMAx..请帮助谢谢Steffen,基于文档,我在“配置hadoop”引导脚本上尝试了上述参数,但不起作用。如果您能给我在Hadoop的mapred-site.xml配置文件中设置“mapred.child.java.opts”堆大小的确切命令,那就太好了感谢Steffen,我能够设置除“mapred.child.java.opts”之外的“Hadoop内存密集型配置设置”中列出的其他设置,这就是我要求提供确切参数/命令的原因。@ShrishBajpai:在深入研究之前,您可能想先尝试另一种可能更简单的方法(见我的更新答案)(这也可能提供一些关于您问题的见解);如果你真的需要自定义设置,我可能会在以后进一步研究,但现在会离开办公室几个小时,抱歉。@ShrishBajpai:请重新阅读您的第一条评论-列出的
--namenode heap size=2048
选项专门用于配置守护进程引导操作,不会用于配置hadoop引导操作(正如您已经发现的;),谢谢Steffen,但仅增加名称ode heap size不会有帮助。为了确认这一点,我使用以下配置hadoop引导操作在m.xlarge实例上重新运行作业:--jobtracker heap size=3072--namenode heap size=1024--tasktracker heap size=512--datanode heap size=no tracker,它再次失败,出现堆错误。为了克服这个问题,我需要能够增加mapred.child.java.opts堆的大小,我已经在本地使用本机hadoop设置进行了尝试