定时分析日志数据

概述

通过定时任务您可定时启动集群运行作业,适用于对已有数据有规律的定时分析并获取结果。优势如下:

  • 省时:任务只需一次创建,一键启停。
  • 省钱:集群随任务的启停而启停。
  • 省力:托管式集群,无需部署和运维。

本文通过定时启动集群运行MapReduce作业分析网站日志以统计每天的访问量,介绍定时任务的实现过程:

示例日志

示例日志是Nginx日志,存储在对象存储服务BOS的公共可读的路径中:

  • 存储在“华北-北京”区域的样例数据仅华北区域的BMR集群可用,路径如下:
    • bos://datamart-bj/access-log/201701102000/access.log
    • bos://datamart-bj/access-log/201701112000/access.log
    • bos://datamart-bj/access-log/201701122000/access.log
    • bos://datamart-bj/access-log/201701132000/access.log
    • bos://datamart-bj/access-log/201701142000/access.log
  • 存储在“华南-广州”区域的样例数据仅华南区域的BMR集群可用,路径如下:
    • bos://datamart-gz/access-log/201701102000/access.log
    • bos://datamart-gz/access-log/201701112000/access.log
    • bos://datamart-gz/access-log/201701122000/access.log
    • bos://datamart-gz/access-log/201701132000/access.log
    • bos://datamart-gz/access-log/201701142000/access.log

关于百度智能云的区域说明,请参考区域选择说明

设计作业

  1. 撰写作业程序。本文使用的MapReduce样例程序的代码已上传至:https://github.com/BCEBIGDATA/bmr-sample-java,您可通过GitHub克隆代码至本地设计自己的程序。
  2. 编译程序生成jar包,具体可参考编译Maven项目
  3. 上传编译生成的jar包到对象存储BOS(具体操作详见对象存储BOS入门指南)。

存储日志

  1. 规划时间策略如下:自2017年1月10日至1月14日,每天20时分析前一天的日志数据。
  2. 准备日志数据。您可直接使用百度智能云提供的示例日志,在熟悉定时任务后,可参考数据准备选择您自己的日志数据。

启动定时任务

创建集群模板

  1. 登录控制台,选择“产品服务->百度MapReduce BMR”,点击“集群模板”,进入模板列表页。
  2. 点击“创建模板”,在“集群基础设置”区做如下配置:
    • 集群模板:输入模板名称“timedtask”。
    • 日志:选择集群日志的存储路径。
    • 高级设置:打开“自动终止”开关。
  3. 在“集群配置”区,选择镜像版本BMR 1.0.0(hadoop 2.7),并选择模板“hadoop”。
  4. 其他设置可保持默认设置,点击“完成”即可。
  5. 点击已创建的集群模板,可查看模板详情如下:

创建定时任务

  1. 在“产品服务->百度MapReduce BMR”页,点击“定时任务”,进入定时任务列表页。
  2. 点击“创建定时任务”,在“任务参数”区输入任务名称,并选择已创建的集群模板“timedtask”。
  3. 在“执行频率”区,设置执行频率为“每1天”,并指定开始任务时间点“2017年1月10日20:00:00”,任务结束时间点“2017年1月10日20:00:00”。
  4. 在“作业设置”区,点击“添加作业”,做如下配置:
    • 作业类型:选择“java作业”。
    • 作业名称:输入“timedtaskjob”。
    • 应用程序位置:若使用您自行编译的程序,请上传程序jar包至BOS或者您本地的HDFS中,并在此输入程序路径;您也可直接使用百度智能云提供的样例程序,路径如下:
      • 华北-北京区域的BMR集群对应的样例程序路径:bos://bmr-public-bj/sample/mapreduce-1.0-SNAPSHOT.jar。
      • 华南-广州区域的BMR集群对应的样例程序路径:bos://bmr-public-gz/sample/mapreduce-1.0-SNAPSHOT.jar。
    • 失败后操作:继续。
    • MainClass:输入“com.baidu.cloud.bmr.mapreduce.AccessLogAnalyzer”。
    • 应用程序参数:指定输入数据的路径、结果输出的路径(可选BOS或HDFS),其中输出路径必须具有写权限且该路径不能已存在。以样例日志作为输入数据,BOS作为输出路径为例,输入如下:
      • 华北-北京区域的BMR集群对应的参数:bos://datamart-bj/access-log/201701102000/access.log bos://{your-bucket}/output/%Y%m%d%H%M。
      • 华南-广州区域的BMR集群对应的参数:bos://datamart-gz/access-log/201701102000/access.log bos://{your-bucket}/output/%Y%m%d%H%M。

        说明:

        • 请替换{your-bucket}为您自己的bucket名字。
        • 系统启动集群时可根据输入/输出地址自动匹配字串“%Y%m%d%H%M”对应时间的文件。即2017年11月28日20:00启动集群时调用地址是bos://datamart-bj/access-log/201701102000/access.log的数据,运行结果自动输出至地址是bos://{your-bucket}/output/201711282000/文件夹内。
  5. 点击“确定”完成定时任务的作业添加。
  6. 点击“完成”,定时任务创建完毕。
  7. 可在“产品服务>MapReduce>百度MapReduce-定时任务”页中查看已创建的任务,如下图所示:

读取分析结果

2017年1月10日至1月14日,每天20时系统会自动启动集群并运行作业,作业运行结束后集群自动释放,您可至bos://{your-bucket}/output/路径下查看每次任务的执行结果。下图是第一次任务的分析结果: