如何对超级体量数据进行存储与加工高效服务百万级客户?
最新资讯 • 数据视野最新数据数据训练营
5667
2018-3-28
摘要:
互联网企业每天都会产生大量的业务数据,如何构建一个极速响应、稳定安全、低成本的数据存储、加工、挖掘、应用的全流程体系,成为企业实现数据化的关键。

【友盟+】工程师首次揭秘,友盟+是如何对超级体量数据进行存储与加工,为超过150万款应用以及710万家网站提供全域数据服务,并让这些庞大的数据源源不断的实现秒级计算与应用。

我们将从三个部分展开:数据存储、数据挖掘、特征加工。

一、数据仓库是如何运作的?

数据仓库输入、输出的是什么数据?数据仓库是如何运作的?数据仓库到底做了什么?我们先看一下数据仓库,左边是输入数据,第一是数据采集,直接通过JS代码或者SDK采集设备行为数据;第二是业务数据上传;第三是营销领域的问卷数据上传、文件数据上传等。右边是输出数据。数据经过处理后主要以四种形式输出,包括统计报表、数据超市、DMP、数据报告。

重点介绍中间的数据仓库。【友盟+】数据存量高达60PB,如果用一张A4纸正反面写满数字,把A4纸叠起来可以装15万辆卡车。仓库里面有多少张表呢?大概是上万张。我们每年计算/存储成本非常高。

大数据的挖掘、分析和运算就是我们的CPU,我们每天的运算量需要2万个CPU,相当于200个地球上的100亿人24小时不间断的运算。

数据处理。这么庞大的数据量在数据仓库内是如何运作的?数据仓库组件分为四类:存储框架、开发工具、数据保障和数据管理。

第一, 存储框架。包含(阿里云)ODPS、HDFS、Oracle、HBASE等。

第二,开发工具。分为开发平台和调度器。调度器代表对这个关系的依赖,让这个任务完成之后进行下一个任务的通知和运行。

第三,数据保障机制,通过数据监控去做保障,监控任务、数据异常并报警,通过任务调度管理保障数据任务的优先级和数据质量。之前说我们数据仓库里有上万张表,对每一个生产表打标签,快速定位到我们想要的表就是数据地图。数据健康,如果1TB数据执行一个小时,就代表很慢,就可以通过数据优化判断出你的任务,你的数据表可能不够健康,你的健康分会被降低,健康分降低了优先级就会降低。

第四,数据管理,比如开发规范、数据空间管理、元数据管理。

1)开发规范。这么大的数据量为避免数据重复开发和浪费,我们会对代码和命名进行有效规范。还可以通过方法论,比如数据分层、统一语言,索引条件优先等级划分,都需要记录在开发规范中。

2)数据空间,就是我们有这么一个平台能看到各个BU、各个平台、各个部门现在的数据状况。比如,有些同学可能SQL写的有问题,出现倾斜之类的,我们能够快速的发现并通知,及时修复和优化。

3)源数据管理,就是在这么大的一个数据管理里面快速查找到数据表是什么情况,这个数据是不是做了压缩,包括任务是谁提交的,提交时间等。同时还有每个数据公司对自己的数据资产有一个盘点,有一个清晰的认识。当前我们到底有什么数据,这样的一个数据洞察的体系。

二、数据挖掘,如何让杂乱数据统一、分层解耦?

数据处理之后,是数据挖掘。数据挖掘一般分为6个步骤:数据挖掘、数据ETL,第三个是对数据进行分析,然后提取出特征工程,从而进行模拟训练,然后再进行模型评估。

今天我们重点讲两块,一个是数据的ETL,一个是特征工程。

ETL是什么呢?就是清洗、加工和加载。

第一是控制处理;

第二是数据格式化,比如说时间格式,有些是秒,有些是毫秒,有些直接采用的就是年月日时分秒,用的时候肯定要统一,让下游很方便的应用;

第三是数据的验证。在我们已有的知识体系、业务逻辑、常识中,对数据的逻辑性进行一个判别,如果不符合逻辑的话,我们把这个数据进行达标和分割存储; 第四是数据补充。就是手机都会采集设备上的经纬度,是一个负点数,我们并不能直接理解,需要对数据进行分割化,圈出一块区域,对数据做POI关联,把经纬度做转化;

第五是公共层。以前的数据库讲的是泛式关系,大数据更多是OLTP、OLAP的概念。我们更多的以事实行为去做事实宽表。比如说维度表以及数据的立方体。这里面提到了数据达标和数据分割,一般会遵守的准则是所有的数据进到了数据仓库,哪怕这个数据是无用的、是空的,我们也不会剔除。

有很多数据需要做数据分层,比方说今天重新建了一张表,这个业务发生变化了。现在互联网的状态就是拥抱变化,每周都会不停的在开发新表,如何用2分钟就把这个表变了。分层业界里面都会分为三层:数据接入层ODS、数据公共层CDM、数据应用层ADS。我们针对明细数据做分析,比如说广州市是广东省的这样一个对应关系。公共聚合层就是数据立方体,数据应用层就是针对不同的业务去划分独特的一块区域,通过分层可以做到业务解耦。

数据加工中的一个拉链表,左边这张表记录了小明每年的学籍,小明在2012-2013年之间都是小学,我们记录开始时间和结束时间。左边这个数据到右边这个数据很频繁,只记录状态的变化就可以了。这个场景可能会应用于哪些行业呢?比如电商系统,这个商品今天做促销,明天促销就取消了,对商品价格打一个快照。

这个表主要就是为了节省存储空间,让运算速度更快。刚刚提到了数据立方体,做数据分析的同学会经常接触,也就是QB。

简单的画了一个图,横坐标是一个季度的维度,纵坐标是品类的维度,还有地区维度,构成三维立方体。现实中的维度远远不止三个,它会变成9块,每个这样的组合至少有9种组合关系,现实中这个关系有可能是10个、20个。当扩大到20的时候数据量非常庞大。怎么处理呢?维度的组合关系,一般还会有一级分类、二级分类,一级分类必然是和二级分类有关系。比如江苏省,另一个维度是城市,南京市必然是江苏省,把这些维度做一些关联,我们一般叫关联维度的结合。

数据立方体的钻取。就是对某一个维度进行下钻,对月份进行下钻,就是对维度进行细分。我们来看一个季度的分布,上卷就看到一、二、三季度的分布。我们锁定了品类的维度叫电子产品,去看季度、地区的情况,这叫切片。切块很简单,多个维度就变成了切块。以季度和地区去看品类的情况,做立体三维空间的反转,就是数据立方体。

三. 特征加工,如何提取有价值的特征?

如何在这么多数据中提取跟用户相关、跟设备相关的特征?通常将特征分为四大类,第一是基本特征,比如空降的种类、数量、金额、重量、长度等;还有时间上的时长、次数、购买次数;还有比例上的,比如男女比例,平均比例等;还有复杂特征,就是将基本特征和统计特征做一个组合;还有自然特征,比如声音、图像等。

对这个特征进行分析,大概会分为这几个步骤,特征分析、特征选取、特征评估。比如对用户的换机的判断。第一步先要去想特征, 比如性别、年龄、收入水平、财富水平,兴趣偏好等。

第二块就是从现有的数据里提取出来,能够采集到APP数据,用户喜欢哪个APP,是玩游戏还是购物。特征的评估是针对这个数据做分析,比如这个数据是不是可靠。

简述特征处理的3种方式

1)二值化:将一个特征转换成用0/1表示的多个特征

解决两个特征的差没有意义的情况,尤其针对枚举值; 例如:性别男和女,或者年龄段,比如20、30相加相减都是没有意义的。所以我们处理特征,第一位1表示男,第2位1表示女。

2)权重和平滑处理

用户特征往往无法拿到具体值,比如品牌特征,用户往往并不是只对某一品牌感兴趣,而是对多个品牌感兴趣,只是感兴趣的程度不一样。例如:[lily:0.5, Loft Shine:0.2, J.crew:0.15];时间衰减,历史数据进行权重处理,如果没有新增,数据更平滑。

3)合理化:异常值发现

根据常识或知识体系,剔除不合理数据,避免对特征的影响。 比如,一个用户的定位数据,100条记录都在北京,其中有1条在广州且时间与其他记录相差几分钟,可以对该数据进行标注。