MapReduce模型是SchedulerX自主研發的輕量級分布式跑批模型。通過MapJobProcessor或MapReduceJobProcessor介面將接入的Worker組成分散式運算引擎進行巨量資料跑批。相對於傳統的巨量資料跑批(例如Hadoop、Spark等),MapReduce無需將資料匯入巨量資料平台,且無額外儲存及計算成本,即可實現秒層級海量資料處理,具有成本低、速度快、編程簡單等特性。
注意事項
單個子任務的大小不能超過64 KB。
ProcessResult的result傳回值不能超過1000 Byte。
如果使用reduce,所有子任務結果會緩衝在Master節點,該情況對Master節點記憶體壓力較大,建議子任務個數和result傳回值不要太大。如果沒有reduce需求,使用MapJobProcessor介面即可。
SchedulerX不保證子任務絕對執行一次。在特殊條件下會failover,可能導致子任務重複執行,需要業務方自行實現等冪。
介面
繼承類MapJobProcessor
介面
解釋
是否必選
public ProcessResult process(JobContext context) throws Exception;每個子任務執行業務的入口,需從context中擷取taskName,您需自行判斷子任務名稱。邏輯處理完成後,返回ProcessResult。
是
public ProcessResult map(List<? extends Object> taskList, String taskName);執行map方法可以將一批子任務分布至多台機器上執行,可以多次執行map方法。如果taskList為空白,返回失敗。執行完成後,返回ProcessResult。
是
public void kill(JobContext context);前端kill任務會觸發該方法,需自行實現如何中斷業務。
否
繼承類MapReduceJobProcessor
介面
解釋
是否必選
public ProcessResult process(JobContext context) throws Exception;每個子任務執行業務的入口,需從context裡擷取taskName,您需自行判斷子任務名稱。邏輯處理完成後,返回ProcessResult。
是
public ProcessResult map(List<? extends Object> taskList, String taskName);執行map方法可以將一批子任務分布至多台機器上執行,可以多次執行map方法。如果taskList是空,返回失敗。執行完成後,返回ProcessResult。
是
public ProcessResult reduce(JobContext context);所有Worker節點的子任務執行完成後,會回調reduce方法。reduce由Master節點執行,一般用於資料彙總或通知下遊,也可以用於工作流程的上下遊資料傳遞。
reduce方法能處理所有子任務的結果。
子任務通過
return ProcessResult(true, result)返回結果(例如返回訂單號)。執行reduce方法時,通過context擷取所有子任務的狀態(
context.getTaskStatuses())和結果(context.getTaskResults()),並進行相應的邏輯處理。
是
public void kill(JobContext context);前端kill任務會觸發該方法,需自行實現如何中斷業務。
否
public boolean runReduceIfFail(JobContext context)當存在子任務失敗情況下,是否執行reduce方法。預設配置為:子任務失敗時,仍然執行reduce方法。
否
操作步驟
登入分布式任務調度平台,在左側導覽列,單擊任務管理。
在任務管理頁面,單擊建立任務。
在建立任務面板,任務類型選擇Java。
執行模式選擇MapReduce,在進階配置地區配置相關資訊。
配置項
說明
分發策略
說明需用戶端版本>=1.10.3。
輪詢策略(預設):每個Worker平均分配等量子任務,適用於每個子任務處理耗時基本一致的情境。
負載最優策略:由主節點自動感知Worker節點的負載情況,適用於子任務和Worker機器處理耗時有較大差異的情境。
子任務單機並發數
即單機執行線程數,預設為5。如需加快執行速度,可以調大該值。如果下遊或者資料庫無法承接,可適當調小。
子任務失敗重試次數
子任務失敗會自動重試,預設為0。
子任務失敗稍候再試
子任務失敗稍候再試,單位:秒,預設為0。
子任務failover策略
說明需用戶端版本>=1.8.12。
當執行節點宕機下線後,是否將子任務重新分發給其他機器執行。開啟該配置後,發生failover時,子任務可能會重複執行,需自行做好等冪。
主節點參與執行
說明需用戶端版本>=1.8.12。
主節點是否參與子任務執行。線上可運行Worker數量必須不低於2台,在子任務數量特別大時,推薦關閉該參數。
子任務分發方式
推模型:每台機器平均分配子任務。
拉模型:每台機器主動拉取子任務,沒有木桶效應,支援動態擴容拉取子任務。拉取過程中,所有子任務會緩衝在Master節點,對記憶體有壓力,建議子任務數不超過10,000。
其他配置項,請參見任務管理進階配置參數說明。