全部產品
Search
文件中心

SchedulerX:多語言版本分區模型

更新時間:Jul 06, 2024

SchedulerX可以對多重任務進行調度(定時、編排、重刷歷史資料等),提供Java、Python、Shell和Go等多語言分區模型,協助您處理巨量資料業務需求。

背景資訊

分區模型主要包含靜態分區和動態分區。

  • 靜態分區:主要情境是處理固定的分區數,例如分庫分表中固定1024張表,需要若干台機器分布式去處理。

  • 動態分區:主要情境是分散式處理未知資料量的資料,例如一張大表在不停變更,需要分布式跑批。主流的架構為SchedulerX提供的MapReduce模型,目前還沒有對外開源。

功能特性

多語言版本分區模型還具有以下特性。

  • 相容elastic-job的靜態分區模型。

  • 支援Java、Python、Shell、Go四種語言。

  • 高可用:分區模型基於MapReduce模型開發,可以繼承MapReduce模型高可用特性,即某台worker執行過程中發生異常,master worker會把分區failover到其它slave節點執行。

  • 流量控制:分區模型基於MapReduce模型開發,可以繼承MapReduce模型流量控制特性,即可以控制單機子任務並發度。例如有1000個分區,一共10台機器,可以控制最多5個分區並發跑,其它在隊列中等待。

  • 分區自動失敗重試:分區模型基於MapReduce模型開發,可以繼承MapReduce模型子任務失敗自動重試的特性。

可用性和流量控制可以在建立任務時的進階配置中設定,詳情請參見建立調度任務任務管理進階配置參數說明

說明

只有1.1.0及以上版本用戶端才支援多語言版本的分區模型。

Java分區任務

  1. 登入分布式任務調度平台
  2. 在頂部功能表列選擇地區。
  3. 在左側導覽列,選擇任務管理

  4. 任務管理頁面,選擇目標命名空間,在頁面左上方單擊建立任務

  5. 建立任務面板的基本配置頁簽,執行模式設定為分區運行,並配置分區參數,然後單擊下一步

    分區參數之間以半形逗號(,)或換行分隔,例如分區號1=分區參數1,分區號2=分區參數2,...

    image

  6. 在應用程式代碼中繼承JavaProcessor,通過JobContext.getShardingId()擷取分區號,通過JobContext.getShardingParameter()擷取分區參數。

    樣本:

    @Component
    public class HelloWorldProcessor extends JavaProcessor {
        @Override
        public ProcessResult process(JobContext context) throws Exception {
            System.out.println("分區id=" + context.getShardingId() + ", 分區參數=" + context.getShardingParameter());
            return new ProcessResult(true);
        }
    }
  7. 執行列表頁面,單擊目標任務操作列的詳情,查看分區詳情。

    分區任務執行個體詳情

Python分區任務

Python應用想使用分布式跑批,只需要安裝Agent。指令碼可以由SchedulerX維護。

  1. 下載SchedulerX的Agent,並通過Agent部署指令碼任務。

  2. 在SchedulerX中建立Python分區任務,更多資訊,請參見建立調度任務

    sys.argv[1]為分區號,sys.argv[2]為分區參數。

    分區參數之間以半形逗號(,)或換行分隔,例如分區號1=分區參數1,分區號2=分區參數2,...

    Python 分區任務

  3. 執行列表頁面,單擊目標任務操作列的詳情,查看分區詳情。

    分區任務執行個體詳情

Shell和Go分區任務

Shell和Go版本的分區任務和Python類似,建立步驟,請參見Python分區任務