目前线上购物已经成为人们的一种生活常态,这伴随着海量数据的产生,如何存储这些数据,对这些数据如何进行挖掘处理,以及从这些数据中提取有用的信息进而更好地促进企业的发展已经成为很多电商企业的呼声,同时传统数据仓库也已经满足不了企业的需求,就在这时大数据技术应运而生。大数据技术的发展为电子商务的发展提供了强大的数据支撑,尤其是离线数据仓库技术能够为电商公司提供强大的数据分析结果,以此才能为电商公司对一些出现的问题或者弊端做出应对措施,给用户提供更好的用户体验感,提高电商公司的企业竞争力。
数据仓库一词是由比尔·恩门(Bill Inmon)在1990年提出,它是一门面向主题的、集成的、比较稳定的、能表示出历史变化的数据集合,被用来支持管理决策的过程。
数据仓库中的数据一般都是按照一定的逻辑进行分层管理的,一共分为四层。这样将数据仓库分层可以将复杂的任务分为很多步骤来完成,就会将需求任务变得简单和容易解决;也方便对数据的维护,如果某些数据出现问题,只要将出现问题的数据步骤进行操作就可以了,能够方便解耦底层业务数据的变化。
(1)ODS(Operational Data Store)层又称操作数据层,它是最原始的数据层,是最贴近原始数据的一层。基本跟数据源的原始数据保持一致。(2)DWD(Data Warehouse Detail)层,数仓明细层。这一层的主要工作就是对ODS层的数据先进行数据预处理,清洗、集成、转换后得到宽表,该层采用维度退化的方法,将维度退化到事实表中,减少事实表和维度的关联。(3)DWS(Data Ware House Service)层,数仓服务层。这一层是以DWD层的数据为基础,进行轻度聚合,进行需求分析。(4)ADS(Application Data Store)层,又称应用服务层,这层的主要作用用来报表展示结果。
电商中离线数据仓库主要数据来源有很多,主要是业务数据,它是公司的重要资源,一般存储在mysql中,以便公司随时快速的使用业务数据;还有是日志数据、第三方数据、历史数据等等。业务数据又分为用户信息和订单信息。用户信息主要是用户的个人信息,比如用户的密码、手机号、家庭住址、电子邮箱等等;而订单信息主要包括电商公司所卖商品的价格、所卖商品的数量、商品发货地等等商品的详细信息。
日志数据,主要是用户线上的一系列行为操作的数据。一般通过前端的js埋点和后端的服务埋点来获取用户的行为日志数据,如用户在浏览商品时的ip地址、用的什么浏览器、session、设备等等以及用户在什么时间打开搜索页面、打开商品详情页面、加入购物车、支付等等。日志数据的产生可以从APP端、微信小程度端或者web端中得到,它记录用户发生的事件信息,因此产生的数据量是比较大,一般保存在Hdfs中。除了业务数据和日志数据,有时电商公司根据业务需求需要从别处购买第三方数据,以便自己使用;第三方数据主要是地方运营商的数据、城市的天气情况或者爬虫得到的数据等等。
日志采集系统将各类埋点中获得的数据采集到日志服务器中,在日志服务中的数据将会是按照一定格式分类存储,比如按日期分类存储,方便后期对数据进行整合。日志采集工具(比如flume)会将日志服务器中的日志数据迁移到hdfs指定的目录中。日志数据的信息是不完整的,所以要把日志数据和mysql中的业务数据以及第三方数据、历史数据进行整合,也就是数据预处理。
为什么要进行数据预处理?在真实的企业生产环境中,数据通常是不完整、出现错误等等问题,而这样的数据一开始没有进行处理,将会导致后面工作难以开展,或者说将会导致后面的工作繁琐,工作效率将会低下,所以数据预处理在正式开始数据统计分析前是非常有必要的。
数据预处理过程
(1)清洗。首先对从日志服务器中采集而来的日志数据进行数据清洗,也就是去除日志数据的脏数据,这样清理完的数据才能方便后面工作的顺利进行,防止了因为数据不完整、数据错误、出现重复数据等等而对后面数据进行进一步处理等工作带来一系列问题。数据清洗的工作基本需要程序来解决,可以使用mapreduce程序或者spark程序来编写代码来完成数据清洗的工作。
(2)集成。数据清洗完之后,需要将历史数据、业务数据、清洗完的日志数据还有第三方数据进行整合,这样使数据更加完整,方便后续对数据进行分析统计处理操作。业务数据是存储在mysql中,而日志数据是存储在hdfs中,将mysql中的数据迁移到hdfs中,需要用到数据迁移工具,现在常用的数据迁移工具是sqoop和Data X。将历史数据、业务数据、清洗完的日志数据还有第三方数据可以通过MR程序或者spark程序来完成数据之间的集成、整合。
(3)转换。将集成完的数据转换为结构化数据,才能方便后面的操作,以便处理各种维度的需求分析,转换后的结构化数据是存储在hdfs中,此结构化数据也可以称为原始数据,该原始数据包含所有需要用到的字段数据,如:用户信息、商品信息、经纬度信息、时间信息等等。可以用hive建一个外部表映射到这个原始数据,然后以后所有操作都可以在这个外部表中进行,而建一个外部表的好处就是,删除外部表并不会删除掉表中的数据,因而数据可以永久保存使用,不会因为删除表而丢失数据。
外部表的创建之后,就可以对表中的数据根据需求进行数据分析。但是如果每次提出一个需求,都从外部表中庞大的字段中,筛选出想要的结果字段将会导致效率低下,程序运行非常缓慢,由于用hive对外部表进行数据处理,hive底层是将hql语句转换为mr程序或者spark程序,是对hdfs中的数据进行处理,本身就会消耗太多时间,表中字段太多必然使程序运算时间更长。因此最好的解决办法是将外部表根据需求创建多个主题表,然后根据需求对对应的主题表中的数据用hql语句进行处理,得出对应的结果报表并保存。
创建外部表的hql语句:create table主题表名stored as parquet/orc as select字段名,字段名……from外部表一般的主题表是创建的管理表,因而删除了主题表也就删除了表中的数据。创建主题表的重要的作用就是提高了程序和工作的效率。
根据展示数据量的大小、查询维度是否单一以及需求统计是否固定,将结果报表的保存和如何运算分为4类:
(1)如果hql处理完的数据比较小,就可以直接存储在mysql中,存在mysql中的报表展示和查询速度快。(2)如果hql处理完的数据量比较大并且查询维度单一,可以将hive处理完的数据存放在hbase中,hbase是一个高性能、高可靠性、可伸缩的、面向列的分布式数据库系统,可以将日志数据按照某个特征划分的,将这个特征作为rowkey,比如日期等,value就是hive根据需求得出结果表中的每一行数据。由于hbase相比于hive查询速度比较快,所以展示和查询数据比较快。(3)如果hive处理完的数据量比较大、查询维度多样化、维度组合种类固定并且需求统计是固定的,这时候就会用到cube。cube是多维数据立方体,cube首先就是要创建一个统一的目标维度分析的聚合结果表,这个表中包含所有维度的字段,然后利用hive的高阶聚合函数,就能计算出所有维度组合的情况。这一部分一般会使用kylin和kudu俩种技术相结合,来完成固定查询维度和需求统计分析并将结果保存起来,并且结果查询起来比较快。因为kylin提供hadoop/spark之上的sql语句查询接口及多维分析能力来支持超大规模数据,能在亚秒内从巨大的表中进行查询。(4)如果hive处理完的数据量比较大、查询维度多样不固定并且需求统计的计算逻辑不固定,这方面就可能需要一站式的解决方案,比如现在市面上目前比较火的clickhouse,由于clickhouse并不是apache生态中,它的存储和计算都是用自身的东西,并不使用hdfs和hive,他可以在页面上定制化进行查询运算。
通过企业需求,经过一系列对数据的处理,得到最终报表。企业可以通过对最终报表所展示的结果,来对结果所展示的问题采取一定的措施取应对或者通过报表结果做出行动来优化,比如电商公司通过漏斗模型所展示的结果来判断用户浏览商品到支付成功这一整个流程是否合理并作出优化;或者通过用户行为归因分析,判断以后公司业务推广的主线在哪一方面等等。
随着电子商务和移动互联网技术的发展,数据量逐步增加,大数据中离线数仓技术的运用,对于电商公司的战略规划和长远发展来看,有着举足轻重的作用,能够更好地为电商的业务服务,从而提高企业竞争力和提高用户体验度。
【本文标签】
【责任编辑】平文云仓