【Best Practice】基于阿里云数加·MaxCompute及Quick BI构建网站用户画像分析

前文背景:【Best Practice】基于阿里云数加·StreamCompute快速构建网站日志实时分析大屏  

开通阿里云数加产品

前提条件

为了保证整个实验的顺利开展,需要用户使用开通相关产品及服务,包括DataHub、MaxCompute、AnalyticDB、Data IDE、Quick BI。    

 业务场景

数据来源于网站上的HTTP访问日志数据,基于这份网站日志来实现如下分析需求:

n   统计并展现网站的PV和UV,并能够按照用户的终端类型(如Android、iPad、iPhone、PC等)分别统计。

n   统计并展现网站的流量来源。

n   统计并展现网站的用户地域分布。

【说明】浏览次数(PV)和独立访客(UV)是衡量网站流量的两项最基本指标。用户每打开一个网站页面,记录一个PV,多次打开同一页面PV 累计多次。独立访客是指一天内,访问网站的不重复用户数,一天内同一访客多次访问网站只计算1 次。

数据说明

该数据的格式如下:

$remote_addr - $remote_user [$time_local] “$request” $status $body_bytes_sent”$http_referer” “$http_user_agent” [unknown_content];

主要字段说明如下:


字段名称


字段说明


$remote_addr


发送请求的客户端IP地址


$remote_user


客户端登录名


$time_local


服务器本地时间


$request


请求,包括HTTP请求类型+请求URL+HTTP协议版本号


$status


服务端返回状态码


$body_bytes_sent


返回给客户端的字节数(不含header)


$http_referer


该请求的来源URL


$http_user_agent


发送请求的客户端信息,如使用的浏览器等

 

真实源数据如下:

18.111.79.172 - - [12/Feb/2014:03:15:52 +0800] “GET /articles/4914.html HTTP/1.1” 200 37666
“http://coolshell.cn/articles/6043.html” “Mozilla/5.0 (Windows NT 6.2; WOW64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36” – 

具体流程

如上图所示,红色箭线部分为流式数据处理部分,主要拆解如下:

l  配置Logstash,将CoolShell.cn产生的日志实时采集至DataHub。

l  申请开通DataHub,创建项目Project及Topic(DataHub服务订阅和发布的最小单位)。

l  开通MaxCompute及大数据开发套件,创建项目Project,并创建MaxCompute表及数据同步任务。

l  将数据加工得到的结果表数据同步至AnalyticDB中便于Quick BI进行分析。

数据结构设计

离线分析的处理逻辑中主要设计到DataHub Topic、MaxCompute表、AnalyticDB表。那这些表之间的逻辑结果以及数据链路是怎样的呢?如下示例:

DataHub Topic

根据如上数据链路涉及到的DataHub Topic包括:coolshell_log_tracker。

Coolshell_log_tracker

Topic是DataHub服务订阅和发布的最小单位,可以用来表示一类或者一种流数据。通过对日志结构的解析原始DataHub Topic:coolshell_log_tracker格式如下:


字段名称


字段类型


ip


string


user


string


accesstime


string


method


string


url


string


protocol


string


status


bigint


byte_cnt


bigint


referer


string


agent


string


dt


string

ods_log_tracker

针对Topic CoolShell_log_tracker可进行归档至MaxCompute 表中做进一步的离线分析和加工。(说明:数据归档的频率为每个Shard每5分钟或者Shard中新写入的数据量达到64MB,Connector服务会批量进行一次数据归档进入MaxCompute表的操作。)

具体结构如下:

 


字段名称


字段类型


字段说明


ip


string


客户端请求ip


user


string


客户端登录名


accesstime


string


服务器本地时间


method


string


请求方法


url


string


访问路径或页面


protocol


string


HTTP协议版本号


status


bigint


服务器返回状态码


byte_cnt


bigint


返回给客户端的字节数


referer


string


该请求的来源URL


agent


string


客户端信息,如浏览器


dt


string


时间分区YYYYMMDD

dw_log_detail

根据agent字段的规律拆分出device(设备)和identity(请求来源标识)并将数据写入MaxCompute的dw_log_detail表中。表结果如下所示:


字段名称


字段类型


字段说明


ip


string


客户端请求ip


accesstime


string


服务器本地时间


method


string


请求方法


url


string


访问路径或页面


protocol


string


HTTP协议版本号


status


bigint


服务器返回状态码


byte_cnt


bigint


返回给客户端的字节数


referer


string


该请求的来源URL


agent


string


客户端信息,如浏览器


device


string


请求来源设备情况


identity


string


请求来源标识,如爬虫


dt


string


时间分区YYYYMMDD

 

dim_user_info

假设基于简单规则,ip、device、protocol、identity和agent字段信息完全一致可以认为是同一个用户,来确认uid(识别唯一用户)。同时根据ip2region的自定义函数将ip地址转换为city字段,最终产生用户维度表:dim_user_info,表结构如下所示:


字段名称


字段类型


字段说明


uid


string


用户唯一标识


ip


string


客户端请求ip


city


string


ip对应的城市


protocol


string


HTTP协议版本号


device


string


请求来源设备情况


identity


string


请求来源标识,如爬虫


agent


string


客户端信息,如浏览器


dt


string


时间分区YYYYMMDD

dw_log_fact

按照用户维表进行聚合展现具体的数据产生事实表,具体表结构如下:


字段名称


字段类型


字段说明


uid


string


用户唯一标识


accesstime

 


string


服务器本地时间


method


string


请求方法


url


string


访问路径或页面


status


string


服务器返回状态码


byte_cnt


string


返回给客户端的字节数


referer


string


该请求的来源URL


dt


string


时间分区YYYYMMDD

 

接着我们按照需要分析的主题进行加工数据,也就是数据仓库领域中的ADM(数据集市)层。具体如下:

adm_refer_info

按照请求来源类型进行统计,具体表结构如下所示:


字段名称


字段类型


字段说明


referer


string


请求来源


referer_count

 


bigint


请求来源总数


dt


string


时间分区YYYYMMDD

 

adm_user_measures

按照pv/uv来进行统计,具体表结构如下所示:


字段名称


字段类型


字段说明


device


string


设备类型


pv

 


bigint


页面浏览量


uv


bigint


页面访客数


dt


string


时间分区YYYYMMDD

 

adm_user_info

按照地域来统计用户数,具体表结构如下:


字段名称


字段类型


字段说明


city


string


城市


user_count

 


bigint


每个城市的用户数


dt


string


时间分区YYYYMMDD

 

AnalyticDB Table

由于MaxCompute更适合于做离线数据加工分析,最终的展现要将数据导入AnalyticDB进行QuickBI的展现,对应的表结构同adm_refer_info、adm_user_measures、adm_user_info。

日志数据的实时解析和采集: Logstash安装与配置

具体可以详见:【Best Practice】基于阿里云数加·StreamCompute快速构建网站日志实时分析大屏  中的安装和配置。需要特别注意的是其中dt字段的处理,需要得到我们MaxCompute表中的分区信息,格式为YYYYMMDD。

ruby{
    code => "
    md = event.get('accesstime')
    event.set('dt',DateTime.strptime(md,'%d/%b/%Y:%H:%M:%S').strftime('%Y%m%d'))
    "
  }

DataHub Topic的结构与上一篇流式数据处理的结构相同。

创建MaxCompute表

(进入大数据开发套件https://ide.shuju.aliyun.com/创建脚本文件进行编辑创建表的DDL语句)具体SQL附录如下:

CREATE TABLE IF NOT EXISTS ods_log_tracker(
    ip STRING COMMENT 'client ip address',
    user STRING,
    accesstime string,
    method STRING COMMENT 'HTTP request type, such as GET POST...',
    url STRING,
    protocol STRING,
    status BIGINT COMMENT 'HTTP reponse code from server',
    byte_cnt BIGINT,
    referer STRING,
    agent STRING)
PARTITIONED BY(dt STRING);

CREATE TABLE IF NOT EXISTS dw_log_detail(
    ip STRING COMMENT 'client ip address',
    accesstime string,
    method STRING COMMENT 'HTTP request type, such as GET POST...',
    url STRING,
    protocol STRING,
    status BIGINT COMMENT 'HTTP reponse code from server',
    byte_cnt BIGINT,
    referer STRING COMMENT 'referer domain',
    agent STRING,
    device STRING COMMENT 'android|iphone|ipad...',
    identity STRING  COMMENT 'identify: user, crawler, feed')
PARTITIONED BY(dt STRING);

CREATE TABLE IF NOT EXISTS dim_user_info(
    uid STRING COMMENT 'unique user id',
    ip STRING COMMENT 'client ip address',
	city string comment 'city',
	protocol STRING,
    device STRING,
    identity STRING  COMMENT 'user, crawler, feed',
    agent STRING)
PARTITIONED BY(dt STRING);

CREATE TABLE IF NOT EXISTS dw_log_fact(
    uid STRING COMMENT 'unique user id',
    accesstime string,
    method STRING COMMENT 'HTTP request type, such as GET POST...',
    url STRING,
    status BIGINT COMMENT 'HTTP reponse code from server',
    byte_cnt BIGINT,
    referer STRING)
PARTITIONED BY(dt STRING);

CREATE TABLE IF NOT EXISTS adm_user_measures(
    device STRING COMMENT 'such as android, iphone, ipad...',
    pv BIGINT,
    uv BIGINT)
PARTITIONED BY(dt STRING);

CREATE TABLE adm_refer_info(
    referer STRING,
    referer_count BIGINT)
PARTITIONED BY(dt STRING);

CREATE TABLE adm_user_info(
    city STRING,
    user_count BIGINT)
PARTITIONED BY(dt STRING);

AnalyticDB表创建

在大数据开发套件中创建好MaxCompute表后,需要将ADM数据集市层的表同步至AnalyticDB中,再利用QuickBI进行数据分析和洞察。    

操作步骤

步骤1      进入阿里云数加AnalyticDB管控台,开通并创建数据库确定。

步骤1      点击操作栏中的进入,进入DMS for AnalyticDB。

步骤2      创建AnalyticDB表组,具体如下:

create tablegroup coolshell_log options(minRedundancy=2 executeTimeout=30000);

步骤3      创建AnalyticDB数据表,DDL语句分别如下。

create tablegroup coolshell_log options(minRedundancy=2 executeTimeout=30000);
CREATE TABLE adm_user_measures(
    device varchar COMMENT 'such as android, iphone, ipad...',
    pv BIGINT,
    uv BIGINT)
PARTITION BY HASH KEY(device)
PARTITION NUM 50
SUBPARTITION BY LIST(dt bigint)
SUBPARTITION OPTIONS (available_partition_num = 30)
tablegroup coolshell_log;

CREATE TABLE adm_refer_info(
    referer varchar,
    referer_count BIGINT)
PARTITION BY HASH KEY(referer)
PARTITION NUM 50
SUBPARTITION BY LIST(dt bigint)
SUBPARTITION OPTIONS (available_partition_num = 30)
tablegroup coolshell_log;

CREATE TABLE adm_user_info(
    city varchar,
    user_count BIGINT)
PARTITION BY HASH KEY(city)
PARTITION NUM 50
SUBPARTITION BY LIST(dt bigint)
SUBPARTITION OPTIONS (available_partition_num = 30)
tablegroup coolshell_log;

新建ODPS SQL任务

各个处理逻辑的SQL脚本如下

---adm_refer_info中的处理逻辑---
INSERT OVERWRITE TABLE adm_refer_info PARTITION (dt='${bdp.system.bizdate}')
SELECT referer
	, COUNT(*) AS referer_cnt
FROM dw_log_fact
WHERE LENGTH(referer) > 1
	AND dt = '${bdp.system.bizdate}'
GROUP BY referer;

--adm_user_measures中的处理逻辑---
INSERT OVERWRITE TABLE adm_user_measures PARTITION (dt='${bdp.system.bizdate}')
SELECT u.device
	, COUNT(*) AS pv
	, COUNT(DISTINCT u.uid) AS uv
FROM dw_log_fact f
JOIN dim_user_info u
ON f.uid = u.uid
	AND u.identity = 'user'
	AND f.dt = '${bdp.system.bizdate}'
	AND u.dt = '${bdp.system.bizdate}'
GROUP BY u.device;

--adm_user_info中的处理逻辑—
INSERT OVERWRITE TABLE adm_user_info PARTITION (dt='${bdp.system.bizdate}')
SELECT city
	, COUNT(*) AS user_count
FROM dim_user_info
where dt=${bdp.system.bizdate}
GROUP BY city;
INSERT OVERWRITE TABLE dw_log_fact PARTITION (dt=${bdp.system.bizdate})
SELECT u.uid
	, d.accesstime
	, d.method
	, d.url
	, d.status
	, d.byte_cnt
	, d.referer
FROM dw_log_detail d
JOIN dim_user_info u
ON (d.ip = u.ip
	AND d.protocol = u.protocol
	AND d.agent = u.agent) and d.dt = ${bdp.system.bizdate}	AND u.dt =${bdp.system.bizdate};

创建自定义函数

需要通过自定义函数-Java UDF来处理IP,将IP地址转化为地域region。具体的jar包详见附件。创建自定义函数的具体操作流程详见:https://help.aliyun.com/document_detail/30270.html

配置项说明如下:

函数名:getregion

类名:org.alidata.odps.udf.Ip2Region

资源:ip2region.jar

数据导出AnalyticDB

经过上述步骤,数据加工逻辑已经可以正常执行,那么需要进行数据导出工作。创建三个同步任务将adm数据集市层的数据导入至分析型数据库中,供后续Quick BI更高效的洞察数据。    

选择数据源为ADS,填写配置信息并测试连通性通过后,点击 确定 保存配置。(其中AccessID和AccessKey都是大数据开发套件对应项目的生产账号)

在MaxCompute console中需要对garuda_build@aliyun.com 与 garuda_data@aliyun.com。如下进行:    

add user ALIYUN$garuda_build@aliyun.com;
add user ALIYUN$garuda_data@aliyun.com;
grant describe,select on table adm_refer_info to user ALIYUN$garuda_build@aliyun.com;
grant describe,select on table adm_refer_info to user ALIYUN$garuda_data@aliyun.com;
grant describe,select on table adm_user_measures to user ALIYUN$garuda_data@aliyun.com;
grant describe,select on table adm_user_measures to user ALIYUN$garuda_build@aliyun.com;
grant describe,select on table adm_user_info to user ALIYUN$garuda_build@aliyun.com;
grant describe,select on table adm_user_info to user ALIYUN$garuda_data@aliyun.com;

在DMS for AnalyticDB中新建授权,用户为大数据开发套件项目对应的生产账号(可从项目管理>项目配置中获取)。    

配置好MaxCompute2AnalyticDB数据导出后,需要针对工作流任务的调度属性尤其是调度时间进行配置(需要根据具体业务需要来进行)。配置完这些任务属性之后需要提交并上线任务。

数据报表展现

针对数据加工的结果,采用Quick BI进行分析。其不同于传统BI工具,Quick BI提供端到端的解决方案,可以与整个阿里云数加大数据处理逻辑无缝对接,分析用户在MaxCompute、AnalyticDB上的数据。    

创建AnalyticDB数据源

经过数据大数据开发套件清洗/加工后的数据已经成功的写入AnalyticDB,那么通过Quick BI可轻松的实现图表、报表形式展现。    

创建数据集

操作步骤

点击已经添加的数据源,在操作栏中分别点击 创建数据集。    

分析数据集

操作步骤

点击adm_user_info
操作栏中的 分析。  

在这里需要特别注意的是,我们处理后的数据中city是字符型的,那么如何转为地图可以识别的类型,需要进行类型转化,如下图所示:

点击选择 dt 右键选择将其转化为维度,继而右键dt 选择类型转化>日期(源数据格式)>yyyyMMdd,在保存弹出框中保存为 城市分布。  

创建图表模板

操作步骤

点击左侧
模板 进入,选择空白图表模板。按照自己需要的布局进行。

针对每个图标可以在右侧进行关联数据集,如来自工作表..等。最终实现的效果如下:

时间: 2024-09-18 20:52:43

【Best Practice】基于阿里云数加·MaxCompute及Quick BI构建网站用户画像分析的相关文章

基于阿里云数加MaxCompute的企业大数据仓库架构建设思路

  数加大数据直播系列课程,主要以基于阿里云数加MaxCompute的企业大数据仓库架构建设思路为主题,分享阿里巴巴的大数据是怎么演变以及怎样利用大数据技术构建企业级大数据平台.   本次分享嘉宾是来自阿里云大数据的技术专家祎休!   背景与总体思路   数据仓库是一个面向主题的.集成的.非易失的.反映历史变化的数据集合,用于支持管理决策.其结构图如下所示:     随着大数据.云计算等技术的应用和普及,互联网环境下数据处理呈现出新的特征:业务变化快:数据来源多:系统耦合多:应用深度深.业务变化

【直播沉淀】基于阿里云数加MaxCompute的企业大数据仓库架构建设思路

数加大数据直播系列课程,主要以基于阿里云数加MaxCompute的企业大数据仓库架构建设思路为主题,分享阿里巴巴的大数据是怎么演变以及怎样利用大数据技术构建企业级大数据平台. 本次分享嘉宾是来自阿里云大数据的技术专家祎休! 演讲1:背景与总体思路 演讲2:架构及模型设计 演讲3:基于阿里云数加搭建大数据仓库 演讲4:用大数据治理大数据

【Best Practice】基于阿里云数加·StreamCompute快速构建网站日志实时分析大屏

本文偏向与实操层面的为大家介绍,如何基于阿里云数加StreamCompute.DataV快速构建网站日志实时分析. [什么场景适合用流计算] 流计算提供了针对流式数据实时分析的一站式工具链,对于大量流式数据存在实时分析.计算.处理的逻辑可以考虑通过流计算该任务.举例如下: 1. 针对实时营销活动,需要实时获取活动流量数据分析以了解活动的营销情况,此时可以上流计算. 2. 针对物联网设备监控,需要实时获取设备数据进行实时灾难监控,此时可以上流计算. 3. 对于手机APP数据实时分析,需要实时了解手

基于阿里云数加平台,袋鼠云助力光伏发电企业进行光伏发电预测

关于固德威 江苏固德威电源科技股份有限公司(以下简称:"固德威")是一家新能源高新技术企业,公司总部位于东方水城苏州高新区,一直专注于太阳能光伏逆变器及其监控产品的研发.生产及销售.固德威产品立足中国,并已大规模销往澳大利亚.德国.英国.法国.荷兰.比利时.丹麦.希腊.土耳其.印度.马来西亚.南非.墨西哥.巴西等三十多个国家,产品被广泛应用于住宅.商用屋顶系统以及光伏电站项目,其稳定的表现和优异的性能得到用户的普遍认可.由于良好的口碑,固德威得到广大客户的认可,公司业务增长迅速. 项目

【数据架构解读】基于阿里云数加StreamCompute和MaxCompute构建的访问日志统计分析

[场景] 用户搭建网站会不断的产生访问日志(Nginx,Apache访问日志).为了从访问日志中挖掘出更多价值,本文主要阐述如果利用阿里云数加从沉睡中的访问日志中获取更有价值的数据,包括用于实时统计和展示网站访问的一系列指标,例如PV,UV,设备,地理,状态码,爬虫,网络流量等指标. [具体分析需求] 用户想根据访问日志来实时统计和展示网站访问重要指标,需要设计到流式计算和离线计算,那么阿里云数加·StreamCompute更好的可以解决日志的实时计算场景,而阿里云数加·MaxCompute则更

持续创新和改进,为用户创造最大价值,阿里云数加MaxCompute获得C-Tech Awards 2016年度“最具技术创新奖”

    由CSDN主办的"C-Tech Awards 2016最具价值大奖评选"活动已经正式结束.从2016年12月22日线上征集至今,活动获得各大技术行业企业的高度关注,现已有来自国内外的近400家企业参与到了本次评选活动中,并提交了全面的产品简介和创新点解析.经过近2个月的公开征集及评审,CSDN从云计算.大数据.人工智能.物联网等多个主流行业角度,根据产品技术贡献度最终评选出了全年度"最具价值TOP50"获奖名单,并从中优选出"最具品牌影响力奖&qu

基于阿里云数加平台的大数据Serverless实践

本文PPT来自班输于10月16日在2016年杭州云栖大会上发表的<基于阿里云数加平台的大数据Serverless实践>. 数加是阿里云大数据的品牌名,其旗下包含一系列的大数据产品及服务,可以为用户提供一站式的数据开发.分析.应用平台.数加提供的服务包括智能语音/图象/视频分析服务.企业级数据仓库服务,地理信息可视化服务,风险预警与管控服务等等.其在基础平台的大数据产品包括数据开发.机器学习.大数据计算.分析型数据库.流计算,在数据应用层的产品包括数据可视化DataV.推荐引擎.人脸识别等等.

袋鼠云 | 基于阿里云数加平台,助力知名物流企业进行大数据应用

关于申通易物流 上海申通易物流有限公司是申通旗下的一家集电子商务.仓储.传统物流为一体的服务型公司.公司应电子商务大发展时代需求而生,拥有自主研发的易物流仓内WMS(仓库管理系统).EDI(数据接口平台)及OMS(订单处理系统)等,为品牌.商家提供电子商务仓配解决方案及专业电子商务第三方精细化仓配一体化服务,协助电商解决电子商务供应链的管理. 申通易物流依托于申通快递在快递行业的品牌影响力和全国领先的快递配送网络,以及在电子商务行业的多年服务经验,致力打造成为一个专业的电子商务服务提供商,为客户

万元大奖邀您参与阿里云数加 MaxCompute最佳实践征文大赛

DT时代,越来越多的企业应用数据步入云端.与传统Hadoop相比,阿里云数加MaxCompute(原名ODPS)向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全. 比如东润环能在3个月内业务全面交付云端,数据处理时间不到原来自建方式的1/3,并确保云上数据安全无忧.墨迹天气日志分析业务迁移到数加MaxCompute后,开发效率提升了超过5倍,存储和计算费用节省了70%,每天处理分析2TB的日志数据,更高效的赋能其个