axure9数据统计插件_WMDA:大数据技术栈的综合实践

一、概述

WMDA是58自主开发的用户行为分析产品,同时也是一款支持无埋点的数据采集产品,只需要在第一次使用的时候加载一段SDK代码,即可采集全量、实时的PC、M、APP三端以及小程序的用户行为数据。同时,为了满足用户个性化的数据采集需求,在无埋点之上,WMDA又提供了手动埋点的数据采集方式。

WMDA支持的统计、分析功能主要包括:

  • “概览”和“实时”模块用来监控网站的流量情况;
  • “圈选”定义重要的指标;
  • “单图”和“看板”可以统计不同维度、时间下指标的页面访问量和用户量等数据;
  • “漏斗”和“智能路径”用于分析不同指标下的转化率;
  • “留存”可以基于不同维度、分群来考察网站的用户流失率,分析用户的忠诚度;
  • “用户细查”和“用户分群”用于分析所关心条件下的用户群体以及相关的用户行为明细。

以上简单的介绍了WMDA功能模块,接下来侧重于WMDA数据端的架构以及相关大数据技术栈的实践。

二、架构设计

在架构上,WMDA遵循标准的数据分析模型,将整体的架构分成数据采集、数据传输、数据建模/存储、数据统计/分析和数据可视化五个部分。架构如下图所示:

75fb11e53cc359b2b557d64165852e74.png

数据采集:58的业务方覆盖PC、M、APP三端以及小程序。WMDA在数据收集阶段为PC、M、H5、提供SDK完成数据采集,在APP端提供IOS SDK和Android SDK完成数据采集,小程序也有相应的SDK来完成数据采集。

数据传输:主要包括数据收集服务完成前端上报数据的信息补全、脏数据过滤、设备标识等,最后将数据格式化之后落地存储,通过Flume收集到Kafka中,完成实时总线和离线总线的拆分。

数据建模/存储:后端收集上来的数据经过ETL的清洗,将上报的数据格式化之后保存在HDFS上,供后续分析使用。同时Kafka分发一份数据到Spark Streaming中,进行实时数据分析。

数据统计/分析:除了Spark Streaming的实时分析外,落地到HDFS上的数据在Kettle的调度下,由OLAP子系统、Bitmap子系统、分群计算子系统、智能路径计算子系统完成单图、漏斗、留存、分群、智能路径的最终计算。

三、实时分析系统

实时分析系统用于解决用户监控网站、APP实时流量需求,采用SparkStreaming+Druid来实现。实时ETL程序中设置5s为Spark Streaming处理批次间隔,同时将圈选配置信息在实时ETL程序中定义为广播变量,完成指标id的实时匹配,最后将数据通过缓冲kafka摄入到Druid中。

d86260b242dbdd8ea4520fef2049cd46.png

四、离线分析系统

离线分析系统主要完成单图、漏斗、留存、智能路径、分群等数据分析工作,是WMDA的核心组成,也是数据建模/存储,数据统计/分析的具体实践。

基础数仓:使用HDFS作为存储系统,DW+DM+DA是标准的数据中台角度的数仓分层,同时基于基础事件模型(Event)搭建基础数仓。

Hive:完成基础数仓的核心ETL。

Spark+ETL:完成数据圈选规则匹配、脏数据的过滤和标准日志格式化。

离线计算集群:包括OLAP系统、Bitmap计算系统、分群计算系统、智能路径计算系统,主要完成单图、漏斗、留存、分群、智能路径相关计算工作。

Kettle:负责离线计算集群的调度。

TaskServer:任务执行系统,负责执行由Kettle调度的Hive sql任务、MapReduce任务。

数据服务接口层+回溯接口层:供可视化服务获取数据和指标变更回溯任务的触发。

离线计算逻辑复杂,保证系统容错性尤为关键,WMDA离线和实时数据系统都遵循Lambda架构,保证了系统较好的容错特性。

b21f5f2cf2a27537d598ed7a4c6da2fe.png

4.1 基于Kettle的任务调度系统

Kettle是基于java开源的ETL工具集,可以在windows、Linux、Unix上运行,数据抽取高效稳定。通过可视化界面设计ETL流程,无需代码去实现。在Kettle中,有两种基本的脚本文件job和transformation,job是完成整个工作流的控制,transformation完成针对数据的基础转换。在job下的start模块,有一个定时功能,可以每日、每周等方式实现对ETL任务的定时调度。

Kettle体系结构分为Kettle平台、各类插件,其中Kettle平台是整个系统的基础,包括UI、插件管理、元数据管理和数据集成引擎。UI显示Spoon这个核心组件的界面,通过xul实现菜单栏、工具栏的定制化,显示插件界面接口元素。元数据管理引擎kjb、ktr以及一些元数据信息,插件通过该引擎获取基本信息。插件管理引擎主要负责插件的注册。数据集成引擎负责调用插件,并返回相应信息。

Kettle是众多“可供插入的地方”(扩展点)和“可插入的东西”(扩展)共同组成的集合体。在Kettle中不管是以后的扩展还是系统集成的功能,本质上都是插件,管理的方式和运行机制是一致的。系统集成的功能也均是实现了对应的扩展接口,只是插接的方式略有不同。

Kettle的扩展点包括step插件、job entry插件、Database插件、Partioner插件、debugging插件等。

c7a90ba3392b8e8325324f3cd50a4516.png

在Kettle中一个job代表ETL控制流中的一项逻辑任务。Job会按照连线的方式顺序执行,每个job产生一个执行结果,作为其他分支上job的条件。同时数据会从一个entry组件传递到另一个entry组件,并在entry组件中进行相应的处理。

d2bbac43e276da14445c03ca170dddc7.png

在Kettle负责调度各个子计算系统ETL任务的同时,TaskServer负责任务的执行,这样使得任务的调度与任务的执行完全分离,方便任务的管理以及任务执行的灵活性。在Kettle中集成TaskSever相关的组件,需要关注Kettle中的两个接口:JobEntryInterface和JobEntryDialogInterface。JobEntryInterface是Job Entry插件的主要实现接口,主要的功能如下:

  • 保存Job Entry设置

实现类使用私有变量保存设置的参数,通过get、set方法获取和设置。Dialog实现类会通过这些方法设置界面上的参数。同时,需要提供一个深度拷贝的方法,在保存的参数被修改时进行调用。

  • 序列化插件
  • 输出信息提供

一个Job Entry支持三种类型的输出:true、false和无条件。这三种情况不是所有的Job Entry都会同时支持,例如dummy job entry仅支持true和false。通过JobEntryInterface接口的evaluates()方法可以设置一个Job Entry的输出结果是否支持true和false,isUnconditional()方法则是设置是否支持无条件执行。

  • 执行任务

JobEntryDialogInterface接口负责构建和打开参数设置对话框。

4.2 基于TaskServer的任务执行系统

TaskServer是一个高可用的、可扩展性强的分布式任务执行系统。整体架构采用Master-Slave的设计模式,支持横向扩展,兼备资源隔离、服务容灾等功能,为线上任务的运行提供可靠的执行环境。WMDA各个子计算系统中的Hive sql和MapReduce都在TaskServer上执行,极大的确保WMDA离线任务的稳定性。

TaskServer主要包括三个部分:JobTracker集群、TaskTracker集群和Zookeeper集群。

  • JobTracker:负责任务接受、资源计算和任务分配。
  • TaskTracker:负责任务执行和保持心跳。
  • TaskQueue:任务队列。
  • Zookeeper:协同调度。

在JobTracker中主要是资源的计算和任务分发,一个任务被提交之后会由JobTracker中的任务分发器(Dispatcher)发给对应的事件处理器(EventHadler),事件处理器完成之后会将任务相关的元数据信息写入到Zookeeper中。TaskTracker监听并拉取Zookeeper中新增的任务信息,抽象成TaskRunner放到线程池中运行,同时TaskTracker中任务调度器(TaskScheduler)跟JobTracker保持心跳用来更新机器信息。如果JobTracker监听到某一个TaskTracker宕机会重新进行任务分配,由其他的TaskTracker来执行。资源的隔离方面,TaskTracker中采用硬性资源划分机制和分时资源扩容机制。硬性资源是指资源被某种方式划分之后,就只会接受这一类任务。在TaskServer中就为WMDA的任务划分出来了WMDA Tier,只服务于WMDA提交的任务。分时资源扩容是指可以按照不同时间段来分担其他Tier的任务。比如,在9点到10点是WMDA任务量的高峰,划分的WMDA Tier不足以满足当前任务所需要的计算资源,此时利用分时资源扩容机制从Share Tier中扩容一些Tier来满足当前任务对计算资源的需求。

1ec0157f204ce67475aa2adada587afa.png

4.3 Druid在OLAP计算系统的实践

WMDA中主要涉及OLAP场景模块有概览、单图、即席圈选7日数据预览、热图、维度阅览以及用户行为统计。OLAP引擎在选择上尝试过kylin和Druid。Kylin采用预计算,因为数据已经提前计算好,所以在前端查询展示的时候相对较快。但是,因为WMDA支持多个维度任意组合,所以采用Kylin需要根据不同组合情况进行计算,这就使得随着维度的增加,计算量增大。Druid则需要根据查询条件即时计算,查询相比Kylin慢,但是优化后基本在1秒以内。WMDA最终基于Druid实现OLAP模块,其包括的角色有:

  • Real-Time Nodes:负责实时数据处理;
  • Historical Nodes:负责加载非实时窗口内满足加载规则的所有历史数据Segment;
  • Coordinator Nodes:负责Druid集群中Segment的管理与发布,包括加载新Segment,丢弃不符合规则的Segment,管理Segment副本以及Segment负载均衡;
  • Broker Nodes:整个集群的查询入口,提供查询路由和结果组装;
  • Indexing Service:负责“生产”Segment的高可用、分布式、Master/Slave架构服务。
d2577dc844d9e0feccc3e113c79afb26.png

Druid将数据的索引节点划分为HistoricalNodes和Real-Time Nodes,切割了历史数据的加载与实时流数据处理,因为二者都需要占用大量内存与CPU;另一方面,划分Coordinator Nodes和Broker Nodes,切割了查询需求与数据如何在集群内分布的需求,确保用户的查询请求不会影响数据在集群内的分布情况。

在时间窗口内的数据会停留在Real-Time Nodes内存中,而时间窗口外的数据会组织成Segment存储到Deep Storage中;批量数据经过Indexing Service也会被组织成Segment存储到Deep Storage中,WMDA使用HDFS作为Druid的Deep Storage,同时Segment的元信息都会被注册到元信息库中,Coordinator Nodes会定期(默认为1分钟)去同步元信息库,感知新生成的Segment,并通知在线的Historical Node去加载Segment,Zookeeper也会更新整个集群内部数据分布拓扑图。

当用户需要查询信息时,会将请求提交给Broker Nodes,BrokerNodes会请求Zookeeper获取集群内数据分布拓扑图,从而知晓请求应该发给哪些Historical Nodes以及Real-Time Nodes,汇总各节点的返回数据并将最终结果返回给用户。

4.4 Bitmap计算系统在WMDA中的实践

Bitmap是漏斗、留存和分群数据分析中,用来较快计算满足某些条件下用户数量的数据结构。Bitmap计算系统分为Bitmap计算模块和Bitmap检索模块,Bitmap计算模块通过MapReduce从基础日志中计算出指标Bitmap、维度Bitmap和分群Bitmap,并提交至WTable中。Bitmap检索模块则是通过BitMapEngine查询出符合查询条件的用户包。

2c749260f2d88604c20f5993cb347eb3.png

五、总结

本文主要阐述了WMDA数据端的架构设计,主要从数据采集、数据计算、数据应用、调度系统等方面逐一进行了介绍。当然,大数据处理相关的架构以及技术选型并不是本文介绍的这一个方向,好的架构应该是根据具体的业务来设计的,而且是随着业务的拓展不断演变的。


欢迎大家关注“58架构师”微信公众号,定期分享云计算、AI、区块链、大数据、搜索、推荐、存储、中间件、移动、前端、运维等方面的前沿技术和实践经验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openfoam安装中出现allmake error_如何更新OpenFOAM的版本?

这是协作翻译的第四章,翻译完感觉挺有意思的,分享给大家一起看看。4.更新OpenFOAM版本4.1 版本管理OpenFOAM以两种不同的方式分发。一种方式是使用Git仓库下载的仓库版本。仓库版本的版本号由附加的x标记,例如 OpenFOAM2.1.x。该版本会经常更…

相同布局在不同手机上显示不同_不懂响应式,不同尺寸屏幕下的页面很难达到最佳效果...

让用户在不同设备和尺寸的屏幕下看的页面显示效果更佳,屏幕空间利用更高,操作体验更统一,交互方式更符合习惯。本文主要围绕什么是响应式,如何搭建响应系统,响应式网站解析 三个部分进行阐述,在项目中提前定…

markdown 流程图_测试了12款Markdown编辑器,推荐一个最好用的!

有很多喜欢写博客的小伙伴问我,这个代码笔记的格式怎么弄的简洁又好看,虽然csdn里面有Markdown的书写模式,但是我还是想推荐一款比较好用的写笔记的编辑器 - Typora。相信很多小伙伴都在使用吧,这个一直是我最喜欢的 markdown 编辑…

mysql多行合并成一行_数据文件合并与拆分

在数据处理业务中,经常要把文件结构相同或近似相同的数据文件合并成一个文件,或者将一个比较大的数据文件拆分成小的数据文件。本文将介绍文本文件和 Excel 文件合并及拆分会遇到的几种情况,并提供用 esProc SPL 编写的代码示例。esProc 是专…

suse linux增加新磁盘分区,Virtualbox中Linux添加新磁盘并创建分区

引言:我们常常在使用系统的时候突然发现,哎呦~~~我们的磁盘空间不够用啦!我遇到常见的就是数据库数据暴增,预留的空间没有啦,只好新添加磁盘,在VB虚拟机上就可以实现,往往苦于没有图文并茂的好资…

arcgis字段计算器无法赋值_Arcgis空间连接工具的妙用

​Arcgis功能真的无比强大,读书时一般只会用到一些常见的,工作后挖掘了很多新功能,数据处理效率大幅提升,个人觉得arcgis是最强大最好用的gis软件!本节给大家分享下空间连接功能的两个妙用。空间连接功能很多giser应该…

SpringMVC Mybatis Shiro RestTemplate的实现客户端无状态验证及访问控制【转】

2019独角兽企业重金招聘Python工程师标准>>> A.首先需要搭建SpringMVCShiro环境 a1.pom.xml配置 spring: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId><version>4.1.0.RELEAS…

sql服务器默认密码_搭建一个DNS服务器,轻松实现域名解析内容分发,访问速度提高N倍...

DNS服务器&#xff0c;Domain Name Server&#xff0c;域名解析服务器&#xff0c;互联网上相互通信使用的是IP&#xff0c;但是IP是又长又臭又难记&#xff0c;所以创造了域名来解决IP难写难记的问题&#xff0c;记一个g.cn比203.208.50.127强过不知多少倍了。有了域名&#x…

linux .net 控制台应用程序,VisualStudioCode创建的asp.net core控制台程序部署到linux

1、asp.net core控制台程序static void Main(string[] args){int times10;while(times>0){Console.WriteLine("Hello World!");times--;Thread.Sleep(1000);}}2、发布发布前&#xff0c;修改test2.csproj文件(项目名称为test2)Exenetcoreapp2.1centos.7-x64主要添…

linux系统怎样写单片机程序,单片机知识是Linux驱动开发的基础之一以及如何学单片机...

这是arm裸机1期加强版第1课第2、3节课程的wiki文字版。为什么没前途也要学习单片机&#xff1f;因为它是个很好的入口。学习单片机可以让我们抛开复杂的软件结构&#xff0c;先掌握硬件操作&#xff0c;如&#xff1a;看原理图、芯片手册、写程序操作寄存器等。在上一节视频里&…

bat 批处理 常用命令和乱码问题

为什么80%的码农都做不了架构师&#xff1f;>>> rem echo off ECHO OFF XCOPY E:\test.bat D:\ IF ERRORLEVEL 1 ECHO 文件拷贝Failure IF ERRORLEVEL 0 ECHO 文件拷贝Success :start set /p first"1记事本,2远程:" if %first% LEQ 2 (IF %first% …

SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API加载

作者&#xff1a;yx 文章目录 一、发布服务二、代码加载三、结果展示 一、发布服务 SuperMap iServer支持将地图发布为ArcGIS REST地图服务&#xff0c;您可以在发布服务时直接勾选ArcGIS REST地图服务&#xff0c;如下图所示&#xff1a; 也可以在已发布的地图服务中&#x…

new file会创建文件吗_Rust 文件系统处理之文件读写 Rust 实践指南

Rust 中&#xff0c;文件读写处理简单而高效。代码也很紧凑&#xff0c;容易阅读。我们从读取文件的字符串行、避免读取写入同一文件、使用内存映射随机访问文件这三个文件处理中的典型案例来了解一下。文件处理场景大家都很熟悉&#xff0c;因此闲言少叙&#xff0c;直接看代码…

【Maven学习笔记(二)】Maven的安装与配置

为什么80%的码农都做不了架构师&#xff1f;>>> 1、默认本地仓库路径 C:\Users\97449\.m2\repository 2、修改本地仓库路径 打开D:\apache-maven\conf\settings.xml <?xml version"1.0" encoding"UTF-8"?><!-- Licensed to the Apa…

npm 全局安装vuecli报错_cnn explainer本地使用--被npm坑惨

最近在知乎上面看到&#xff0c;看到一个cnn解释器&#xff0c;把每个步揍都很清楚的展示了出来&#xff0c;我想自己搞来玩玩。第一次使用npm&#xff0c;很多地方不会&#xff0c;第一步&#xff1a;先在网页上下载下来cnn_explainer&#xff0c;然后解压在没有中文路径的文件…

Python程序从给定的N个数字中找到最大倍数

Here, we will be framing code for finding the maximum multiple of a number x from a given set of a number (set of 5 numbers in this program). 在这里&#xff0c;我们将使用成帧代码&#xff0c; 从给定的一组数字(此程序中的5个数字组成的集合)中找到x的最大倍数 。…

openmpi安装_Intel Parallel Studio XE 2019安装设置

1.Intel Parallel Studio XE 2019简介Intel Parallel Studio XE 是Intel在单独一款软件开发套件中整合了英特尔公司业界领先的 C/C 和 Fortran 编译器、性能和MPI并行库、错误检查、代码健壮和性能分析的工具&#xff0c;有助于大幅提升应用程序性能&#xff0c;同时提高代码质…

[Android] 开源View组件(一)

Material Design系列&#xff0c;自定义Behavior实现Android知乎首页 仿今日头条最强顶部导航指示器&#xff0c;支持6种模式 MagicIndicator系列之一 —— 使用MagicIndicator打造千变万化的ViewPager指示器 Android 优雅的为RecyclerView添加HeaderView和FooterView Android …

sql server修改字段编码格式_关于MySQL如何修改character_set_client的编码问题

问题引入&#xff1a;我们经常会遇到一些向MySQL数据库中插入中文&#xff0c;但是select出来的时候&#xff0c;却发现是乱码的情况。如我们向表a出入这样一段记录&#xff1a;iinsert into a values(‘你好helloworld你好’,’helloworld’);可能当你访问它的时候&#xff0c…

通用apdu指令_8086微处理器中的通用指令格式

通用apdu指令Introduction: 介绍&#xff1a; In this article, we are going to discuss about the 6 general formats of instructions. 在本文中&#xff0c;我们将讨论6种通用指令格式。 One byte instruction: 一字节指令 &#xff1a; This is only one byte long an…