三、数据仓库理论与应用
3.1大数据基础Hadoop
3.1.1Hadoop三架马车
Hadoop是一个分布式系统基础架构,现在被广泛地应用于大数据平台的开发,对处理海量数据有着其他技术无可匹敌的优势。
HDFS(Hadoop Distributed File System)、MapReduce与HBase被誉为分布式计算的三驾马车。Hadoop基本架构的底层是HDFS,上面运行的是MapReduce、Tez、Spark,再往上封装的是Pig和Hive
大数据技术首要的要求就是先把数据存下来,HDFS为了解决存储的问题,把大量的数据用成千上万台机器存储,而用户在前端看到的只是一个文件系统,而不是许多文件系统,这是一种对用户友好的处理方式。HDFS会集中管理数据,用户只需要把精力花费在如何使用和处理数据上
在解决了数据存储的问题之后,如何更高效地处理数据呢?如果让一台机器处理TB级或者PB级的数据,那么可能会花费几天甚至几周的时间,而这对于很多公司的业务来说是不可接受的。
MapReduce/Spark提供一种可靠的、能够运行在集群上的计算模型。MapReduce会把所有的函数都分为两类,即Map和Reduce。Map会将数据分成很多份,然后分配给不同的机器处理;Reduce把计算的结果合并,得到最终的结果。
但是如果直接使用MapReduce的程序,会发现使用门槛比较高,Hive和Pig基于MapReduce的基础封装出一个更友好、更简单的方式,可以很容易地实现MapReduce程序。Pig以类似脚本的方式实现MapReduce,Hive以SQL的方式实现。Hive和Pig会把脚本或者SQL自动翻译成MapReduce程序,然后交给计算引擎执行计算。
除了Hadoop体系架构那些基础工具外,还需要对以下几个基础工具做一些了解。
(1)Spark。Spark是一个开源的集群计算环境,Spark与Hadoop之间既相互补充,又相互竞争。Spark启用了内存分布数据集,在处理某些工作负载方面表现得更加优越,交互也会更加友好。
(2)Kafka。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理各大网站或者App中用户的动作流数据。用户行为数据是后续进行业务分析和优化的重要数据资产,这些数据通常以处理日志和日志聚合的方式解决。
(3)Storm。Storm主要应用于分布式数据处理,包括实时分析、在线机器学习、信息流处理、连续性的计算、ETL等。Storm还可以应用于实时处理,被称为实时版的Hadoop,每秒可以处理百万级的消息,并且Storm可以保证每个消息都能够得到处理,具有运维简单、高度容错、无数据丢失、多语言的特点。
(4)HBase。HBase是一个构建于HDFS上的分布式、面向列的存储系统。以Key-Value对的方式存储数据并对存取操作做了优化,能够飞快地根据Key获取绑定的数据。例如,从几PB的数据中找身份证号只需要零点几秒。
(5)HUE。HUE 是Cloudera 的大数据Web可视化工具,主要用来简化用户和Hadoop集群的交互。可以在Web页面把数据从HDFS等系统导入Hive中,可以直接通过HUE以HiveQL的方式对数据查询展现。同时,还可以保存SQL语句,并查看和删除历史SQL语句,对于查询后的数据,可以选择表格、柱状图、折线图、饼状图、地图等多种可视化图形展现,操作十分简单,如果想继续分析,可以使用下载功能下载保存为Excel。
(6)Oozie。Oozie 是一个工作流调度系统,统一管理工作流的调度顺序、安排任务的执行时间等,用来管理Hadoop的任务。Oozie集成了Hadoop的MapReduce、Pig、Hive等协议以及Java、Shell脚本等任务,底层仍然是一个MapReduce程序。
(7)ZooKeeper。ZooKeeper是Hadoop和HBase的重要组件,是一个分布式开放的应用程序协调服务,主要为应用提供配置维护、域名服务、分布式同步、组服务等一致性服务。
(8)YARN。Hadoop生态有很多工具,为了保证这些工具有序地运行在同一个集群上,需要有一个调度系统进行协调指挥,YARN就是基于此背景诞生的资源统一管理平台。
3.1.2其他常用工具
除了上面介绍的基础工具之外,以下是一些常用工具。
(1)Elasticsearch。Elasticsearch是基于Lucene的搜索服务器,提供了一个基于多用户的分布式全文搜索引擎,基于RESTful Web接口。Elasticsearch作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。Elasticsearch主要应用于云计算中,能够实现实时搜索,具有稳定、可靠、快速、安装和使用方便的特点。
(2)Memcached。Memcached是一个开源的、高性能、分布式内存对象缓存系统,基于内存的Key-Value存储,解决了大数据量缓存的问题,主要应用于减轻数据库负载。它通过在内存中缓存数据查询结果,减少数据库访问次数来提高动态网址应用的速度。同时,因为它足够简洁而强大,便于快速开发,所以得到了广泛的应用。
(3)Redis。Redis是开源的可以基于内存同时也可以持久化的日志型Key-Value数据库,它使用ANSI C语言编写,支持网络,并提供多种语言的API。与Memcached类似,为了保证查询速度和效率,数据都是缓存在内存中的,区别的是Redis多了一步持久性操作,会定期把更新的数据写入磁盘或者文件中,并且在此基础上实现主从模式的数据同步。正是因为Redis的这一点,它可以很好地弥补Memcached这类单纯基于Key-Value存储的不足,在一些应用场景中,可以配合关系型数据库一起使用,同时对关系型数据库起到了很好的补充作用。
3.2大数据平台层级结构
根据大数据平台架构中流入和流出的过程,可以把其分为三层——原始数据层、数据仓库、数据应用层。
原始数据层,也叫ODS(Operational Data Store)层,一般由基础日志数据、业务线上库和其他来源数据获得。
数据仓库的数据来自对ODS层的数据经过ETL(抽取Extra,转化Transfer,装载Load)处理。
数据仓库的主要功能是以ODS层数据为基础,通过逻辑加工产出数据仓库主题表。数据仓库又细分为基础层、主题层和数据集市
数据应用层主要用于处理消费数据仓库的数据
3.2.1ODS层
对于ODS层而言,客户端用户操作日志是一个主要的数据来源,它是分析App和产品优化的基础;另一部分来源于业务的数据库,例如订单的交易情况。
ODS层是当前的、不断变化的数据,而数据仓库保留的是历史的、不再变化的数据,所以一般来说会落后ODS层一天或一天以上的数据。
ODS层具备以下几个作用:
(1)在业务系统和数据仓库之间形成一个隔离层。
(2)转移一部分业务系统细节查询的功能
(3)完成数据仓库中不能完成的一些功能
3.2.2数据仓库
数据仓库(Data Warehouse,DW)是为了方便企业快速做各种业务决策提供数据支撑而构建的集成化数据环境。
数据仓库本身并不“生产”任何数据,同时自身也不需要“消费”任何数据,数据来源于外部,并且开放给外部应用
根据数据仓库处理的数据层次不同,数据仓库主要分为基础层、主题层、数据集市这三层。
1.基础层
基础层的主要作用是对ODS层的数据进行轻度汇总,产出轻度汇总明细、维度表、码表、事实集等一些基础数据。
2.主题层
主题层为数据的高度聚合层,按照一定的维度和业务逻辑,对一类数据进行聚合,主要生成画像表和主题表。主题层的数据来源是基础层和ODS层。
3.数据集市
数据集市(Data Mart)也叫数据市场,主要功能是将主题层和基础层的数据按各业务需求进行聚合,生成宽表和Cube,并直接推送给数据分析和业务部门使用,例如直接推送表数据至MySQL数据库。
3.2.3数据的应用
大数据的分析应用主要分为以下三种形式。
第一种是描述性分析应用。主要用来描述所关注的业务的数据表现,主要关注事情表面发生了什么,在数据分析之后,把数据可视化展现出来,让用户可以了解业务的发展状况。
第二种是预测性分析应用。在描述性数据的基础上,根据历史数据情况,在一定的算法和模型的指导下,进一步预测业务的数据趋势。例如,美国历年的总统大选预测结果、天气预报预测天气等都属于预测性分析。
第三种是指导性分析应用。基于现有的数据和对未来的预测情况,可以用来指导完成一些业务决策和建议,例如为公司制订战略和运营决策,真正通过数据驱动决策,充分发挥大数据的价值。
3.3数据埋点
一种常用的数据采集方法
3.3.1埋点方式
前端的埋点方式主要分为代码埋点、可视化埋点、无埋点三种。
1.代码埋点
代码埋点主要由App研发工程师手工在程序中写代码实现,通过触发某个动作后程序自动发送数据。优点:具有很强的灵活性,可以控制发送的时机和发送方式等。缺点:人力成本较高,需要研发工程师手工开发程序,有时候还要依赖App发版来生效。
2.可视化埋点
可视化埋点以前端可视化的方式记录前端设置页面元素与对其操作的关系,然后以后端截屏的方式统计数据。优点:简单、方便,能够快速地埋点。缺点:比较受限,上报的行为信息有限。
3.无埋点
无埋点绑定页面的各个控件,当事件触发时就会调用相关的接口上报数据。优点:不需要埋点,方便、快捷、省事。缺点:传输数据量比较大,需要消耗一定的数据存储资源。
3.3.2埋点事件
在记录埋点信息时,主要的埋点事件分为点击事件、曝光事件和页面停留时长三类。
1.点击事件
用户每点击页面上的一个按钮一下都会记录一次数据
2.曝光事件
当用户成功地进入一个页面时记录一次数据,当刷新一次页面时也会记录一次数据,如果通过手机Home键切换出去,则不会记录,因为已经脱离了App,此处记录也没有太大的分析价值,记录上来可能污染数据。
3.页面停留时长
页面停留时长主要用来记录用户在一个页面的停留时间,它可以通过记录用户进入页面的时间t1和离开页面的时间t2计算,计算公式可以简单地表示为:用户停留时间=离开页面时间t2-进入页面时间t1。
3.3.3数据埋点实例
现在App端的数据埋点一般采取Key-Value的形式,Key一般表示某个事件,Value代表相对应的值,一个Key可以对应一个Value或者多个Value。
3.4指标字典
指标字典,是业务数据标准化的基础,目的是对指标进行统一管理,方便共享,达成对业务指标的共识,并且统一修改和维护。