我试图引导行动,以提高我的工作,但他们都不工作的堆大小的以下组合:
--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设置
为了应用自定义设置,你可能想看看在引导操作文档亚马逊弹性MapReduce(EMR亚马逊) ,具体操作配置守护程序 :
这个预定义的引导作用,可以指定堆大小或其他Java虚拟机(JVM)选项Hadoop守护进程。 您可以使用此引导操作来配置Hadoop的为需要更多的内存比Hadoop的分配默认大的作业。 您也可以使用此引导行动来修改高级JVM选项,如垃圾收集行为。
一个例子被提供,以及,它设置堆大小为2048,并配置在Java名称节点选项 :
$ ./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内存密集型配置设置 。
祝好运!
斯蒂芬的回答是好和作品。 在另一方面,如果你只是想要快速和肮脏的,只是想更换一个或两个变量,那么你很可能通过寻找类似下面的命令行只是改变它:
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!
无论如何,这是不容易的发现在AWS EMR文档 。 我怀疑mapred.child.java.opts是最重写variables--我也一直在寻找答案时,我得到一个错误的GC之一:“java.lang.OutOfMemoryError:GC开销超限”跌跌撞撞此页面上。 200米默认就是太小( 在默认的文档 )。
祝好运!