全部產品
Search
文件中心

Batch Compute:控制台快速開始

更新時間:Jul 06, 2024

介紹如何使用控制台來提交一個作業,目的是統計一個記錄檔中 INFOWARNERRORDEBUG 出現的次數。

步驟預覽

  1. 作業準備

    • 上傳資料檔案到 OSS

    • 上傳任務程式到 OSS

  2. 使用控制台提交作業

  3. 查看作業狀態

  4. 查看結果

1. 作業準備

本作業是統計一個記錄檔中 INFOWARNERRORDEBUG 出現的次數。

該作業包含3個任務:split、 count 和 merge:

  • split 任務會把記錄檔分成 3 份。

  • count 任務會統計每份記錄檔中 INFOWARNERRORDEBUG 出現的次數(count 任務需要配置 InstanceCount 為3,表示同時啟動 3 個 count 任務)。

  • merge 任務會把 count 的結果統一合并起來。

DAG圖例

DAG圖例

上傳資料檔案到OSS

下載本例子所需的資料:log-count-data.txt

將 log-count-data.txt 上傳到:

說明

oss://your-bucket/log-count/log-count-data.txt

  • your-bucket 表示您自己建立的 bucket,本例假設 region 為:cn-shenzhen。

  • 更多關於如何上傳到 OSS,請參考 OSS 檔案上傳 以及 常用 OSS 工具

上傳任務程式到OSS

本例的作業程式是使用 python 編寫的, 下載本例所需的程式:log-count.tar.gz

本例不需要改動範例程式碼。直接將 log-count.tar.gz 上傳到 oss,如上傳到:

說明

oss://your-bucket/log-count/log-count.tar.gz。

如何上傳前面已經講過。

  • BatchCompute 只支援以 tar.gz 為尾碼的壓縮包, 請注意務必用以上方式(gzip)打包, 否則將會無法解析。

  • 如果你要修改代碼,可以解壓後修改,然後要用下面的方法打包:

命令如下:

> cd log-count  #進入目錄
> tar -czf log-count.tar.gz * #打包,將所有這個目錄下的檔案打包到 log-count.tar.gz

可以運行這條命令查看壓縮包內容:

$ tar -tvf log-count.tar.gz

可以看到以下列表:

conf.py
count.py
merge.py
split.py

2. 使用控制台提交作業

  1. 登入 BatchCompute 控制台

  2. 單擊 作業列表 > 提交作業 進行作業提交。請選擇合適的 Region(該 region 需要和前面上傳資料的OSS的 bucket 的 region 一致)。

    提交作業

    如上圖所示,首先填寫作業名稱、作業優先順序等基本資料,接下來填寫作業的詳細描述,有兩種方法:

    • DAG編輯器:DAG編輯器可以用圖形化的方式來描述作業 (Job) 包含的任務 (Task) 以及依賴關係。拖動編輯器左上方的“+”來添加 Task,拖動 Task上的箭頭來描述依賴關係。單擊 Task,可以為每個 Task 設定參數。

    • JSON編輯器:也可以直接使用 JSON 的方式描述作業 (Job) 包含的任務 (Task) 以及依賴關係,關於作業的 JSON 描述及其參數說明,可參考作業 (Job) 相關的API使用文檔

      我們這裡直接採用下面已經準備好的JSON描述粘貼到 JSON編輯器中就可以完成作業描述。

      {
        "DAG": {
        "Dependencies": {
            "split": [
            "count"
            ],
            "count": [
            "merge"
            ],
            "merge": []
        },
        "Tasks": {
            "split": {
            "InstanceCount": 1,
            "LogMapping": {},
            "AutoCluster": {
                "Configs": {
                "Networks": {
                    "VPC": {
                    "CidrBlock": "192.168.0.0/16"
                    }
                }
                },
                "ResourceType": "OnDemand",
                "InstanceType": "ecs.sn1ne.large",
                "ImageId": "img-ubuntu-vpc"
            },
            "Parameters": {
                "Command": {
                "EnvVars": {},
                "CommandLine": "python split.py",
                "PackagePath": "oss://your-bucket/log-count/log-count.tar.gz"
                },
                "InputMappingConfig": {
                "Lock": true
                },
                "StdoutRedirectPath": "oss://your-bucket/log-count/logs/",
                "StderrRedirectPath": "oss://your-bucket/log-count/logs/"
            },
            "InputMapping": {
                "oss://your-bucket/log-count/": "/home/input/"
            },
            "OutputMapping": {
                "/home/output/": "oss://your-bucket/log-count/"
            },
            "MaxRetryCount": 0,
            "Timeout": 21600,
            "ClusterId": ""
            },
            "merge": {
            "InstanceCount": 1,
            "LogMapping": {},
            "AutoCluster": {
                "Configs": {
                "Networks": {
                    "VPC": {
                    "CidrBlock": "192.168.0.0/16"
                    }
                }
                },
                "ResourceType": "OnDemand",
                "InstanceType": "ecs.sn1ne.large",
                "ImageId": "img-ubuntu-vpc"
            },
            "Parameters": {
                "Command": {
                "EnvVars": {},
                "CommandLine": "python merge.py",
                "PackagePath": "oss://your-bucket/log-count/log-count.tar.gz"
                },
                "InputMappingConfig": {
                "Lock": true
                },
                "StdoutRedirectPath": "oss://your-bucket/log-count/logs/",
                "StderrRedirectPath": "oss://your-bucket/log-count/logs/"
            },
            "InputMapping": {
                "oss://your-bucket/log-count/": "/home/input/"
            },
            "OutputMapping": {
                "/home/output/": "oss://your-bucket/log-count/"
            },
            "MaxRetryCount": 0,
            "Timeout": 21600,
            "ClusterId": ""
            },
            "count": {
            "InstanceCount": 3,
            "LogMapping": {},
            "AutoCluster": {
                "Configs": {
                "Networks": {
                    "VPC": {
                    "CidrBlock": "192.168.0.0/16"
                    }
                }
                },
                "ResourceType": "OnDemand",
                "InstanceType": "ecs.sn1ne.large",
                "ImageId": "img-ubuntu-vpc"
            },
            "Parameters": {
                "Command": {
                "EnvVars": {},
                "CommandLine": "python count.py",
                "PackagePath": "oss://your-bucket/log-count/log-count.tar.gz"
                },
                "InputMappingConfig": {
                "Lock": true
                },
                "StdoutRedirectPath": "oss://your-bucket/log-count/logs/",
                "StderrRedirectPath": "oss://your-bucket/log-count/logs/"
            },
            "InputMapping": {
                "oss://your-bucket/log-count/": "/home/input/"
            },
            "OutputMapping": {
                "/home/output/": "oss://your-bucket/log-count/"
            },
            "MaxRetryCount": 0,
            "Timeout": 21600,
            "ClusterId": ""
            }
        }
        },
        "Description": "batchcompute job",
        "Priority": 0,
        "JobFailOnInstanceFail": true,
        "Type": "DAG",
        "Name": "log-count"
      }

      上述 JSON 描述的作業要正常運行,您需要根據自己的實際情況,對描述中一些配置項做一些適配修改,包括:

    • 執行個體類型:"InstanceType": "ecs.sn1ne.large"。使用者實際可用的執行個體類型,可以單擊 DAG編輯器中的單個 Task,通過下拉選擇框來選擇。

    • 程式包的OSS路徑:"PackagePath": "oss://your-bucket/log-count/log-count.tar.gz",填寫為實際的程式包路徑。

    • Stdout日誌的OSS路徑:oss://your-bucket/log-count/logs/,填寫為實際的日誌路徑(需要在OSS上提前建立好)。

    • Stderr日誌的OSS路徑:oss://your-bucket/log-count/logs/,填寫為實際的日誌路徑(需要在OSS上提前建立好)。

    • 輸入資料的映射路徑:"oss://your-bucket/log-count/": "/home/input/",填寫為輸入資料的實際路徑。

    • 輸出資料的映射路徑:"/home/output/": "oss://your-bucket/log-count/",填寫為輸出資料的實際路徑。

      確定各個參數及路徑填寫正確後,點擊左下角的提交作業並確認,就完成了作業提交。

3. 查看作業狀態

  • 單擊作業列表中最新提交的 log-count 作業,可以查看詳情:

    作業詳情

  • 單擊任務名稱 split,可以查看任務詳情:

    任務詳情

  • 單擊綠色方塊,可以查看執行個體的日誌:

    查看日誌

4. 查看結果

您可以登入 OSS 控制台 查看 your-bucket 這個 bucket 下面的這個檔案:/log-count/merge_result.json。

內容應該如下:

{"INFO": 2460, "WARN": 2448, "DEBUG": 2509, "ERROR": 2583}