最佳实践 > 离线应用场景
离线应用场景
  • 概览
  • 需求场景
  • 大数据离线分析场景
  • 方案概述
  • 数据采集
  •  通过bls服务采集日志
  • 数据清洗
  • 创建bmr集群,运行定时任务
  • 报表展现
  • palo建表与数据导入
  • 相关产品

离线应用场景-奇异果体育app竞彩官网下载

更新时间:

概览

离线数据分析适用于数据规模大、处理实时性要求不高的场景,例如用户行为分析、用户留存分析、报表统计等等。基于百度智能云大数据平台,用户可以便捷地实现离线数据分析,包括数据的采集、数据清洗、数据仓库以及商业智能展现。

需求场景

大数据离线分析场景

通常是指对海量数据进分析和处理,形成结果数据,供下一步数据应用使用。离线处理对处理时间要求不高,但是所处理数据量较大,占用计算存储资源较多,通常通过mr或者spark作业或者sql作业实现。离线分析系统架构中以hdfs分布式存储软件为数据底座,计算引擎以基于mapreduce的hive和基于spark的sparksql为主。

方案概述

具体而言,可以通过使用bls(百度logservice)、bos(百度对象存储)、bmr(mapreduce)、palo(百度olap引擎)这些产品实现上述场景。我们以常见的用户访问日志分析场景作为示例,离线处理架构图如下图所示:

首先,用户访问日志保存在web服务器的文件系统,通过在bls服务创建传输任务,把相关服务器上的日志收集到bos进行存储;然后使用bmr集群运行hive作业对日志数据进行清洗和处理,输出的目标数据仍保存在bos;最后,把目标数据从bos导入到olap引擎palo中,即可进行多维分析。百度智能云palo还支持对接兼容jdbc接口的可视化分析应用,更加直观、便捷地展示数据分析结果。

数据采集

 通过bls服务采集日志

参考文档

使用bls服务首先需要在目标机器上安装收集器,收集器负责从bls服务接收传输任务,并把日志数据从本地磁盘上传到bos指定目录。

在本案例中,我们的web服务器上运行了nginx进程,并且把nginx日志生成路径配置在/var/log/nginx/下,日志文件的格式为access.log.yyyymmdd,根据日期进行轮转,每天生成一个新的日志文件,比如2017年3月20号的日志将都保存在文件access.log.20170320中。为了将这些日志文件收集到bos保存,我们在bls服务创建一个新的传输任务,具体配置信息如下图所示。源端类型为“目录”,将“源日志目录”配置为nginx日志所在目录:/var/log/nginx,“匹配文件规则”配置为日志文件的正则表达式:^access.log.[0-9]{8}$。

目的端设置中,选择“日志投递目的”为“bos”,并且通过下拉选框选择bos上目的路径为“bos://quanmin-log/"。另外,我们可以根据日志聚合的需要,在bos端重新组织日志数据的目录结构。在本案例中,我们勾选“根据时间聚合”,注意选择源日志文件的时间戳为yyyymmdd,这是跟我们服务器上日志文件名中的时间戳正则匹配的,bls收集器将根据这个正则去匹配日志文件名,从而得到改日志文件对应的时间数据。然后,我们选择“用户自定义”,这里是配置具体的聚合路径,我们填入配置“%y%m%d”,也就是把bos目的端路径配置为bos://nginx-logs/%y%m%d/。由于web服务器有多台,我们需要把日志来源的服务器也在日志保存路径中体现出来,因此勾选“根据主机聚合”,并选择按主机ip聚合。最终,在bos上保存的日志数据的路径将符合bos://quanmin-log/%y%m%d/%{ip}的格式。

数据清洗

创建bmr集群,运行定时任务

配置好bls传输任务后,预期每天的日志都将传输到指定的bos目录。nginx日志包含字段较多,我们需要进行选择并转换字段来得到符合需求的数据。这一步我们可以使用bmr定时任务功能,每天定期运行hive作业,对导入bos的日志数据进行用户活跃留存统计。

在本案例中,具体操作步骤如下:

  1. 创建集群模板,操作入口是bmr产品控制台左侧导航栏“集群模板”-页面中部主体“创建模板”按钮:

    创建模块的参数填写需要注意两点:

    • 启动“自动终止”,该选项说明在定时任务完成后自动释放集群,停止计费。如果不启动,则定时任务执行过程创建出的集群将一直保持活跃状态,计入产品费用:
    • 注意添加hive应用,否则集群将不能运行hive作业:

    集群节点配置是根据具体作业任务的规模来配置的,如果不了解实际规模可以先保持默认节点配置,后续根据作业运行耗时情况来重新配置。

  2. 创建定时任务,操作入口是bmr产品控制台左侧导航栏“定时任务”-页面中部主体“创建任务”按钮:

    配置定时任务主要是选择集群模板、执行策略以及作业。集群模板需要选择刚才创建的集群模板。执行策略可以根据实际业务需要进行选择。这里以每天运行数据分析举例,配置执行频率是每1天。任务开始时间为立即开始(如果需要第二天一早看到数据结果,可以把开始时间定为凌晨某个时间点)。

  3. 添加hive作业到定时任务中。我们编写的hive作业将对原始日志数据进行如下处理:

    1)对空值附以对业务无意义的数值。

    由于palo不支持空值字段,需要对日志中的空值字段做一定处理,目前均处理为0。

    2)将ip信息转化为地址位置信息。

    通过ip-geo库与udf把ip信息转化为地理位置信息,精确到市一级,同时提供经纬度信息便于在可视化工具中做地图报表。

    3)将时间字段打散为多个字段。

    为方便下载查询,将日志中的时间字段打散为年、月、日、时、分等五个字段。同时为了在palo中声明为date类型从而加快查询速度,且不丢失字段本身的含义,年、月字段需满足yyyy-mm-dd格式的合法值,故年字段统一为当年第一天,月字段统一为当月第一天,例如2016年表示为2016-01-01,2016年7月表示为2016-07-01。

    4)统计用户次日留存情况。

    次日留存定义为当天的所有访问ip中在前一天也访问过的ip子集,也就是一个客户端ip在某天及其前一天都出现在nginx访问日志中,则可认为该ip是一个次日留存客户。

    点击“确定”。样例定时任务就只有一个hive作业,因此可以点击“完成”提交定时任务。

    标准创建定时任务的步骤请参考文档

    标准的hive作业样例请参考文档

报表展现

palo建表与数据导入

bmr运行hive作业处理过后的数据保存在bos上,本案例中,上面定时任务运行hive作业,配置的bos输出地址是bos://quanmin-bmr/hive-output/%y%m%d/access_pv/,其中“%y%m%d”将根据任务实际执行日期替换为数字,比如20160601。为了把bmr清洗好的数据导入palo,我们首先需要在palo预先建立好数据库表。首先,在palo服务创建一个新集群。

集群创建好以后, palo提供兼容mysql的接口,可以直接使用mysql的相关库或者工具进行连接palo集群(目前palo只支持mysql 5.0以上的客户端,在连接之前请确认您的客户端版本)。以mysql workbench为例:

  1. 连接palo集群。使用的配置信息均可以在palo集群的详情页面查看到:

    • hostname:factory.baidu.com
    • port:7036
    • username:superuser@cluster_id,实例中cluster_id为599531639
  2. 建立数据库。

    create database quanmin;
  3. 建立数据表。目前需要建两张表,一张是包含所有数据和字段的明细表(detail table),一张是次日留存表(retain_day table,当前页包含了所有字段)。这里我们给出datail表的建表语句:

    create table detail
    (
    platform int,
    action varchar(100),  
    v1 varchar(100),  
    v2 varchar(100),    
    year date, 
    month date, 
    day date,
    hour datetime,   
    minute datetime,
    time datetime, 
    user_id int,
    device varchar(50),
    ip varchar(20),  
    server_ip varchar(20),  
    province_name varchar(50),  
    city_name varchar(50),  
    longitude varchar(20),  
    latitude varchar(20),  
    pv int sum
    )
    engine = olap
    partition by range(time) (
    partition p1 values less than ("2016-08-01 00:00:00"),
    partition p2 values less than ("2016-10-01 00:00:00")
    )
    distributed by hash(platform)
  4. 最后进行bos数据导入,在mysql workbench继续执行语句:

    load label detail1 (
    data infile("bos://quanmin-bmr/hive-output/2016-07-30/*") into table
    `detail` columns terminated by "," (platform, action, v1, v2, user_id, device, time, year, month, day, hour,minute, ip, server_ip, province_name, city_name,longitude, latitude, pv)
    )
    properties(
    "bos_accesskey" ="your_ak",
    "bos_secret_accesskey" = "your_sk",
    "bos_endpoint"= "http://bj.bcebos.com"
    );
  5. 使用主流的bi/可视化工具进行数据分析与展现。palo支持jdbc接口连接访问,因此对于兼容jdbc接口的bi/可视化工具都能连接palo集群,对我们导入的数据进行可视化分析。

注意:

  • 每次成功导入后,下次需要使用不同的导入label,导入语句中的your_ak、your_sk需要替换为实际的ak、sk。百度智能云使用ak、sk验证用户身份,请妥善保管。
  • 导入过程中,可以通过 “show load;” 命令查看load过程。
  • 导入成功后,即可通过mysql客户端和bi/可视化工具进行查询分析。

相关产品

bls(百度logservice)bos(百度对象存储)bmr(mapreduce)palo(百度olap引擎)

网站地图