客户端埋点实时OLAP指标计算方案
背景
产品经理想要实时查询一些指标数据,在新版本的APP上线之后,我们APP的一些质量指标,比如课堂连接掉线率,课堂内崩溃率,APP崩溃率等指标,以此来看APP升级之后上课的体验是否有所提升,上课质量是否有所提高,为下一步的APP升级做准备。
客户端埋点
1.0版本设计
流程
按照需求打点,如果想知道某一指标如进入教室成功率,点击进入教室这一动作上报数据,进入教室结果上报数据,同时上报课程id,用户id等属性。
缺点
埋点规范全靠Excel,产品经理编写Excel埋点文档,开发按照文档埋点,测试按照文档测试。出现如下几类问题,
- 产品经理埋点文档编写失误,漏埋点,埋点关键字错误,上报字段值不明确等;
- 埋点开发者打错上报关键字,如device打错成devcie,上报值使用全角输入法,时间戳未按照规范上报成毫秒。
- 测试人员,不重视测试环节,只是粗略看下埋点是否存在,并未进行埋点质量的测试。
- 大数据开发进行数据清洗落地时,遇到未按照json格式上报的脏数据,由于上报值不规范,很多数据增加了清洗的难度和不确定性。
优点
整个流程跑起来了,有些计算指标具有参考意义。
2.0版本设计
规范埋点上报
经过调研,我们2.0采用Protobuf数据格式上报,并封装成统一埋点SDK,一方面可以定义枚举值,解决上报值和关键字不规范的问题。上报的信息进行归类,简洁明了。 我们定义了三种数据结构:
- 基础信息
message BaseInfo {
//系统上报时间戳-毫秒(由银河服务端生成)
int64 sysTime = 1;
//客户端上报时间戳-毫秒
int64 time = 2;
//会话Id,一段会话的唯一标识(客户端每次启动APP到下一次启动APP之间生成一个会话id)
//生成规则:16位随机数+13位时间戳+3位(端表示pc:001 android:002 ios:003 web:004 server:005)
string sessionId = 3;
//设备唯一标识
string uuid = 4;
//公司标识
Company company = 5;
//sdk版本
SDKVersion sdkVersion = 6;
//用户ID
string userId = 7;
//用户类型
UserType userType = 8;
//日志类型
LogType type = 9;
string eventId = 10;//事件ID (产品经理提供)
NetType netType = 11;//网络类型
OperatorType operatorType = 12;//网络运营商类型
int32 requestCnt = 13;//接口请求次数,默认为1
string business = 14;//业务类型 (产品经理提供)
//来源:安卓、iOS、pc、web、server
Os os = 15;
string channel = 16; // 渠道来源(针对前端的落地页url编码,H5商城的来源渠道)
//APP版本号
string appVersion = 17;
//APP类型:yimi/bubugao/yuxuepai
string appType = 18;
//设备型号,标示手机品牌+型号
string deviceInfo = 19;
//设备操作系统版本号
string osVersion = 20;
AppAction appAction = 21;
//信息,崩溃信息
string info = 22;
int64 stayTime = 23; //页面停留时间
}
- 教室内信息
message LiveInfo {
//课程id
string lessonId = 1;
//课程类型
LessonType lessonType = 2;
//服务器IP
string serverIp = 3;
//用户ip
string userIp = 4;
}
- 其他信息
message ExtraInfo {
//额外字段key
string key = 1;
//额外字段value
string value = 2;
}
埋点元数据界面
基于1.0的一些缺点,我们进行了改造,开发了一个埋点元数据录入的界面,产品经理只需要在上面录入想要的埋点,规范上报值。开发者和测试者都可以在这个界面查看埋点的信息。
埋点测试流程规范
重新规划了埋点的测试流程,粗略流程如下
后端架构设计
Apache CarbonData是一种新的融合存储解决方案,利用先进的列式存储,索引,压缩和编码技术提高计算效率,从而加快查询速度。其与Spark紧密结合,而我们公司的技术栈也包含Spark,经过测试查询性能确实优秀,遂决定使用此组件。
社区BUG
在测试的过程中,由于想使用新版的Spark,所以使用了Spark2.3+CarbonData1.5的组合,但是在入库的时候,发现了一个bug,Spark Streaming无法实时写入表,社区对此bug至今也没有解决。所以只能决定使用Spark 2.2+CarbonData1.5。
实时入库
CarbonData表结构设计
CREATE TABLE IF NOT EXISTS carbon.dw_flow_disc_analyze_daily (
pt string,
lesson_id string,
app_version string,
user_type string,
app_device_type string,
server_ip string,
event_type string,
err_msg string,
msg_type string,
galaxy_type string,
sys_time string,
app_type string,
lesson_type string,
result string,
crash_type string,
crash_msg string,
down_load_result string
)
STORED AS carbondata
TBLPROPERTIES (
'DICTIONARY_INCLUDE'='pt,lesson_id,server_ip,app_version,app_device_type,user_type,event_type,err_msg,msg_type,galaxy_type,app_type,lesson_type,result,crash_type,down_load_result,crash_msg',
'BAD_RECORD_PATH'='hdfs://bd-tst/apps/carbon/badrecords',
'INVERTED_INDEX' = 'lesson_id',
'sort_columns'='pt,lesson_id',
'SORT_SCOPE'='GLOBAL_SORT',
'RANGE_COLUMN'='pt',
'streaming'='true');
参照CarbonData的官方文档和例子,开发Spark Streaming程序,消费日志数据实时入库。
OLAP
启动Spark ThriftServer
nohup /opt/spark/spark-2.2.3/bin/spark-submit --master spark://bd-prod-master01:7077,bd-prod-master02:7077 --conf spark.sql.hive.thriftServer.singleSession=true --deploy-mode client --num-executors 4 --executor-memory 2g --executor-cores 2 --total-executor-cores 8 --class org.apache.carbondata.spark.thriftserver.CarbonThriftServer /opt/spark/spark-2.2.3/carbonlib/apache-carbondata-1.5.2-bin-spark2.2.1-hadoop2.7.2.jar hdfs://bd-prod/apps/carbon/warehouse >/dev/null 2>&1 &
JDBC连接查询
明细数据入库之后,使用jdbc连接Spark ThriftServer,对指标进行实时聚合。
总结
优点
- 实时入库,新版本APP上线后可以立刻看到买点数据;
- SQL灵活性高,可进行JOIN,条件可随意定制;
- 查询速度快,一个月之内的报表数据可在30s之内返回。
缺点
- 耗费资源比较严重,需要创建索引,需要的spark内存比较大,资源充足可忽略;
- 与Spark强耦合,不能使用Flink入库;
- 社区不活跃。
客户端埋点实时OLAP指标计算方案的更多相关文章
- 腾讯云EMR大数据实时OLAP分析案例解析
OLAP(On-Line Analytical Processing),是数据仓库系统的主要应用形式,帮助分析人员多角度分析数据,挖掘数据价值.本文基于QQ音乐海量大数据实时分析场景,通过QQ音乐与腾 ...
- 唯品会海量实时OLAP分析技术升级之路
本文转载自公众号 DBAplus社群 , 作者:谢麟炯 谢麟炯,唯品会大数据平台高级技术架构经理,主要负责大数据自助多维分析平台,离线数据开发平台及分析引擎团队的开发和管理工作,加入唯品会以来还曾负责 ...
- ElasticSearch做实时OLAP框架~实时搜索、统计和OLAP需求,甚至可以作为NOSQL来使用(转)
使用ElasticSearch作为大数据平台的实时OLAP框架 – lxw的大数据田地 http://lxw1234.com/archives/2015/12/588.htm 一直想找一个用于大数据平 ...
- SSM项目使用GoEasy 获取客户端上下线实时状态变化及在线客户列表
一.背景 上篇SSM项目使用GoEasy 实现web消息推送服务是GoEasy的一个用途,今天我们来看GoEasy的第二个用途:订阅客户端上下线实时状态变化.获取当前在线客户数量和在线客户列表.截止我 ...
- zipline风险指标计算 (empyrical模块)
概述 量化中,我们经常会遇到各种量化指标的计算,对于zipline来说,也会对这部分计算进行处理,由于指标计算的通用性比较强,所以,zipline单独封装了 empyrical 这个模块,可以处理类似 ...
- druid.io 海量实时OLAP数据仓库 (翻译+总结) (1)
介绍 我是NDPmedia公司的大数据OLAP的资深高级工程师, 专注于OLAP领域, 现将一个成熟的可靠的高性能的海量实时OLAP数据仓库介绍给大家: druid.io NDPmedia在2014年 ...
- druid.io 海量实时OLAP数据仓库 (翻译+总结) (1)——分析框架如hive或者redshift(MPPDB)、ES等
介绍 我是NDPmedia公司的大数据OLAP的资深高级工程师, 专注于OLAP领域, 现将一个成熟的可靠的高性能的海量实时OLAP数据仓库介绍给大家: druid.io NDPmedia在2014年 ...
- Storm简介——实时流式计算介绍
概念 实时流式计算: 大数据环境下,流式数据将作为一种新型的数据类型,这种数据具有连续性.无限性和瞬时性.是实时数据处理所面向的数据类型,对这种流式数据的实时计算就是实时流式计算. 特征 实时流式计算 ...
- 动作手游实时PVP帧同步方案(客户端)
1.概述 1.1.基于UDP的帧同步方案 在技术选型方面,之所以选择帧同步方案,在Kevin的一篇介绍PVP帧同步后台实现的文章中已经做了详细叙述,这里简单摘要如下: 高一致性.如果每一帧的输入都同步 ...
随机推荐
- spark入门(四)日志配置
1 背景 在测试spark计算时,将作业提交到yarn(模式–master yarn-cluster)上,想查看print到控制台这是很难的,因为作业是提交到yarn的集群上,所以,去yarn集群上看 ...
- Codeforces 781A:Andryusha and Colored Balloons(DFS染色)
http://codeforces.com/contest/782/problem/C 题意:给一棵树染最少的颜色,使得相邻距离为2的点都是不同的颜色,问最少是多少种颜色并输出每个点的颜色. 思路:比 ...
- curl请求的get.post.put.delete对接其他系统接口方法
class HttpCurl{ //控客云平台的appid private $appId = xxxxxx; //控客云平台的appkey private $appKey = 'xxxxxxxxxxx ...
- java LineNumberReader的使用
前段时间需要读报表打印,需求是可以从第N行读到第N行,发现百度出来的LineNumberReader方法都不怎么理想 然后就找到一篇和众百度里脱颖而出的好文章,所以分享之: 从类 的命名来看,貌似 ...
- CentOS中对MySql的root用户重置密码
由于一般的修改ini文件来完成无密码登录数据库容易造成较大风险,所以使用修改启动服务参数的方式来更新user表,达到无密码登陆的目的. 1.关闭系统下运行的mysql服务 (1)杀掉进程号达到关闭目的 ...
- Java线程池源码及原理
目录 1 说明 1.1类继承图 2 线程池的状态 3 源码分析 3.1完整的线程池构造方法 3.2 ctl 3.3 任务的执行 3.3.1 execute(Runnable command) 3.3. ...
- JAVA面试题 启动线程是start()还是run()?为什么?
面试官:请问启动线程是start()还是run()方法,能谈谈吗? 应聘者:start()方法 当用start()开始一个线程后,线程就进入就绪状态,使线程所代表的虚拟处理机处于可运行状态,这意味着它 ...
- 网络下载器 EagleGet v2.0.4.60 Full 绿色便携版
下载地址:点我 基本介绍 EagleGet(亦称 EG Download Accelerator)是一个用于 Windows 系统的下载管理器,它是免费软件.EagleGet 使用多线程技术,支持从Y ...
- 开源FTP/SFTP客户端 FileZilla v3.31.0 绿色便携版
下载地址:点我 基本介绍 FileZilla是一种快速.可信赖的FTP客户端以及服务器端开放源代码程式,具有多种特色.直觉的接口.可控性.有条理的界面和管理多站点的简化方式使得Filezilla客户端 ...
- PKIX:unable to find valid certification path to requested target
1.Communications link failure,The last packet successfully received from the server was * **millisec ...