2016-02-01 3 views
0

Я запускаю задания MapReduce, используя oozie. Из рабочего процесса я просто вызываю класс класса MapReduce и ничего, кроме этого. Но для этого рабочего процесса oozie требуется много памяти. Для вызова класса драйвера требуется минимум 2 ГБ контейнера. Ниже workflow.xmlПочему Oozie выделяет больше памяти при выполнении заданий MapReduce?

<?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" /> 

Мой сценарий оболочки будет выглядеть, как показано ниже (MyDriver.sh),

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

Почему oozie занимает так много памяти. Как уменьшить потребление памяти oozie?

ответ

1

Действие оболочки запускается как минимум 2 картографа для запуска вашего класса java.

Вы можете избежать этого, используя java-действие. Поместите банку в $ {рабочий-путь}/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> 
+0

Кроме того, если вы настаиваете на использование Oozie для запуска консоли для запуска MapReduce работы * (почему нет, возможно, это хорошо для кармы) *, тогда вы можете попытаться уменьшить использование ОЗУ исходной оболочки, установив в действие '' свойства 'oozie.launcher.mapreduce.map.memory.mb' и' oozie.launcher. yarn.app.mapreduce.am.resource.mb', скажем, 512 МБ. –

+0

Руслан, я не могу этого сделать. Потому что у меня много связанных заданий. Я построил одну толстую банку и разделил ее по общей дороге. Классы будут загружаться из банки, связанной с определенным заданием. – Vijayakumar

+0

Я дал попробовать, и это работает как шарм. Спасибо :) – Vijayakumar

Смежные вопросы