3

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

--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 

什么是正确的语法?

4

2 回答 2

7

您有两种选择来实现这一目标:

自定义 JVM 设置

为了应用自定义设置,您可能需要查看Amazon Elastic MapReduce (Amazon EMR)的引导操作文档,特别是操作配置守护进程

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

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

$ ./elastic-mapreduce –create –alive \
  --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configure-daemons \
  --args --namenode-heap-size=2048,--namenode-opts=-XX:GCTimeRatio=19   

预定义的 JVM 设置

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

$ ./elastic-mapreduce --create \
--bootstrap-action \
  s3://elasticmapreduce/bootstrap-actions/configurations/latest/memory-intensive

此预定义引导操作应用的特定配置设置在Hadoop 内存密集型配置设置中列出。

祝你好运!

于 2012-04-05T08:01:49.523 回答
0

Steffen's answer is good and works. On the other hand if you just want something quick-and-dirty and just want to replace one or two variables, then you're probably looking to just change it via the command line like the following:

elastic-mapreduce --create \
--bootstrap-action s3://elasticmapreduce/bootstrap-actions/configure-hadoop \
  --args "-m,mapred.child.java.opts=-Xmx999m"

I've seen another documentation, albeit an older one, that simply quotes the entire expression within one quote like the following:

--bootstrap-action "s3://elasticmapreduce/bootstrap-actions/configure-hadoop -m \
    mapred.child.java.opts=-Xmx999m"    ### I tried this style, it no longer works!

At any rate, this is not easily found in the AWS EMR documentation. I suspect that mapred.child.java.opts is one of the most overridden variables-- I was also looking for an answer when I got a GC error: "java.lang.OutOfMemoryError: GC overhead limit exceeded" and stumbled on this page. The default of 200m is just too small (documentation on defaults).

Good luck!

于 2014-09-13T01:45:00.610 回答