2013-11-03 36 views

回答

1

不是真的(你可以进入数据库表并进行更改,但如果使用嵌入式Derby DB,则可能需要关闭OOZIE,除此之外可能不可取)。

如果您需要经常更改配置,请考虑将值降低到已启动的workflow.xml文件中 - 您可以在协调器实例之间更改此文件的内容。

您也可以(如果这是一次性更改)杀死正在运行的协调程序,进行更改并再次启动协调程序,修改开始时间,以使先前的实例不会被安排再次运行。

+0

所以这意味着没有完美的解决方案,对吧? – user1284984

+0

非常感谢。 – user1284984

1

不是:-)

以下是您可以做的事情。

  1. 创建另一个配置文件,其中包含您希望能够在hdfs中更改的属性。
  2. 在工作流程开始时阅读此文件。

例子:

<action name="devices-location"> 
    <shell xmlns="uri:oozie:shell-action:0.1"> 
     <job-tracker>${jobTracker}</job-tracker> 
     <name-node>${nameNode}</name-node> 

     <exec>hadoop</exec> 
     <argument>fs</argument> 
     <argument>-cat</argument> 
     <argument>/path/to/config/file.properties</argument> 

     <capture-output/> 
    </shell> 

    <ok to="report"/> 
    <error to="kill"/> 
</action> 

<action name="report"> 
    <java> 
     ... 

     <main-class>com.twitter.scalding.Tool</main-class> 

     <arg>--device-graph</arg> 
     <arg>${wf:actionData('devices-location')['path']}</arg> 

     <file>${scalding_jar}</file> 
    </java> 

    <ok to="end"/> 
    <error to="kill"/> 
</action> 

凡在/path/to/config/file.properties在HDFS的配置文件看起来像这样:

path=/some/path/to/data 
+0

我发现答案非常有用。但在你的方法中,我有一个查询,如果在运行时需要可变的属性是jobTracker本身。 would'nt shell动作仍然指向旧的jobTracker并失败。 – faizan

2

协调器开始运行后,可以使用下面的命令更新oozie协调器的属性。更新unix文件系统中的属性文件,然后如下提交。

Oozie的工作-oozie http://namenodeinfo/oozie -config job.properties -update coordinator_job_id

注意,所有创建的协调版本(包括在待机状态的那些)仍将使用旧的配置。新的配置将在新版本的协调器实现时应用。

+0

有什么办法可以使WAITING工作流程使用新的配置? –

+1

截至目前无法让WAITING协调员使用新的配置。一旦处于WAITING状态的协调员完成了他们的运行,他们可以通过使用-refresh选项重新运行更新的配置,如下所示。 重新运行一个协调器行动或多个操作 实施例: $ Oozie的作业-rerun [-refresh] –