• 在网易有数上做数据加工和数据分析的实践


    设计方案

    最近在做平台的前端性能分析报告,为了快速实现这个目标,我准备借助现有的系统完成。
    本次实践涉及的网易有数产品: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}'
      -- 省略......
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    上面我做了这些工作:首先引入辅助包(平台是支持上传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'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

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

    结尾

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

  • 相关阅读:
    淘宝/天猫API接口,item_sku - 淘宝商品SKU详细信息查询,淘宝/天猫获取sku详细信息 API 返回值说明
    图解 Spring 解决循环依赖,学不会接着砍!
    EWSD交换机加电过程
    MySQL阅读网上MySQL文章有感的杂记
    shell脚本的编写(输入、输出、变量、数组等的使用规范及实例)
    电容式雨雪传感器
    时间序列的数据分析(二):数据趋势的计算
    leetcode Top100(16)缺失的第一个正数
    代码随想录 Day-45|#139 单词拆分
    深入C++ Vector:解密vector的奥秘与底层模拟实现揭秘
  • 原文地址:https://blog.csdn.net/ihaveahappyfamily/article/details/127250099