摘要: 摘要传统的数据分析经常使用的工具是Hadoop或Spark在使用之前环境是需要用户自己去搭建的。随着业务逐渐向云迁移如何在云上进行大数据分析是需要解决的问题。为此阿里云提供了一项很重要的服务——大数据计算服务MaxCompute。
本次的分享主要分为三部分:
一、企业云上搭建的数据分析平台:该部分主要介绍阿里云搭建的数据分析平台整体架构和分析流程。
二、大数据计算服务MaxCompute:该部分主要介绍了大数据计算服务MaxCompute的具体情况,包括特点、使用场景、功能组成以及使用过程中的注意事项,同时介绍了驻云科技使用MaxCompute完成的客户案例。
一、企业云上搭建的数据分析平台
在了解MaxCompute之前,我们先来了解一下目前阿里云上搭建的数据分析平台整体架构(如下图)。最左侧是数据源,在帮用户做数据分析的时候,首先需要明确数据源是在什么地方,比如线下的数据库如MySQL、SQLserver或Oracle,还有一些是在自己业务系统里面,比如服务器的日志等,目前有的用户也将数据存放在NoSQL的数据库中,总之数据源多种多样,数据源的位置是首先需要明确的;然后需要把数据抽取到云端,用于在云上进行数据分析,不管用户是否使用云服务,都可以使用数据集成技术将离线或实时数据抽取到阿里云与数据处理相关的服务中,对于离线数据使用的是数据集成CDP,对于流式计算产生的实时数据使用的是DataHub;所抽取的数据会用到三个与数据处理相关的服务,一个是MaxCompute用来做离线计算,一个是分析型数据库做在线数据分析,类似于OLAP场景,最后一个是流式计算于正常流式计算服务;这三个服务处理过的数据可以通过SQL、MapReduce、Graph或机器学习的方式进行分析;经过分析的数据结果最终可以通过阿里云的数据应用进行展示,大数据领域中的一个子领域是数据可视化,关注如何将数据分析结果进行展示,阿里云针对这点提供了很多数据应用,主要的应用又两个,一个是QuickBI,将结果通过报表的形式进行展示,另外一个是DataV,通过大图形式进行展示。以上是在云端比较完整的数据处理分析流程,在以上过程中,阿里云会提供一个可视化的平台,让用户以可见的方式进行数据处理与分析,不像传统的数据处理需要通过命令行,缺乏交互性,上手难度高。
上述过程中,用的比较多的是MaxCompute服务,这也是我们今天介绍的重点——如何使用MaxCompute进行数据分析。
二、大数据计算服务MaxCompute
介绍
MaxCompute原来叫做ODPS,它是阿里云自主研发的支持离线数据分析的服务,离线计算说明数据处理的实时性要求没有那么高,目前的处理能力可以达到TB/PB级别,阿里云曾经用了六个小时对100个PB的数据完成了处理。目前MaxCompute被广泛应用于数据分析、挖掘、商业智能等领域,另外,阿里巴巴的数据业务都运行在MaxCompute之上。
特点海量运算触手可得。MaxCompute可以理解为阿里云已经为用户搭建好了数据处理的平台,平台背后有上万台的服务器集群支持,可以根据数据规模自动调整集群存储和计算能力,最大化发挥数据的价值。对于用户来讲,只需要将自己的数据上传,就可以对数据进行处理和分析,而不需要自己搭建数据处理环境。
服务“开箱即用”。MaxCompute服务的使用不需要任何的复杂配置,只需要简单的几步操作,就可以上传数据,分析数据并得到分析结果。之前有一个企业客户是做手机软件数据收集的,收集的是手机用户app使用相关的行为数据,通过这些数据分析手机用户的应用偏好,然后将结果卖给第三方的公司,比如广告或app的应用厂商。这家企业起初选择的是Hadoop来进行数据分析,因为Hadoop的存在时间比较久了,发展较为成熟,同时也是开源的,但是企业缺少使用Hadoop进行大数据分析的技术人员,现有的开发人员和技术人员只能自己去学习如何搭建Hadoop环境,如何使用Hadoop去做数据分析,整个Hadoop的研究学习差不多耗费了半年时间,仅仅使用了两台服务器,可以想象如果服务器变多,复杂度又会大大提升。最终,由于业务上没有因为Hadoop的研究使用出现什么进展。该企业转向了MaxCompute服务,底层的集群如何搭建他们不需要关心,只需要将数据上传、然后按照业务需求进行分析即可。
数据存储安全可靠。使用MaxCompute的安全性可以得到保障,实现的技术是三重备份防止数据丢失,另外还有一些读写鉴权、应用沙箱、系统沙箱等多层次安全机制来保证数据之间访问的时候不会出现不安全的因素。
多用户协作。MaxCompute是在云上提供服务的,只要是阿里云的用户,都可以在云上使用它来进行数据分析,支持多用户协作。传统数据分析中会出现“数据孤岛”,即企业中不同业务部门都有自己的数据,数据之间互相不透明,从而导致信息孤岛。而使用MaxCompute可以将整个企业中所有业务部门的数据打通,减少数据孤岛,在保障数据安全的前提下最大化工作效率。
按量付费。这一点其实的是和云服务是类似的,根据用户的实际使用方式和需求进行收费,这样可以避免像传统的数据分析集群空闲而导致的资源浪费,最大化降低数据的使用成本。另外,MaxCompute目前支持包年包月的计费形式,因为有些用户进行数据分析的次数比较频繁,比如每天业务结束之后都会进行结算处理,这种情况下使用按量付费可能不那么划算,而更适合使用包年包月的形式。
MaxCompute的使用场景
基于SQL构建大规模数据仓库系统和BI系统
传统情况下,可以通过第三方的服务和开源的技术搭建企业数据仓库系统,现在可以基于MaxCompute在云上方便地搭建。
基于DAG/Graph构建大型分布式系统
DAG是Spark中的有向无环图,MaxCompute也是支持这种类似于Spark的计算方式的;另外MaxCompute也支持Graph的计算方式,比如在社交领域中(游戏)所做的社交分析。在所构建的大型分布式系统中,可以通过SDK的方式来调用底层的MapReduce来进行数据分析处理。
基于统计和机器学习的大数据统计和数据挖掘
并不是说MaxCompute本身支持机器学习,而是可以和机器学习来结合使用。因为拿到数据后,在数据处理之前会对数据进行清洗和预处理,处理完之后可以将这些数据交给机器学习平台,在机器学习平台中做一些深入的机器学习处理算法,比如可以将MaxCompute的结果作为训练的数据给机器学习平台进行训练并建立模型。MaxCompute中提供专门的接口来对接机器学习平台
MaxCompute的功能组成
MaxCompute的主要功能包括以下四个:
数据上传下载。数据原本是存放在自己的数据源中,想要使用MaxCompute进行数据分析,需要将数据上传到MaxCompute中,如果数据不在MaxCompute中,是没有办法做数据分析的,上传之后处理计算的结果还可以进行下载。数据的上传下载主要用到的是Tunnel 的模块,可使用的方式有两种,一种是Tunnel SDK,另一种是tunnel命令行工具。此外还可以借助第三方的集成插件来做数据的上传和下载,比如阿里云专门的数据集成方式以及阿里云开源服务DataX。
SQL便捷开发。数据的上传后就可以进行分析,首先可以使用SQL,MaxCompute支持SQL的使用来辅助计算,这个SQL和常用的SQL是类似的(百分之九十以上兼容)。大家如果熟悉Hive(Hadoop开源生态的一员,通过SQL语句做数据分析)的话会发现,MaxCompute支持的SQL和Hive的风格类似。因为Hive是开源的,有很多人用过,阿里云在推出MaxCompute的时候,如果使用全新的SQL风格,用户的学习成本会增加,而使用和其他工具类似的风格,用户学习起来也比较容易。
自定义函数。在使用SQL进行计算的时候,有些没有办法通过内置的函数来解决,这时候就可以使用MaxCompute支持的自定义函数功能来解决。目前所支持的自定义函数包括自定义标量函数、自定义表值函数和自定义聚组函数。
分布式编程模型。如果有些场景比较复杂,通过SQL没办法解决,可以使用MaxCompute支持的分布式编程模型,用户可以自己编写应用逻辑来做数据分析。其中,所支持的分布式编程模型有两种,一种是MapReduce,用户可以自己写mapper和reducer来进行数据分析;另外一种是Graph,通过图计算的方式来对数据进行分析。
上述的功能究竟该选择哪个呢?我们通过下图来帮助大家进行功能的选择。首先,在使用的时候用户需要明确数据是否已经上传到MaxCompute,如果没有,可以通过Tunnel或第三方的一些工具上传数据;数据上传之后看是否可以使用简单的SQL语句来处理,如果可以使用,则建议首先使用SQL来做处理;如果通过简函数功能不足,无法使用SQL来进行处理,这个时候可以考虑是否可以使用自定义函数(UDF)来进行处理。如果可以,则需要编写自定义函数,使用SQL调用UDF来处理数据;否则,考虑使用MR或Graph的方式来对数据进行处理。之所以这样建议功能选择,是基于由简到难的考虑,使用SQL是最简单的,UDF自定义函数难度提高,但本质还是基于SQL,基于MR或Graph的方式涉及到使用Java做应用开发,需要对框架熟悉,才能对数据做相应的处理和分析,难度最大。
接下来的介绍一下云端进行数据分析的过程中,需要用户参与的工作主要有两个,一个是自定义函数UDF的开发,另一个是编写MapReduce。
自定义函数UDF的开发。第一步首先用户需要在本地将开发UDF的环境安装配置好,阿里云的UDF开发语言以Java为主,其他语音如Python也在逐步支持。如果用Java进行开发,那相应的开发环境如Eclipse等需要安装,开发完成后可以使用本地模式进行测试。第二步是将开发并测试通过的UDF导出生成Jar包。第三步是使用odpscmd命令将本地生成的Jar包上传到MaxCompute,将其作为资源来使用。第四步是在MaxCompute中,基于上传的Jar包资源生成自定义函数。最后一步是在MaxCompute中写SQL语句并测试使用自定义函数。
MapReduce开发。MapReduce开发的核心是编写mapper和reducer,和传统的Hadoop中的MapReduce的编写是类似的,只是MaxCompute做了很好的封装,很多代码都帮助用户写好了。MaxCompute中MapReduce的开发流程是:第一步安装配置环境;第二步开发MapReduce程序;第三步在本地模式下测试脚本;第四步在开发测试完没有问题后,导出Jar包供云端使用;第五步将Jar包上传至MaxCompute项目空间;第六步在MaxCompute中使用MapReduce。其中本地测试有两个好处,一个是不会对线上的环境产生影响,另一个是只需要编写测试的数据就可以在本地进行测试。
MaxCompute使用的注意事项
元数据不一致。大家在使用MaxCompute进行数据处理的时候,经常会面临元数据不一致的情况。东方航空大数据开发人员曾经说过一件很有意思的事情,那就是东航现在不知道自己有多少架飞机,究其原因是因为内部的元数据没有保持一致,或者说数据缺乏标准的定义。这种情况下常用的方法是定义标准的元数据,创建Map表或者定义转换规则,清洗数据。举个简单的例子,比如现在有两张表,customers表和kh表(如下图),都与用户信息相关,customers表中性别(Gender)使用M代表男性,F代表女性,而在kh表中性别(XB)男性使用“男”表示,女性使用“女”表示;另外可以发现,除了性别,这两张表中对于身高的定义也是是不一致的,前者采用的是厘米为单位的身高计量方式,而后者采用的是尺寸的计量方式。这种情况下数据分析过程中如果两个表需要做join,就没有办法做分析,所以说需要对元数据进行统一。具体怎么做呢?比方说创建一张map_gender的表,对涉及到性别的元数据进行统一,比如用1来表示男性,2来表示女性,再比如统一用厘米为单位来计量身高,对于尺寸为单位的计量,通过公式进行转换。这样的好处是生成图最右侧的两张表,表中的元数据便实现了统一,便于数据分析。
数据缺失。在做数据分析的时候,不能够保证收集的数据一定是完全的,数据总归会出现缺失的情况,在这种情况下,我们来看一下该怎么处理。如果数据缺失比较少的话,可以简单的扔掉不予考虑,比如有一亿条数据,有一万行数据是缺失的,这一万行数据的缺失对整个结果影响不大,这个时候就可以不考虑这一万行数据的缺失;而如果这一亿行数据缺失了六七千万行,那算出的数据肯定是不可靠的,这个时候就不能简单的丢弃。常用的方法有三种,最简单的是填充固定值,比如下图左边的表中有一行性别是缺失的,可以置-1,代表这一行的性别值缺失或未知;第二种方式是填充统计值,如平均值、极值或众数等;前两种方法都存在一定的随机性,可靠性不高,随着机器学习算法的普及,经常使用的第三种方式是拟合,通过模型或者规则进行拟合,得到最应该填的值,这个结果是相对来讲更可靠的,更加接近于真实的值。还有一种情况是在数据收集的时候数据就缺失了,比如通过滴滴打车收集的数据来分析企业的加班情况,但是某些企业可能会有自己的班车或者其他的原因,这样就导致有些数据本身就没有收集到,这种情况的数据缺失对于结果的影响会更大。
数据仓库的搭建。在使用MaxCompute搭建数据仓库的时候,建议使用分层的方式,比如分成ODS、EDW和ADM三种不同的层次来进行搭建,其中ODS实现准时、跨领域的运营细节的查询,已获得细粒度的运营数据展现;EDW层实现基于历史数据的统计分析和数据挖掘,已获得客户深层次的特征和市场发展规律;ADM层在数据的基础上进行加工汇总形成的指标数据存储分析型和加工汇总型数据。这样做的好处是结构清晰,功能明确,任何变动可以很快的完成修改。另外,分层搭建数仓的时候,表的命名有一定的要求,比如ODS层中的表中含有ODS,直接告诉用户这张表是在ODS层,或者明确表标明表应用的业务域。
应用案例
最后向大家介绍驻云科技曾经做过的一个客户案例,是帮助某智慧商场搭建大数据架构,如下图所示。商场的需求是了解每一层的商铺销量,如果商铺的销量很低,就把它关掉;另外还想要了解用户的购物习惯,为用户做精准推送。为了满足商场需求,需要分析的数据来源有很多,除了线下数据库,还有一些文本数据,驻云通过编写shell脚本对文本数据进行清洗,然后存放在阿里云的OSS中,OSS可以作为MaxCompute的外部表,不需要导入MaxCompute便可以进行分析,虽然性能会有一定的损失,但相对于其所带来的灵活性,损失是可以接受的。不同数据源的数据导入MaxCompute可以使用的方法有多种,除了阿里云提供的数据集成服务,还可以采用第三方或者开源工具DataX,这种方式的好处是可以实现灵活定制。所有数据整合到MaxCompute中后便可以进行分析,分析完后结果展示的方式有两种,第一种是将MaxCompute的分析结果通过数据集成的方式导入到阿里云的RDS中,然后在Data-V中进行展示。为什么需要导入到RDS中而不是直接导入Data-V呢?需要注意的是,MaxCompute实现的是离线计算,实时性要求是不高的,而Data-V是一个大屏,对数据的实时性要求很高,所以一般的过程是将结果先导入到数据库中,然后从数据库中再读取相关数据在Data-V中做大图展示。还有一种方式是不做大屏展示,而是做报表分析,这种情况下可以将MaxCompute的数据直接在Quick-BI中展示,也可以在阿里云的ADS数据库进行存储和二次分析,分析完之后再在Quick-BI中展现。这两种方式的展现形式有一定的重合性,比如二维的饼图等,但是Data-V可以展现三维地图等形式,通过大屏很直观的展现。这两种展现方式可以根据需求选择。
本文为云栖社区原创内容,未经允许不得转载。
原文地址:http://blog.51cto.com/13876536/2154447