java—为什么oozie在运行mapreduce作业时会分配更多内存?

68bkxrlz  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(416)

我在用oozie运行mapreduce作业。从工作流中,我只是调用mapreduce驱动程序类,除此之外什么都没有。但是对于这个oozie工作流需要很多内存。它需要最小2gb的容器大小来调用驱动程序类。下面是workflow.xml

<?xml version="1.0" encoding="utf-8"?>
<workflow-app xmlns="uri:oozie:workflow:0.4" name="My Job">
<start to="start-job" />
<action name='start-job'>
    <shell xmlns="uri:oozie:shell-action:0.2">
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
        <configuration>
            <property>
                <name>mapred.job.queue.name</name>
                <value>${jobQueue}</value>
            </property>
        </configuration>
        <exec>${jobScript}</exec>
        <argument>${arguments}</argument>
        <argument>${queueName}</argument>
        <argument>${wf:id()}</argument>
        <file>myPath/MyDriver.sh#MyDriver.sh</file>
    </shell>
    <ok to="end" />
    <error to="kill" />
</action>
<kill name="kill">
    <message>Job failed
        failed:[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end" />

我的shell脚本如下所示(mydriver.sh),

hadoop jar myJar.jar MyDriverClass $1 $2 $3

为什么oozie需要这么多的记忆。如何减少oozie的内存消耗?

ki0zmccv

ki0zmccv1#

shell操作将启动至少2个Map程序来运行java类。
您可以使用java操作来避免这种情况。将jar放在${workflow path}/lib/目录中并更改工作流:

<action name='start-job'>
    <java>
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
        <configuration>
            <property>
                <name>mapred.job.queue.name</name>
                <value>${jobQueue}</value>
            </property>
        </configuration>
        <main-class>MyDriverClass</main-class>

        <arg>${arguments}</arg>
        <arg>${queueName}</arg>
        <arg>${wf:id()}</arg>
    </java>
    <ok to="end" />
    <error to="kill" />
</action>

相关问题