flume+hdfs+spark sql+Echarts实现用户行为分析(5分钟频次)

背景

良品数据分析系统是为了满足运营实时监控用户浏览行为、点击行为、以及观测用户端日活的一套数据分析系统。这是他的前期的功能定位,后期会扩展他的监控范围,比如自营外卖的用户加购行为,用户的下单行为,用户的支付行为,以及整个外卖系统销售实时统计监控。随着系统的稳定后期可以承担商品精准推荐,精准营销,以及良品app的用户行为分析以及配套的各种营销手段,让良品的多套C端系统从此有了自己的对外了解用户,感知用户,发现用户,吸引用户的大脑和眼睛。

数据采集系统:是良品外卖团队经过2个月的技术沉淀,孵化出来的数据分析系统。从2018年12月底至2019年2月25日,外卖团队从对大数据一无所知,到后来初步实现,经历了学习,探索,研究,搭建几个重要的阶段,每一个阶段虽然走的很艰难,但总有阶段性的成果出现,从而不断激励我们一直向前。经过多套方案的预演最终确定了一套比较适合良品业务发展的数据分析系统。虽然良品内部已经有BI团队做大数据统计的部分,但是他们更多的是做离线非实时的销售报表的提供层面上,并不能提供实时的分析服务。而我们这套数据分析系统,与此最大的差别就是实时的计算结果展示,让运营能够根据监控到的结果及时做出反映,从而提升营运效率,及时抓住稍纵即逝的营销时机,让营销效果最大化。


该系统分为多个模块组成,数据采集、数据存储、数据清洗、分析计算、结果数据存储、数据可视化。

接下来我们就一个一个模块来介绍:

一、架构

第一、数据采集、存储

数据采集我们用了take-out-daq服务来做用户浏览行为的日志记录,需要前端配合做用户浏览行为和点击行为的动作监控,并且把用户的每一个动作都以固定的接口字段,上送到daq这个服务中。daq的日志按照一定时间间隔来不断归档数据到一个被flume监控的文件夹里。我们把这个文件夹定义为/usr/logs/flume。该文件夹下如果有新文件产生,就会被flume监控到,并且会把该文件数据实时收集到按照一定的日期格式沉淀到hdfs中。

这一个过程中,我们牵涉到两块功能,第一是daq的日志归档功能,使用的logback.xml特性。另外一个就是flume,是apache开源的一套顶级项目,是专门做日志收集稳定的开源框架。

我们这里选择flume的日志收集策略是两个agent相互配合,第一个agent负责监控flume的日志归档目录/usr/logs/flume,并把数据包装成为一个远程的事件avrosink。第二个agent负责监控第一个远程的avrosink传递过来的事件,并且用avrosource来接受此事件,并且通过memroychannel来整合,最后通过hdfsSink下沉到hdfs中。(关于flume的知识可参看:flume.apache.org官网)

对应的flume部署框架图:


第二、数据清洗、计算分析

这里选择的是spark sql作为分布式计算框架,资源调度使用的yarn,这些服务都是跑在HDFS之上的。真正的计算逻辑是我们使用spark sql的语法来编写的一套计算组件,以jar包的形式spark-submit到运行在yarn之上的spark服务上的。运算时,会从hdfs中获取响应的数据,然后把计算结果沉淀到关系性数据库中。



第三步:数据可视化

数据可视化顾名思义就是把大数据计算完的结果,结合业务关注数据维度,以图表的形式直观地展示数据的一种方式,也是大数据分析的最后一个步骤。目前流行的可视化框架有很多,有阿里开源的dataV也有百度开源的Echarts,我们目前使用的Echarts。它的学习和开发成本很低,具体文档可以参看https://echarts.baidu.com/

数据可视化的功能放在了take-out-control中来实现,目前使用Echarts来做数据图表展示,使用heatmap来做页面点击热力图。

服务环境部署

服务器列表及部署目录

测试环境hdfs浏览目录:http://10.101.x.x:50070/

服务关系ip部署目录服务名所属业务影响环境对应配置文件及目录

test-flume-存储端10.101.x.x/usr/apache-flume-1.6.0-cdh5.7.0-bin

启动脚本:

nohup ./flume-ng agent --conf $FLUME_HOME/conf --conf-file $FLUME_HOME/conf/test-avro-memory-hdfs.conf --name test-avro-memory-hdfs -Dflume.root.logger=INFO,console &

flume日志接受并写向3的hdfs,开放端口是44444测试环境/usr/apache-flume-1.6.0-cdh5.7.0-bin/conf/test-avro-memory-hdfs.conf

10.101.x.x/usr/hadoop-2.6.0-cdh5.7.0hadoop、yarn数据存储测试环境/usr/hadoop-2.6.0-cdh5.7.0/etc/hadoop/spark-env.sh

10.101.x.x/usr/spark-2.1.1-bin-hadoop2.6spark数据计算测试环境/usr/spark-2.1.1-bin-hadoop2.6/conf/

test-flume-收集端10.101.x.x2/usr/local/apache-flume-1.6.0-cdh5.7.0-bin

启动脚本:

nohup ./flume-ng agent --conf $FLUME_HOME/conf --conf-file $FLUME_HOME/conf/spooldir-memory-avro.conf --name spooldir-memory-avro-Dflume.root.logger=INFO,console &

flume日志收集并写向129的flume,目标端口44444测试环境/usr/local/apache-flume-1.6.0-cdh5.7.0-bin/conf/spooldir-memory-avro.conf

prod-flume-收集端172.16.x.x/home/app/apache-flume-1.6.0-cdh5.7.0-bin

启动脚本:

nohup ./flume-ng agent --conf $FLUME_HOME/conf --conf-file $FLUME_HOME/conf/spooldir-memory-avro.conf --name spooldir-memory-avro-Dflume.root.logger=INFO,console &

环境变量:/home/app/base_profile (里面指定了jdk的安装目录和flume的安装目录)

注意:

该flume监控的目录是/usr/local/daq.xxx.com/logs/flumes/,这个目录是利用logback的归档功能,自动把日志归集到这个目录。一旦文件被归集进来,此时flume就会立刻监控到,并且立即传输文件里的数据到目标flume的55555端口,当flume监控的文件数据成功传输到55555端口并下沉到hdfs时,会自动清理掉/usr/local/daq.xxx.com/logs/flumes/目录下的.COMPLETED后缀的文件

flume日志收集并写向10.16.x.x的flume,目标端口55555生产环境/home/app/apache-flume-1.6.0-cdh5.7.0-bin/conf/spooldir-memory-avro.conf

prod-flume-存储端10.16.x.x(大数据部门hdfs集群主节点)/home/hadoop/apache-flume-1.6.0-cdh5.7.0-bin

启动脚本:

nohup ./flume-ng agent --conf $FLUME_HOME/conf --conf-file $FLUME_HOME/conf/prod-avro-memory-hdfs.conf --name prod-avro-memory-hdfs -Dflume.root.logger=INFO,console &

启动成功检查:

用ps -ef|grep flume,并且观察/usr/apache-flume-1.6.0-cdh5.7.0-bin/bin下的nohup.out的日志文件即可。

flume日志接受并写向(10.16.6.x至10.16.6.x7)的hdfs集群,开放端口是55555生产环境/home/hadoop/apache-flume-1.6.0-cdh5.7.0-bin/conf/prod-avro-memory-hdfs.conf

数据清洗服务10.16.x.x2(使用jdk1.8环境)计算服务的实现程序,这是jar包是我们开发人员编写,编译、打包上传到上面去的

/home/hadoop/waimai/selfjars/execData-1.1-SNAPSHOT.jar

spark on yarn(集群模式)从(10.16.x.x至10.16.x.x7)对应的hdfs数据仓库中获取埋点数据,并作计算,然后将计算结果插入到外卖生产库的结果展示表里生产环境1、/home/hadoop/waimai/selfshells/sparkDataAutoOption.sh计算服务启动脚本,无参则计算当前小时的数据。

2、/home/hadoop/waimai/selfshells/sparkDataAutoOption.sh 19-03-20 ,如果传递参数为19-03-20,那么他就会计算19年3月20日全天的数据

二、服务

2.1 服务器:

10.101.3.x

生产HDFS集群:

10.16.x.x Bingo-0x-01 hamaster (yarn master)

10.16.x.x1 Bingo-0x-02 hanode1 (ha2ndnamenode )

10.16.x.x2 Bingo-0x-03 hanode2 

10.16.x.x3 Bingo-0x-04 hanode3 

10.16.x.x4 Bingo-0x-05 hanode4

10.16.x.x5 Bingo-0x-06 hanode5 

10.16.x.x6 Bingo-0x-07 hanode6 

10.16.x.x7 Bingo-0x-08 hanode7

10.16.x.x8 Bingo-0x-09 hanode8

2.2 执行数据清洗方法

1.按时刻进行执行:在dev环境任意目录执行命令 sparkDataAutoOption.sh 清洗当前时刻的数据

2.自定义日期进行清洗,在dev任意目录执行命令 sparkDataAutoOption.sh 19-03-07 (日期格式:XX(年)-XX(月)-XX(日)) 定点清洗

2.4 脚本环境:

测试环境/开发环境:脚本目录:/usr/local/shell/bin/sparkDataAutoOption_test.sh :测试执行脚本

测试环境/开发环境:项目路径:/usr/bigdata/spark/test/execData-1.1-SNAPSHOT.jar

三、注意

3.1 生产环境

生产环境hdfs集群:hdfs://hamaster:9000该地址仅供程序之间数据传输使用,不能直接访问

hdfs数据查看地址:http://bingo-0x-x:50070该地址是供开发者,便捷的查看目前hdfs中的数据存储情况和数据存储效果,以及下载数据使用。效果见下图


采集数据存储目录:/user/xcx/prod

3.2自动化

使用阿里开源的dataX来管理我们数据清洗脚本的任务调度,决定开启或关闭,以及开启的频率,以及与其他清洗任务的关联关系。

我们清洗pv数据的任务目前每小时执行一次。

这里注意用spark_submit任务时需要制定num和queue

#####begin#####

DAY=$1

echo "=======执行spark -submit 清洗${DAY}的用户点击热门商品指标数据======="

spark-submit --class com.xxx.HotClickProdAnalysis --master yarn --driver-memory 2g --executor-memory 2g --executor-cores 1 --queue flinkqueue /home/hadoop/waimai/selfjars/execData-1.1-SNAPSHOT.jar ${DAY}

echo "=======执行用户点击热门商品数据清洗完成========"

#####end######

如果想查看任务执行的过程日志,有两种方式:第一、可以点击"运行日志"按钮即可查看。第二、可以在yarn集群上查看任务执行的情况,地址:http://hamaster:8088/cluster

如图:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • 面对以上的问题,我们如何将这些日志移动到hdfs集群上尼???? 第一种方案:使用shell脚本cp 文件,然后通...
    机灵鬼鬼阅读 1,376评论 1 1
  • 博客原文 翻译作品,水平有限,如有错误,烦请留言指正。原文请见 官网英文文档 引言 概述 Apache Flume...
    rabbitGYK阅读 11,445评论 13 34
  • 介绍 概述 Apache Flume是为有效收集聚合和移动大量来自不同源到中心数据存储而设计的可分布,可靠的,可用...
    ximengchj阅读 3,513评论 0 13
  • 介绍 概述 Apache Flume是一个分布式的,可靠的,高可用的系统,用于高效地从多个不同的数据源收集,汇总及...
    steanxy阅读 1,052评论 0 1
  • 什么都不说了,直接上图吧
    澜珊泽泮阅读 227评论 0 0