文 | 王传鹏
0 前言
记得在学校写论文(包括政治思想论文)的时候经常提到的一个词就是信息爆炸,现在说起这个词都觉得落伍了,但如今所处的时代的的确确是一个信息充斥的时代。互联网以及移动互联网的便捷让每一位参与者都能轻松产生各类数据,据不完全统计,每一天全球互联网产生10ZB以上,而且这个数字正在不断攀升,庞大的数据是财富也是负担,因为:
数据规模大但不是所有信息都是有用的,需要进行分析剔除无价值数据,数据清洗至关重要。数据规模越大而数据的关联性理解就越难,而往往数据的价值就在这关联性上。缺乏应用场景时,数据规模越大成本越高,数据的意义应该是数据创造的价值减去数据分析、存储以及计算带来的成本,如果是一个负数那么就毫无意义了。
上述因素的存在,近几年来如何建设大数据团队来利用这些数据创造价值成为诸多公司的工作发展的重点问题。诸多公司可以根据数据利用的范畴不同分成如下几类:
大数据存储与计算提供商:比如各大云厂商,阿里云、AWS、腾讯云等等,这些公司提供标准的海量数据存储以及计算解决平台。大数据服务公司:利用某些领域的大数据分析能力向外提供服务,比如诸葛IO、神策数据、talking data等公司。拥有大流量产品的公司,希望流量变现,组建大数据团队支持内部数据服务:比如微博、微信、腾讯QQ产品等等。需要外部流量进行营销推广的公司:比如app公司、游戏公司等等
无论公司的规模大小以及数据利用情况,不可避免地都会遇到处理数据的技术问题,那么大数据团队的技术应该如何建设呢?本文认为如图1所示,需要从处理大数据所具备的能力以及目标入手进行,首先是五大能力:
采集能力:数据是需要通过采集得到的,内部的、外部的;静态的、动态的;用户的,产品的…..,那么对于一个大数据团队数据采集能力是最先具备的能力。存储能力:数据采集之后,就需要进行存储,存储选型至关重要,不同类型的数据因为数量规模、内在范式、应用场景等的不同而存储方式也会各异。分析能力:往往数据团队的核心竞争力就是分析能力,而我们把分析能力可以分成三个层次的内容:一是计算求已知结果、二是假设最优解做资源规划、三则是通过现有状态预测将来之结果。运用能力:大数据的应用在当前其实是比较普遍的,主要应用在搜索、推荐、广告、运营以及营销领域评估能力:对于数据分析以及运用的效果需要进行跟踪和评测,通过这个评估能力不断修正对于数据的计算和分析。
其次是数据团队的三个目标:全面、准确以及及时。这和天气预告一样,每一个地区的人都能听到本地区的天气预告,这是全面;希望预告的内容和实际情况相符,这是准确;预告的时间如果再发生之后就无意义了,同时有任何的变化都能及时提前反馈出来这就是及时。
图1 大数据团队的五大能力与三个目标
1 采集能力
数据采集是整个流程的初始和基础,采集不到数据,也就没有其他几个阶段什么事了。在介绍采集能力之前,先要明确我们需要采集哪些数据,按照5W的描述原则如此划分:
WHO——用户相关:主要用来描述用户的,比如用户基本属性信息等。WHAT——产品相关内容:主要用来描述产品的,比如产品基本属性信息等。WHERE——场景相关内容:主要用来描述场景以及环境信息的,比如哪个页面或者网站来源等。WHEN——时间序列相关内容:主要用来描述时间相关的动态信息,比如用户行为日志、产品变更内容等。WHY——描述关联性内容:比如用户关系、产品关系等等
针对上述数据的采集,按照数据来源的不同进行划分为:
内部采集:主要指的是公司内部数据的采集能力。公司内部也会有多个部门,多个产品,那么让这些数据能够统一的入口减轻维护成本是比较重要的。内部的数据采集主要通过布码、签名日志数据传递、基本信息同步等组成。外部采集:主要指的是公司外部数据的采集能力,分成三种形式:网络爬虫spider、用户行为cookie映射以及开放API。
如图2所示基本展示了数据采集需要做的事情,其中需要重点关注的内容是外部spider的建设以及数据统一入口的建设。针对spider推荐web collector,地址:https://www.oschina.net/p/webcollector特点比较明显:无须配置,代码简单、功能强大。在数据统一入口方面,主要的核心是两点:一是使用各类MQ做数据通道,可平行扩展,二是构建消费模块,也支持平行扩展。在实际的项目中采用的是apache+python搭建的,这个消费模块可以自由添加初步筛选和清洗功能。另外对于数据的传输至于选择flume、scribe还是kafka因团队而异,尽管它们各有利弊,但是都是一些数据传输方法,尽可能结合实际情况,比如熟悉程度等等方面考量,在实际项目中scribe、flume以及kafka均有涉及。
图2 数据采集基本框架
2 存储能力
数据采集下来之后,就会涉及到如何存储的问题。数据存储一直是互联网技术中重点研究对象,各类存储工具层出不穷。本文主要针对数据特点进行存储选型推荐。
数据根据其时效性可以分为实时/非实时【或者动态和静态】两类。实时数据实时产生,实时传递,实时分析而存储下来,易变化,总量小,代表了当前的某种状态;非实时数据顾名思义不是实时产生的,而是静态的,不易变化,总量庞大。
数据根据其内容的特征可以分为结构化数据以及非结构化数据。结构化数据,如数字、符号,它们能够用数据或统一的结构加以表示;非结构化数据,如文本、图像、声音、网页,无法用数字或统一的结构表示。
图3 数据存储基本选型
在这里的基础选型中没有考虑关系型数据库,在进行大数据分析的时候不涉及普遍关系型的查询,所以nosql会在大数据存储中大行其道。
Redis用于实时数据以及高效数据缓存使用,尽管3.0以上的版本官方以及生成支持分布式redis,但是在生产环境上依然存在不稳定性问题,因此 twemproxy以及codis依然成为redis分布式管理的首选,不过需要注意的是因为某些命令存在不兼容性,所以在上这些开源项目时注意它们带来的影响。实际项目大量保存了缓存的用户特征数据、基础候选数据等等。
Mongodb的数据内容主要用于进行结构化数据的保存,因为其自带了sharding、replication以及monitor功能因为也逐渐成为nosql中重要的角色,在结构化数据存储中,非关联数据比如json结构数据保存最为合适,在实际项目中用来保存用户层级标签或者产品标签数据等等。
Hadoop/Hbase现在俨然已经成为大数据存储以及运算平台的标配了,其可扩展性、稳定性以及生态的完整性在大数据服务方面表现优异,因此绝大部分的团队都会选择这个生态用来做静态大数据量的存储。
因此,大数据团队需要具备上述存储数据的能力,保存采集下来的数据,提供给分析以及运用使用。
3 分析能力
数据采集到了,也都保存到适合的存储容器中了,分析数据成为了数据团队的核心竞争力,那么从哪些角度进行分析呢?本文提供了一个思路,从以下几个角度入手:
分析用户:对用户进行全面的分析,获取更有价值的信息,包括: 用户基本属性:比如年龄、地域、职业、性别、受教育情况以及可分配收入等等,它们是最为基础的数据信息,但提供了区分用户的重要指标。用户标签:由于大部分网络数据都是文本内容,同时用户在除了基本属性可以反映一定用户兴趣之外,用户文本标签是最大的用户兴趣反映点,所以在用户分析上用户标签的萃取是非常常见和重要的。它们的基础数据一般来源于个人描述、关联产品文本分、行为文本、关系标签等等。用户行为:用户在使用产品的时候在内部以及外部都可以产生大量的行为数据,这些行为数据可以反馈出用户兴趣,产品特征等等,用户行为分析的重点在于还原现场,谁在什么时间什么场景下做了什么样的操作带来了什么样的结果。用户之间的关系:在社交领域,用户之间的关系是显式的,这类的数据是必然要进行分析的,这里就存在关注、好友、密友等等区分,除此之外,对于并没有建设起社交关系的部分,有两种方式可以对用户关系进行建设:一是利用现有社交平台进入的用户既有的社交关系;二是通过属性进行建设,比如同公司、同学校等等。用户聚类:用户聚类在用户两两关系之上,表达了更多用户的关系,在某一个分类之下他们拥有很多相同的特性,在实际应用中可以得以延展应用。
分析产品:对产品进行全面的分析,掌握产品特性,包括: 产品基本属性:产品自身的属性描述,诸如产品价格、产品分类、产品投放人群等等产品标签:产品文本内容分析,包括设计以及描述相关的部分产品和产品之间的关系:一家公司一般都会有多种产品,即使只做一种产品相信也会有版本的区别,那么产品和产品之间关系的分析就是希望能够在特性方面产品的不同点和相同点。产品聚类:对于上述情况的升级,更大范畴的产品关系分析。
综合分析:在对数据分析的过程中,单一对于产品和用户的分析是必要的,但也有很多的信息来源于复杂情况,比如如下: 用户和产品之间关系:用户对产品的使用情况,包含用户不使用产品、用户使用产品、用户持续使用时间、用户离开等等;使用产品用户的情况分析以及用户和产品的静态或者动态关联关系。时间序列分析:Time series analysis是一种动态数据处理的统计方法。该方法基于随机过程理论和数理统计学方法,研究随机数据序列所遵从的统计规律,以用于解决实际问题。在实际应用中非常广泛,因为用户在使用产品时存在时间关联关系,产品在发展过程中也同样存在着时间因素。
了解了上述对于分析数据的角度,想要具备其分析能力,必然需要一些分析方法和工具来进行实施。分类一下分析过程,推荐如下方法和工具:
基础数据的统计分析:大规模数据统计Hadoop 上MR或者hive即可。文本类型分析:自然语言处理【NLP】,这个是进行标签分析等文本分析必备的工具,solr以及Elasticsearch中自带或者的语言分析包【比如IK、mmseg4j、HAN等等】是较为合适的。关联关系以及聚类分析:聚类是指事先没有“标签”而通过某种成团分析找出事物之间存在聚集性原因的过程,是一个无监督的过程。常见的聚类算法有:K-均值聚类算法、K-中心点聚类算法、CLARANS、 BIRCH、CLIQUE、DBSCAN等。在单机服务中Python系列的Anaconda 中的scikit-learn中包含的聚类算法简单易操作,R语言作为分析挖掘的语言利器,其挖掘包的支持也是很好的。而在集群操作中Hadoop的Mahout能胜任此项工作。分类分析:分类(Categorization or Classification)就是按照某种标准给对象贴标签(label),再根据标签来区分归类。常见的分类算法有:决策树、贝叶斯、k-近邻、支持向量机、基于关联规则的分类、人工神经网络等等,参考上述介绍,Anaconda/R以及Mahout均可以做分类运算。回归与时序分析:回归分析是应用极其广泛的数据分析方法之一。它基于观测数据建立变量间适当的依赖关系,以分析数据内在规律,并可用于预报、控制等问题。时序分析包括时序建模和时序相似性搜索,前者用于描述现象随时间发展变化的数量规律性,后者找出时序数据库中与给定查询序列最接近的时序。Anaconda/R依然适用,有更好系统支撑的hadoop yarn流程在回归问题求解以及时序挖掘上可以被采纳。
如图4所示大数据分析能力的示意图:
图4 数据分析能力
4 运用能力
在实际操作的实施的过程中,大数据落地或者说它的应用是最为困难的,人们往往对它的期待很高,但是却总发现距离实际情况差距很大,这是因为大部分大数据会止步于分析,而脱离于实际的运用需求。一般而言大数据的应用体现在如下几点上:
公司运营数据支持:一家公司对于数据的需求是强烈的,因此会有各类数据需求汇集到大数据团队,而及时响应给出统计结果显得尤为重要了。往往这种数据分析都基于Hadoop框架去实施,在这里有几种方法可以帮助解决这些需求: 建设统一的数据运行流程,定制标准的输入输出格式为有开发能力的合作团队提供友好的接口或者可交互的界面做好重要流程和结果的监控
在以往工作经历中,借鉴一下当初微博团队的Hadoop R9 interface,这是一个关于数据分析统计通道的管理实例,地址【https://www.afenxi.com/wp-content/uploads/2021/10/1634390078.jpeg” width=”640″ height=”750″ />
图5 R9-interface架构示意图
如图5所示,R9-interface拥有如下特点:
通过SVN统一管理业务代码,通过HTTP进行接口调用和触发生成数据可以多维度进行分发,支持各类数据的发送需求完善而多样的通知系统,可以及时告知需求方数据处理状态标准的数据处理流程,提供给开发者或者直接使用者
搜索系统的数据支持: 文本输入的纠错,来源于大量数据的统计结果输入词的相关或者扩展词,来源于大量数据的统计结果搜索系统预估模块的特征获取搜索系统预估模块的模型训练结果
推荐/广告系统的数据支持: 推荐静态候选集合的产生推荐/广告系统的特征提取推荐/广告系统的预估模型训练推荐/广告系统的展示建议
公司营销支持:有很多公司有营销需求,在市场上找寻精准用户或者在市场上宣传自身产品。在这里如何寻找精准用户以及触及方式成为营销支持的核心。在本人实际经历的项目中有这样的需求:
图6 sere-CRM【customer recall management】流程示意图
在sere-CRM中完成了以下几个工作:
具有外部采集的spider信息获取进行推荐相关性运算,寻找精准的用户或者客户对外部用户或者客户进行精准投放并实时统计效果
5 评估能力
我们讨论大数据,必然会涉及到评估,评估用来衡量采集/分析/运用的效果,回到最初我们提到的目标上来:全面、及时以及精准。这三类的目标是我们评估的准则,本文会从以下三个方面阐述对目标的评估:
评估数据:数据的全面性体现在数据分类遵循MECE【相互独立,完全穷尽】原理,纬度覆盖率高,数据完整度高,可以通过数据报表显示出来,比如分类情况、纬度数目、数据完成度等等;数据的及时体现在数据发生、采集以及分析的时间,可以通过展示数据发生的时间;考核精准是评估的核心,主要取决于数据反馈的及时与准确。评估方法:主要分成以下几种: 分析结果的准确性,比如评估用户的CTR或者RPM分析特征的准确性,比如评估AUC值或者卡方检验值分析模型的准确性,比如评估线下AUC值以及线上CTR和广告收益
评估工具: 分析的工具有R分析,Hadoop MR的运算等等这一点需要强调的是需要有很好的呈现,可以使用Google chart 或者D3等等工具进行呈现
图7 评估流程简图
6 整体框架
综上所述,我们对上述的流程:采集、存储、分析、运用、评估进行以下总结,如框图8所示:
图8 大数据技术建设框架图
7 后记
当然,一个团队的技术建设不仅仅是技术能力的建设,还包含了技术氛围、项目管理实施等等纬度,文本主要论述技术框架,因此关于其他这几个部分就不展开进行论述了。同时,所有的框架都来源于业务形态以及当下技术诉求,文本主要根据实际项目经验进行总结。
“工欲善其事,必先利其器”,技术源于业务,业务推动技术发展。大数据必将朝着更智能、更全面、更及时方向发展,让我们做好技术建设,拥抱无限的大数据未来。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「我们」留言处理。