在网易有数上做数据加工和数据分析的实践
最近在做平台的前端性能分析,为了快速实现这个目标,我准备借助现有的系统完成。本次实践涉及的网易有数产品:Hubble(数据上报)、数据开发及管理、有数BI。 这是官网地址:https://sf.163.com/product-bigdata
设计方案
最近在做平台的前端性能分析报告,为了快速实现这个目标,我准备借助现有的系统完成。
本次实践涉及的网易有数产品:Hubble(数据上报)、数据开发及管理、有数BI。
这些产品是私有化部署的,大家可以看下产品官网的介绍,点击查看官网。
设计的方案如下:
- 首先设计了数据采集器,数据上报到 Hubble 平台上。
- 在 数据开发及管理 平台上,把 Hubble 的数据做定时加工清洗(T+1),并存到新到表(hive表)中。
- 在 有数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 快速靠谱)。
结尾
本次分享完毕。我一开始使用网易有数感觉还是比较复杂的,但是搞明白后,用起来还是很方便的。建议大家可以去尝试使用。像我这样做开发的同学,也可以借助这个产品做些数据处理和分析工作。点击查看官网。
更多推荐
所有评论(0)