2013-01-09 47 views
2

我正在使用oozie運行工作流。它有一個運行任意(非map縮減)代碼的java動作。此java代碼旨在在本地文件系統上創建文件和文件夾。我想確保java操作在hadoop集羣的單個節點上運行(我的節點是7個節點)。對我來說,這個java動作總是運行在同一臺機器上,最好只在hadoop主節點上運行。可能嗎?即使有工作,請分享。確認使用java操作的oozie運行的Java代碼是否僅在單個節點上運行

回答

2

Java Action與map reduce作業一樣運行,因此您無法控制羣集中的哪個節點。

我不確定oozie是否會尊重這一點。但是您可以嘗試將可接受的映射器失敗次數設置爲較高值(例如10),然後在執行羣集節點不是您想要的時候在Java動作中引發異常(使用InetAddress獲取本地計算機名稱/ IP)。

然後希望(但不一定保證),您的操作將繼續在不需要的節點上失敗,並最終在您選擇的節點上成功。

有點一個黑客攻擊,但它可能工作(同樣這取決於你是否能在整個作業之前修改的地圖任務失敗次數失敗 - mapred.map.max.attempts,這是4默認)

0

任何Oozie的作業(簡單的Java動作或豬動作或蜂巢動作或..)輪流作爲地圖縮減作業運行。它是Oozie框架的核心屬性。

Oozie工作流程是按照控制相關性DAG(直接非循環圖)排列的動作。

編號:Oozie design Architecture

所以,我希望我們是不是可以將文件保存在集羣中的目標節點(或多個)。