gpt4 book ai didi

java - 为什么 Oozie 在运行 MapReduce 作业时分配更多内存?

转载 作者:可可西里 更新时间:2023-11-01 16:48:01 25 4
gpt4 key购买 nike

我正在使用 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的内存消耗?

最佳答案

Shell 操作将启动至少 2 个映射器来运行您的 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>

关于java - 为什么 Oozie 在运行 MapReduce 作业时分配更多内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35135040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com