全部产品
阿里云办公

控制台快速开始

更新时间:2018-11-07 10:25:04

介绍如何使用控制台来提交一个作业,目的是统计一个日志文件中 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)打包, 否则将会无法解析。
  • 如果你要修改代码,可以解压后修改,然后要用下面的方法打包:

命令如下:

  1. > cd log-count #进入目录
  2. > tar -czf log-count.tar.gz * #打包,将所有这个目录下的文件打包到 log-count.tar.gz

可以运行这条命令查看压缩包内容:

  1. $ tar -tvf log-count.tar.gz

可以看到以下列表:

  1. conf.py
  2. count.py
  3. merge.py
  4. split.py

2. 使用控制台提交作业

  1. 登录 BatchCompute 控制台

  2. 单击 作业列表 > 提交作业 进行作业提交。请选择合适的 Region(该 region 需要和前面上传数据的OSS的 bucket 的 region 一致)。

    提交作业

    如上图所示,填写了作业名称、作业优先级等参数后,需要通过DAG编辑器来描述作业(job)包含的任务(task)以及依赖关系。拖动编辑器左上角的“+”来添加task,拖动task上的箭头来描述依赖关系。单击task,可以为每个task设置参数。几个主要的必填参数介绍如下:

    • 启动实例个数:用来描述当前任务需要并行启动几个实例来运行,比如本例子中,第一步中日志被分成了三份,在第二步count就需要三个实例同时运行。
    • 集群:用来描述运行作业的集群信息,可以是批量计算服务提供的AutoCluster,也可以是用户自己创建的集群。这里使用默认的 AutoCluster 提交作业, 匿名集群需要至少配置镜像ID和实例类型 2 个参数。
    • 镜像 ID:可以使用系统提供的 Image,也可以自行制作镜像, 参考 使用镜像
    • 资源类型:是指创建集群的ECS资源的类型,可以是按需或竞价,这里使用默认的按需类型。
    • 实例规格(InstanceType,实例类型):可以通过控制台上左侧的可用类型来查询,更多的实例类型请参考 目前支持类型
    • 程序运行命令:是指当前task的实例运行后需要执行的命令,比如split task中执行python split.py。
    • 程序包的OSS路径:如果需要运行本例,还需填写作业打包上传的 OSS 路径,比如本例中为 oss://your-bucket/log-count/log-count.tar.gz。
    • Stdout日志的OSS路径:是任务结果输出的OSS路径(本例中为:oss://your-bucket/log-count/logs/)。
    • Stderr日志的OSS路径:是任务错误日志输出的OSS路径(本例中为:oss://your-bucket/log-count/logs/)。

      填写完所有参数后,在DAG编辑器右边的JSON编辑器会显示作业对应的 JSON 格式描述,模板如下,具体参数含义请参照 这里

      1. {
      2. "DAG": {
      3. "Dependencies": {
      4. "split": [
      5. "count"
      6. ],
      7. "count": [
      8. "merge"
      9. ],
      10. "merge": []
      11. },
      12. "Tasks": {
      13. "split": {
      14. "InstanceCount": 1,
      15. "LogMapping": {},
      16. "AutoCluster": {
      17. "Configs": {
      18. "Networks": {
      19. "VPC": {
      20. "CidrBlock": "192.168.0.0/16"
      21. }
      22. }
      23. },
      24. "ResourceType": "OnDemand",
      25. "InstanceType": "ecs.sn1ne.large",
      26. "ImageId": "img-ubuntu-vpc"
      27. },
      28. "Parameters": {
      29. "Command": {
      30. "EnvVars": {},
      31. "CommandLine": "python split.py",
      32. "PackagePath": "oss://your-bucket/log-count/log-count.tar.gz"
      33. },
      34. "InputMappingConfig": {
      35. "Lock": true
      36. },
      37. "StdoutRedirectPath": "oss://your-bucket/log-count/logs/",
      38. "StderrRedirectPath": "oss://your-bucket/log-count/logs/"
      39. },
      40. "InputMapping": {
      41. "oss://your-bucket/log-count/": "/home/input/"
      42. },
      43. "OutputMapping": {
      44. "/home/output/": "oss://your-bucket/log-count/"
      45. },
      46. "MaxRetryCount": 0,
      47. "Timeout": 21600,
      48. "ClusterId": ""
      49. },
      50. "merge": {
      51. "InstanceCount": 1,
      52. "LogMapping": {},
      53. "AutoCluster": {
      54. "Configs": {
      55. "Networks": {
      56. "VPC": {
      57. "CidrBlock": "192.168.0.0/16"
      58. }
      59. }
      60. },
      61. "ResourceType": "OnDemand",
      62. "InstanceType": "ecs.sn1ne.large",
      63. "ImageId": "img-ubuntu-vpc"
      64. },
      65. "Parameters": {
      66. "Command": {
      67. "EnvVars": {},
      68. "CommandLine": "python merge.py",
      69. "PackagePath": "oss://your-bucket/log-count/log-count.tar.gz"
      70. },
      71. "InputMappingConfig": {
      72. "Lock": true
      73. },
      74. "StdoutRedirectPath": "oss://your-bucket/log-count/logs/",
      75. "StderrRedirectPath": "oss://your-bucket/log-count/logs/"
      76. },
      77. "InputMapping": {
      78. "oss://your-bucket/log-count/": "/home/input/"
      79. },
      80. "OutputMapping": {
      81. "/home/output/": "oss://your-bucket/log-count/"
      82. },
      83. "MaxRetryCount": 0,
      84. "Timeout": 21600,
      85. "ClusterId": ""
      86. },
      87. "count": {
      88. "InstanceCount": 3,
      89. "LogMapping": {},
      90. "AutoCluster": {
      91. "Configs": {
      92. "Networks": {
      93. "VPC": {
      94. "CidrBlock": "192.168.0.0/16"
      95. }
      96. }
      97. },
      98. "ResourceType": "OnDemand",
      99. "InstanceType": "ecs.sn1ne.large",
      100. "ImageId": "img-ubuntu-vpc"
      101. },
      102. "Parameters": {
      103. "Command": {
      104. "EnvVars": {},
      105. "CommandLine": "python count.py",
      106. "PackagePath": "oss://your-bucket/log-count/log-count.tar.gz"
      107. },
      108. "InputMappingConfig": {
      109. "Lock": true
      110. },
      111. "StdoutRedirectPath": "oss://your-bucket/log-count/logs/",
      112. "StderrRedirectPath": "oss://your-bucket/log-count/logs/"
      113. },
      114. "InputMapping": {
      115. "oss://your-bucket/log-count/": "/home/input/"
      116. },
      117. "OutputMapping": {
      118. "/home/output/": "oss://your-bucket/log-count/"
      119. },
      120. "MaxRetryCount": 0,
      121. "Timeout": 21600,
      122. "ClusterId": ""
      123. }
      124. }
      125. },
      126. "Description": "batchcompute job",
      127. "Priority": 0,
      128. "JobFailOnInstanceFail": true,
      129. "Type": "DAG",
      130. "Name": "log-count"
      131. }
    • 确定各个参数及路径填写正确后,点击左下角的提交作业,并确认。

3. 查看作业状态

  • 单击作业列表中最新提交的 log-count 作业,可以查看详情:

    作业详情

  • 单击任务名称 split,可以查看任务详情:

    任务详情

  • 单击绿色方块,可以查看实例的日志:

    查看日志

4. 查看结果

您可以登录 OSS 控制台 查看 your-bucket 这个 bucket 下面的这个文件:/log-count/merge_result.json。

内容应该如下:

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