设计方案

最近在做平台的前端性能分析报告,为了快速实现这个目标,我准备借助现有的系统完成。
本次实践涉及的网易有数产品:Hubble(数据上报)、数据开发及管理有数BI

这些产品是私有化部署的,大家可以看下产品官网的介绍,点击查看官网

设计的方案如下:

  1. 首先设计了数据采集器,数据上报到 Hubble 平台上。
  2. 数据开发及管理 平台上,把 Hubble 的数据做定时加工清洗(T+1),并存到新到表(hive表)中。
  3. 有数BI 上对这个新表数据,做数据自助提取,生成可支持条件查询到分析报告。

展示下实践好的功能:

数据开发及管理 上创建的数据加工的任务:

在这里插入图片描述

数据开发及管理 上新建的表(后续在有数BI上使用),用来存储清洗加工后的 Hubble 数据:

在这里插入图片描述

有数BI 上已经设计好的一张报表-通过手动写sql生成:

在这里插入图片描述

接下来分享下我的实现细节。

采集器和Hubble结合部分,我就不讲了。重点讲解下 数据加工 和 数据报告。

数据加工

hubble 的数据需要经过处理后,才好做近一步的分析。

进入 数据开发及管理离线开发 模块。建好一个任务(这个很简单),然后新建好表(注意,在这里是可以建表的),创建的表按照实际需求来配置。

新建表的位置截图:
在这里插入图片描述

然后进入新建好的任务,把右边 SQL 节点拖到中间即可。 双击这个节点,我们就可以在这里面写 清洗的 sql 脚本了。

截图:

在这里插入图片描述

这里我把写的 sql 脚本贴下:

add
  jar xxx.jar;
CREATE TEMPORARY FUNCTION fastmap AS 'com.netease.da.udf.FastMapSeek';
CREATE TEMPORARY FUNCTION str2map AS 'com.netease.da.udf.Str2MapUDF';
set
  hive.exec.dynamic.partition = true;
set
  hive.exec.dynamic.partition.mode = nonstrict;
set
  hive.exec.max.dynamic.partitions = 50000;
set
  hive.exec.max.dynamic.partitions.pernode = 10000;


insert
  overwrite table ods2.easydata_performance_new partition(day) 
select
fastmap(attributes, 'entryTime') as entrytime, 
cast(fastmap(attributes, 'microSwitch') as boolean ) as microswitch, 
fastmap(attributes, 'performance') as performance, 
fastmap(attributes, 'subproduct') as subproduct, 
fastmap(attributes, 'eventType') as eventtype, 
fastmap(attributes, 'time') as time, 
fastmap(attributes, 'userId') as userid, 
fastmap(attributes, 'deviceId') as deviceid, 
fastmap(attributes, 'eventId') as neweventid, 
fastmap(attributes, 'costtime') as costtime, 
fastmap(attributes, 'sessionId') as sessionid, 
fastmap(attributes, 'sesstionTime') as sessiontime, 
fastmap(attributes, 'sdkVersion') as sdkversion, 
currenturl, 
fastmap(attributes, 'attributes') as attributes, 
fastmap(attributes, 'microSwitch') as microswitchstr,
day   

from open.uda_events_fastmap_xxx  -- 演示假的

where
  day ='${azkaban.flow.1.days.ago}'
  -- 省略......

上面我做了这些工作:首先引入辅助包(平台是支持上传jar包的),然后配置了 hive 的属性,然后从 hubble 表(open.uda_events_fastmap_xxx)里提取需要的数据,按照字段 day 进行分区,插入到我的新表里。

需要注意的是:where 里 day 我是选择了上一天。平台调度是使用 azkaban 的,编辑器里提供了很多调度选项。

保存成功后,检测没问题就提交上线。切换到线上模式,这里提供任务调度的编辑(非常重要)。这样配置后,这个任务每天就定时跑一遍我的sql脚本。

假如发现任务数据有问题,重新发布后,在任务运维中心里创建补数据任务(这个就不说了,非常好用的功能,因为我一开始经常发现数据有问题,需要频繁补)。

加工这块已经完成了。 任务还提供了 AI 节点加工数据,这个是跟有数的机器学习平台打通的,在机器学习平台创建的任务,我们就可以选择,非常方便。有些数据还是需要通过机器学习或者深度学习算法加工处理。 两者打通后使用真的很方便。

如图:

在这里插入图片描述

数据报告

接下来我在 有数BI 上建报告,这个需要先跟数据开发及管理 平台打通。

打通:

直接上图:在这里插入图片描述

这里具体如何配置可以联系官方客服。需要注意:建议连接 impala ,hive 查询太慢了。

然后进入自助取数,选择 sql 取数。然后里面就可以写我们的报表 sql了。

注意:这里是支持变量的,非常重要。我是摸索了好久才发现。 配置全局参数,入口在项目中心-全局参数那边。

一个简单的例子,里面 lefttime(开始时间) 就是我配置的变量。

  select 
    count(neweventid) as lcp_count
  from 
    ods2.easydata_performance_new
  where   
  day between {{{#lefttime(开始时间)}}}
  and {{{#righttime(结束时间)}}}
  and subproduct = {{{#subproduct}}}
  and attributes like '{"custom":true}'
  and neweventid = 'easy_lcp'

运行成功后,就可以把这个临时报告生成可对外分享的报告。这个就不细说了。

建议不要用他提供的可视化创建报告,语法学习成本很高,不好做复杂数据分析(我用的不熟,还是自己写 sql 快速靠谱)。

结尾

本次分享完毕。我一开始使用网易有数感觉还是比较复杂的,但是搞明白后,用起来还是很方便的。建议大家可以去尝试使用。像我这样做开发的同学,也可以借助这个产品做些数据处理和分析工作。点击查看官网

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐