Oozie shell 动作内存限制

Posted

技术标签:

【中文标题】Oozie shell 动作内存限制【英文标题】:Oozie shell action memory limit 【发布时间】:2014-06-17 11:43:34 【问题描述】:

我们有一个带有 shell 操作的 oozie 工作流,它需要比 Yarn 默认提供的映射任务更多的内存。

我们怎样才能给它更多的内存?

我们已尝试将以下配置添加到操作中:

<configuration>
  <property>
    <name>mapreduce.map.memory.mb</name>
    <value>6144</value> <!-- for example -->
  </property>
</configuration>

我们已将其设置为内联(在 workflow.xml 中)配置和 jobXml。 两者都没有任何效果。

【问题讨论】:

【参考方案1】:

我们找到了答案:

shell 操作作为 oozie “启动器”映射任务执行,此任务不使用正常的配置属性。

相反,您必须在属性前加上“oozie.launcher”,以使它们应用于启动器任务。

所以在我们的例子中,如果我们对 shell 操作使用以下配置,它就可以工作。

    <configuration>
      <property>
        <name>oozie.launcher.mapreduce.map.memory.mb</name>
        <value>6144</value> <!-- for example -->
      </property>
    </configuration>

这在 oozie 文档中并不明显。 我们在这里找到了这个: http://downright-amazed.blogspot.com/2012/02/configure-oozies-launcher-job.html

【讨论】:

【参考方案2】:

谢谢你的意见, 只需编辑 workflow.xml 文件,添加:

<workflow-app name="simple-ONE-wf" xmlns="uri:oozie:workflow:0.1">
    <start to='ONE'/>`enter code here
    <action name="ONE">
        <spark xmlns="uri:oozie:spark-action:0.1">
            <job-tracker>$jobTracker</job-tracker>
            <name-node>$nameNode</name-node>
            <configuration>
                <property>
                    <name>oozie.launcher.mapreduce.map.memory.mb</name>
                    <value>4096</value>
                </property>
                <property>
                    <name>oozie.launcher.mapreduce.map.java.opts</name>
                    <value>-Xmx3200m</value>
                </property>
                <property>
                    <name>oozie.launcher.mapreduce.map.java.opts</name>
                    <value>-XX:MaxPermSize=1g</value>
                </property>
                ...
            </configuration>
           ...
    </action>

    <kill name='kill'>
        <message>Something went wrong: $wf:errorCode('firstdemo')</message>
    </kill>
    <end name='end'/>
</workflow-app>

【讨论】:

与 3 年前发布的(更清晰的,IMO)现有答案相比,此答案的附加值是多少? 更多细节,很清楚,可以用,我遇到perm OOM,只添加内存没有用,必须添加opts并设置-XX:MaxPermSize=1g 哇,如果您的目标是 Java 7 或更早版本。 Java 8 甚至在这个问题被问到之前就已经发布了。请在您的回答中明确说明,说明它有何不同以及可以在何处/何时使用。 感谢您提供此代码 sn-p,它可能会提供一些即时帮助。一个正确的解释would greatly improve 其教育价值通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有类似但不相同的问题的读者更有用。请edit您的答案添加解释,并说明适用的限制和假设。 配置需要在操作部分。不在工作流部分。对吗?

以上是关于Oozie shell 动作内存限制的主要内容,如果未能解决你的问题,请参考以下文章

neo4j cypher shell - 内存限制异常

Spark在Hadoop集群上运行时虚拟内存超出限制

adb shell dumpsys 命令 查看内存

Ubuntu下限制进程使用内存资源的方法(cgroup)

ulimit命令用来限制系统用户对shell资源的访问(设置Linux文件打开数)

如何限制单个 Linux 进程的内存使用而不杀死该进程