大数据技术原理与操作应用 第10章 综合项目案例_第1页
大数据技术原理与操作应用 第10章 综合项目案例_第2页
大数据技术原理与操作应用 第10章 综合项目案例_第3页
大数据技术原理与操作应用 第10章 综合项目案例_第4页
大数据技术原理与操作应用 第10章 综合项目案例_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章综合项目案例·

模块开发——数据分析·

模块开发——数据导出·

模块开发——日志分析系统报表展示·模块开发——数据采集·

模块开发——数据预处理·

模块开发——数据仓库开发

✎学习目标了解掌握熟悉熟悉了解系统架构12熟悉系统环境搭建的步骤了解掌握熟悉掌握各个模块的实现方法3章节概要本章通过Hadoop生态体系技术实现最高气温统计案例和电子商务离线数据统计案例,来帮助读者在开发中学习大数据体系架构的开发流程,以及利用现有技术解决实际生活中遇到的问题。本章核心是具体独立分析数据,并掌握网站数据分析系统的业务流程。利用MapReduce技术将数据提取出易于分析的数据结构,以及使用Hive完成数据分析,计算出需求结果的能力。

10.1最高气温统计案例系统背景介绍需从一组数据中统计每一年的每一个月中气温最高的前两天输入样例:1951-07-0112:21:0245c1949-10-0214:01:0236c1951-07-0212:21:0246c1951-07-0312:21:0347c输出样例:1949-10-2-36案例设计思路(1)输出结果时保证选取两条气温最高的记录

将相同的年月的记录按照温度降序排列,在最终获取结果时,前两条记录一定是气温最高的两天。(2)获得相同的年月的气温最高的记录

对于Reduce端拉取的数据,保证Reduce每次处理的数据为同一年同一个月份的数据,将同年同月的数据排序(这个阶段可由Group来处理),取前两条记录,即为该年该月气温最高224的前两条记录。案例设计思路(3)编码关键问题解决

传统的WordCount案例中的排序,是按照MapReduce程序默认的字典排序规则进行排序,但对于本案例,既要对日期进行升序排列(默认),又要对温度作降序排列,采用如下的方法进行编码。可以考虑自定义比较方法来实现需求。自定义一个对象(JavaBean),包含年、月、日、温度等四个属性,将该对象的年份相同的一组数据,支配一个Reduce进行处理(自定义Partition方法,从数据中可以看出,一共是三个年份,可以考虑将Reduce的个数设置为“3”,用年属性减去最小的那一年,将其值对“3”取余)。之后,再比较月份,月份相同,再比较温度,温度按照降序排列。通过以上分析,需要编写以下几个阶段:①Map阶段:负责将数据切分,对应存入JavaBean中。将JavaBean传入Partition阶段。②Partition阶段:继承Partitioner,复写getpartition()方法,指定相同年份的数据分到同一个Reduce中。这样一个Reduce任务对应输出一个文件。③Sort阶段:确保每个传递过来的JavaBean,确定排序规则:相同的年份,比较月份;月份相同,比较温度。④Group阶段:此阶段为ShuffleReduce端的分组排序。⑤Reduce阶段:统计每一年、每一个月、每一天的温度,并选择其中温度最高的两条记录。其中,需要注意的是,在Sort和Group阶段,必须复写构造方法,因为参考源码可知,如果没有复写构造方法,无法创建实例。编写流程①编写代码,在根目录“/”下创建名为“test”的文件。

②将“/var/log/demsg”文件上传到HDFS的“/test/”下。

③获取配置的所有信息。

④配置好开发环境。

⑤完成案例代码并运行成功。系统架构设计大数据统计分析的架构图10.2电子商务离线数据统计案例

本案例通过模拟真实的电子商务业务的场景,应用大数据组件和技术来处理日志数据和业务数据,从而达到学习大数据离线批处理的步骤和流程。本案例的数据来源分为两部分:一部分是用户的网站日志,另一部分是电商平台业务数据库中的数据。结合这两方面的数据通过大数据平台来实现数据仓库分层搭建,并进行数据报表分析得到活跃、转化率、GVM指标,最终将结果导入关系型数据库,进行可视化展示。案例设计思路流程①将电商用户的网站日志数据采集到HDFS上存储。②在电商业务里数据加载到订单表和支付流水表。③将电商网站日志加载到Hive。④将②中的业务数据通过Sqoop加载进Hive。⑤结合业务数据④和日志数据③分析得到结果存到数据报表,并进一步分析得到活跃、转化率、GVM指标。⑥通过Sqoop将结果数据⑤导出到MySQL。⑦将⑥中的数据进行可视化展示。案例设计思路流程图为了便于将数据提取后进行统计,要把Hive中的数据分层次,按层次划分归类后的数据再进行导出和可视化处理。数据分层次的情况如图:

10.2模块开发-数据采集使用Flume搭建日志采集系统

将电商用户的网站日志数据采集到HDFS上存储,需要用Flume采集系统需要在服务器上部署Agent节点,从而对电商用户行为日志数据进行采集,并将日志文件汇集到HDFS中,搭建Flume的核心代码如下:a1.sources=r1a1.sources.r1.type=taildira1.sources.r1.channels=c1a1.sources.r1.positionfile=/var/log/flume/taildir_position.jsona1.sources.r1.filegroups=f1f2a1.sources.r1.filegroups.f1=/logs/topic_event/.*log.*a1.sources.r1.filegroups.f2=/logs/topic_start/.*log.*

10.2模块开发-数据采集日志信息说明通过Flume采集系统采集后的电商用户行为日志数据将会汇总到HDFS上进行保存,由于采集的日志数据内容较多,并且样式基本类似,这里选取两条条进行展示,样例如下:启动日志{"action":"1","ba":"Huawei","detail":"","eamil":"8G1ZH4XL@199.com","en":"start","entry":"3","extend1":"","hw":"640*960","l":"pt","loading_time":"13","md":"Huawei-0","mid":"0","nw":"WIFI","open_ad_type":"1","t":"1559920269658","uid":"0"}

10.2模块开发-数据采集日志信息说明"action":"1"状态(成功或者失败)"ba":"Huawei"手机品牌"detail":""失败信息"eamil":"8G1ZH4XL@199.com"邮箱"en":"start"日志类型"entry":"3"入口"extend1":""扩展字段"hw":"640*960"屏幕宽高"l":"pt"系统语言"loading_time":"13"加载时间"md":"Huawei-0"手机型号"mid":"0设备唯一标识"nw":"WIFI"网络模式"open_ad_type":"1"广告类型"t":"1559920269658"事件"uid":"0"}用户标识

10.2模块开发-数据采集日志信息说明1560009799473|{"cm":{"uid":"4","t":"1559973929283","md":"Vivo-14","eamil":"QG5P5SUU@199.com","mid":"4","nw":"4G","l":"en","ba":"Vivo","hw":"640*1136"},"ap":"app","et":[{"ett":"1559985948932","en":"newsdetail","kv":{"entry":"2","goodsid":"0","news_staytime":"0","loading_time":"3","action":"3","showtype":"2"}}1560009799473|处理时间{"cm":公共字段{"uid":"4",用户标识"t":"1559973929283"客户端日志产生的时间"md":"Vivo-14"手机型号"eamil":"QG5P5SUU@199.com"邮箱"mid":"4"设备唯一标识"nw":"4G"手机网络"l":"en"系统语言"ba":"Vivo"手机品牌"hw":"640*1136"}屏幕分辨率"ap":"app"数据来源"et":[{"ett":"1559985948932"事件产生时间"en":"newsdetail"事件名称"kv":{"entry":"2"….事件详细内容事件日志对应信息

10.2模块开发-数据仓库开发对应流程中的第二项,在电商业务里数据加载到订单表和支付流水表;第三项,把电商网站日志加载到Hive;将数据采集后,需要进一步建立相应的表格,把数据添加进去,做更深层次的数据处理。日志分为两部分,一个是启动日志,一个是事件日志。现在将启动日志加载到启动表中,用于生成用户活跃度表。将事件日志加载到事件基础明细表中,用于生成事件基础表,进而分化成为商品点击表、收藏表、商品详情表、评论表。Hive的数据分层,创建DWD层的启动表,

将启动日志中的数据导入到启动表中

10.2模块开发-数据仓库开发1)建表语句如下:0:jdbc:hive2://86:2181/>droptableifexistsbatch.dwd_start_log;CREATEEXTERNALTABLEbatch.dwd_start_log(`mid_id`stringCOMMENT'设备唯一标识',`user_id`stringCOMMENT'用户标识',`lang`stringCOMMENT'系统语言',`model`stringCOMMENT'手机型号',`brand`stringCOMMENT'手机品牌',`email`stringCOMMENT'邮箱',`height_width`stringCOMMENT'屏幕宽高',`app_time`stringCOMMENT'客户端日志产生时的时间',`network`stringCOMMENT'网络模式',`entry`stringCOMMENT'入口',`open_ad_type`stringCOMMENT'开屏广告类型',`action`stringCOMMENT'状态',`loading_time`stringCOMMENT'加载时长',`detail`stringCOMMENT'失败码',`extend1`stringCOMMENT'扩展字段')PARTITIONEDBY(dtstring)location'/warehouse/batch/dwd/dwd_start_log/';

10.2模块开发-数据仓库开发2)向启动表导入数据:0:jdbc:hive2://86:2181/>insertoverwritetablebatch.dwd_start_logPARTITION(dt='2019-06-09')selectget_json_object(line,'$.mid')mid_id,get_json_object(line,'$.uid')user_id,get_json_object(line,'$.l')lang,get_json_object(line,'$.md')model,get_json_object(line,'$.ba')brand,get_json_object(line,'$.eamil')email,get_json_object(line,'$.hw')height_width,get_json_object(line,'$.t')app_time,get_json_object(line,'$.nw')network,get_json_object(line,'$.entry')entry,get_json_object(line,'$.open_ad_type')open_ad_type,get_json_object(line,'$.action')action,get_json_object(line,'$.loading_time')loading_time,get_json_object(line,'$.detail')detail,get_json_object(line,'$.extend1')extend1fromods_start_logwheredt='2019-06-09';

10.2模块开发-数据仓库开发创建DWD层事件日志基础明细表,将事件日志导入到事件日志表中用和商品点击表同样的方法创建DWD层的详情页表,创建DWD评论表,创建DWD收藏表,并导入数据。创建DWS层的日活跃设备表创建DWS周活跃设备表。根据日用户访问明细,获得周用户访问明细。另一条线,由系统的业务数据生成业务ODS层订单表。完全仿照业务数据库中的表字段,一模一样的创建ODS层对应表,然后将数据导入。

10.2模块开发-数据分析

对应流程中的第五项,将业务数据4和日志数据3分析得到结果存到数据报表,并进一步分析得到活跃、转化率、GVM指标。

通过上述的用户日活跃表,周活跃表和月活跃表计算出ADS层活跃用户数表.1)建表语句如下:0:jdbc:hive2://86:2181/>droptableifexistsads_uv_count;createexternaltableads_uv_count(

`dt`stringCOMMENT'统计日期',

`day_count`bigintCOMMENT'当日用户数量',

`wk_count`bigintCOMMENT'当周用户数量',

`mn_count`bigintCOMMENT'当月用户数量',

`is_weekend`stringCOMMENT'Y,N是否是周末,用于得到本周最终结果',

`is_monthend`stringCOMMENT'Y,N是否是月末,用于得到本月最终结果')COMMENT'活跃用户数'rowformatdelimitedfieldsterminatedby'\t'location'/warehouse/batch/ads/ads_uv_count/';

10.2模块开发-数据分析

2)将表中导入数据0:jdbc:hive2://86:2181/>insertintotableads_uv_countselect'2019-06-09'dt,daycount.ct,wkcount.ct,mncount.ct,if(date_add(next_day('2019-06-09','MO'),-1)='2019-06-09','Y','N'),if(last_day('2019-06-09')='2019-06-09','Y','N')from(select'2019-06-09'dt,count(*)ctfromdws_uv_detail_daywheredt='2019-06-09')daycountjoin(select'2019-06-09'dt,count(*)ctfromdws_uv_detail_wkwherewk_dt=concat(date_add(next_day('2019-06-09','MO'),-7),'_',date_add(next_day('2019-06-09','MO'),-1)))wkcountondaycount.dt=wkcount.dtjoin(select'2019-06-09'dt,count(*)ctfromdws_uv_detail_mnwheremn=date_format('2019-06-09','yyyy-MM'))mncountondaycount.dt=mncount.dt;

10.2模块开发-数据分析之后,按如下流程完成操作:(2) 通过上述的用户日活跃表,周活跃表和月活跃表计算出业务DWS层创建用户行为宽表(3)通过上述的用户日活跃表,周活跃表和月活跃表计算出业务ADS层新增用户占活跃用户比率表。新增用户占活跃用户比率表.(4)通过上述的用户日活跃表,周活跃表和月活跃表计算出业务ADS层用户行为漏斗分析表(5)通过上述的用户日活跃表,周活跃表和月活跃表计算出业务ADS层GMV成交总额表对应流程中的第六项通过Sqoop将结果数据5导出到Mysql。使用Hive完成数据分析过程后,就要运用Sqoop将Hive中的数据导出到Mysql中方便后续做可视化处理。

10.2模块开发-数据导出(1)在MySQL中创建每日活跃统计,创建ads_uv_count表。Usebatch;DROPTABLEIFEXISTS`ads_uv_count`;CREATETABLE`ads_uv_count`(`dt`varchar(255)DEFAULTNULLCOMMENT'统计日期',`day_count`bigint(200)DEFAULTNULLCOMMENT'当日用户数量',`wk_count`bigint(200)DEFAULTNULLCOMMENT'当周用户数量',`mn_count`bigint(200)DEFAULTNULLCOMMENT'当月用户数量',`is_weekend`varchar(200)CHARACTERSETutf8COLLATEutf8_general_ciDEFAULTNULLCOMMENT'Y,N是否是周末,用于得到本周最终结果',`is_monthend`varchar(200)CHARACTERSETutf8COLLATEutf8_general_ciDEFAULTNULLCOMMENT'Y,N是否是月末,用于得到本月最终结果')ENGINE=InnoDBCHARACTERSET=utf8COLLATE=utf8_general_ciCOMMENT='每日活跃用户数量'ROW_FORMAT=Dynamic;对应流程中的第六项通过Sqoop将结果数据5导出到Mysql。使用Hive完成数据分析过程后,就要运用Sqoop将Hive中的数据导出到Mysql中方便后续做可视化处理。

10.2模块开发-数据导出(2)在MySQL中创建每日用户行为转化率统计表,创建ads_user_action_convert_day表。Usebatch;DROPTABLEIFEXISTS`ads_user_action_convert_day`;CREATETABLE`ads_user_action_convert_day`(`dt`varchar(200)DEFAULTNULLCOMMENT'统计日期',`total_visitor_m_count`bigint(20)DEFAULTNULLCOMMENT'总访问人数',`order_u_count`bigint(20)DEFAULTNULLCOMMENT'下单人数',`visitor2order_convert_ratio`decimal(10,2)DEFAULTNULLCOMMENT'访问到下单转化率',`payment_u_count`bigint(20)DEFAULTNULLCOMMENT'支付人数',`order2payment_convert_ratio`decimal(10,2)DEFAULTNULLCOMMENT'访问到支付的转化率')ENGINE=InnoDBCHARACTERSET=utf8COLLATE=utf8_general_ciCOMMENT='每日用户行为转化率统计'ROW_FORMAT=Dynamic;对应流程中的第六项通过Sqoop将结果数据5导出到Mysql。使用Hive完成数据分析过程后,就要运用Sqoop将Hive中的数据导出到Mysql中方便后续做

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论