为什么选择这样的大数据平台架构?

中国移动大数据2019-03-22 11:07:29

当前BAT基本公开了其大数据平台大致架构,从网上也能查询到一些资料,关于大数据平台的各类技术介绍也不少,但在那个机制、那个环境、那个人才、那个薪酬体系下,对于传统企业,可借鉴的东西也是有限。

技术最终为业务服务,没必要一定要追求先进性,各个企业应根据自己的实际情况去选择自己的技术路径。

与传统的更多从技术的角度来看待大数据平台架构的方式不同,笔者这次,更多的从业务的视角来谈谈关于大数据架构的理解,即更多的会问为什么要采用这个架构,到底能给业务带来多大价值,实践的最终结果是什么。

它不一定具有通用性,但从一定程度讲,这个架构可能比BAT的架构更适应大多数企业的情况,毕竟,大多数企业,数据没到那个份上,也不可能完全自研,权当抛砖引玉。

 大数据平台架构的层次划分没啥标准,以前笔者曾经做过大数据应用规划,也是非常纠结,因为应用的分类也是横纵交错,后来还是觉得体现一个“能用”原则,清晰且容易理解,能指导建设,这里将大数据平台划分为“四横一纵”。


“四横一纵”



具体见下图示例,这张图是比较经典的,也是妥协的结果,跟当前网上很多的大数据架构图都可以作一定的映射。

何谓四横,基本还是根据数据的流向自底向上划分四层,跟传统的数据仓库其实很类似,数据类的系统,概念上还是相通的,分别为数据采集层、数据处理层、数据开放层及应用层。

同时,大数据平台架构跟传统数据仓库有一个不同,就是同一层次,为了满足不同的场景,会采用更多的技术组件,体现百花齐放的特点,这是一个难点。

数据采集层:既包括传统的ETL离线采集、也有实时采集、互联网爬虫解析等等。 

数据处理层:根据数据处理场景要求不同,可以划分为HADOOP、MPP、流处理等等,另一方面,也包含了分析引擎,比如机器学习的算法。

据开放层:主要是实现读写分离,将偏向应用的查询等能力与计算能力剥离,包括实时查询、多维查询、常规查询等应用场景。 

应用层:根据企业的特点不同划分不同类别的应用,比如针对运营商,对内有精准营销、客服投诉、基站分析等,对外有基于位置的客流、基于标签的广告应用等等。

管理层:主要是实现数据的管理和运维,它横跨多层,实现统一管理。 


数据采集层


首先来谈谈数据采集层,这是基础。

 离线批量采集,采用的是HADOOP,这个已经成为当前流线采集的主流引擎了,基于这个平台,需要部署数据采集应用或工具。

 诸如BAT都是自己研发的产品,一般企业,可以采用商用版本,现在这类选择很多,比如华为BDI、亚信橘云(应该已升级了)等等,很多企业技术实力有,但起步的时候往往对于应用场景的理解比较弱,细节做工很差,导致做出来的产品难以达到要求,比如缺乏统计功能等,传统企业去采购这类产品,风险也是很大的。

一个建议是,当采购产品的时候,除了技术先进性,更多的应该问问是版本啥时候上线的,是否在哪里成功部署,是否有足够多的客户,如果能做个测试就更好,否则,你就是小白鼠哦,这个坑踩了不少,算是给个忠告。

能做和做成产品是两个境界的事情,小的互联网企业当然也能做出对于自己好用的采集工具,但它很难抽象并打造出一个真正的产品,BAT自研其实有巨大的优势,传统企业在技术上落后其一代甚至二代也并不奇怪。

实时采集现在也成了大数据平台的标配,估计主流就是FLUME+KAFKA,然后结合流处理+内存数据库吧,这个技术肯定靠谱,但这类开源的东西好是好,但一旦出现问题往往解决周期非常长,我们曾经碰到FLUME总是写不进KAFKA的堵塞问题,至今还难以找到根本原因。

除了用FLUME,针对ORACLE数据库的表为了实现实时采集,也可以采用OGG等技术实现实时的日志采集,可以解决传统数据仓库抽全量表的负荷问题。

爬虫当前也逐渐成为很多企业的采集标配,因为互联网新增数据主要靠它,可以通过网页的解析获取大量的上网信息,什么舆情分析、网站排名啥的,建议每个企业都应该建立企业级的爬虫中心,如果它未在你的大数据平台规划内,可以考虑一下,能拿的数据都不拿,就没什么好说了。

企业级的爬虫中心的建设难度蛮大,因为不仅仅是需要爬虫,还需要建立网址和应用知识库,需要基于网页文本进行中文分词,倒排序及文本挖掘等,这一套下来,挑战太大了,当前已经有不少开源组件了,比如solr、lucent及Nutch,但要用好它,路漫漫其修远兮。

还有一个就是,如果有可能,笔者建议将数据采集平台升级为数据交换平台,因为其实企业内有大量的数据流动,不仅仅是单向的数据采集,而且有很多数据交换,比如需要从ORACLE倒数据到GBASE,从HBASE倒数据到ASTER等等,对于应用来讲,这个价值很大。 

既然数据采集和数据交换有很多功能非常类似,为什么不做整合呢?也便于统一管理,感觉企业的数据交换大量都是应用驱动,接口管理乱七八糟,这也是我的一个建议,别跟我提高大上的企业总线,那个对于批量数据类并不合适。

总得来讲,建设大数据采集平台非常不易,从客户的角度讲,至少要达到以下三个要求:

多样化数据采集能力:支持对表、文件、消息等多种数据的实时增量数据采集(使用flume、消息队列、OGG等技术)和批量数据分布式采集等能力(SQOOP、FTP VOER HDFS),比基于传统ETL性能有量级上的提升,这是根本。

可视化快速配置能力:提供图形化的开发和维护界面,支持图形化拖拽式开发,免代码编写,降低采集难度,每配置一个数据接口耗时很短,以降低人工成本。

统一调度管控能力:实现采集任务的统一调度,可支持Hadoop的多种技术组件(如 MapReduce、Spark 、HIVE)、关系型数据库存储过程、 shell脚本等,支持多种调度策略(时间/接口通知/手工)。


数据处理层


接下来谈谈数据处理层,现在有个词叫混搭,的确是这样。

Hadoop的HIVE是传统数据仓库的一种分布式替代。应用在传统ETL中的数据的清洗、过滤、转化及直接汇总等场景很适合,数据量越大,它的性价比越高。但目前为止看,其支撑的数据分析场景也是有限的,简单的离线的海量分析计算是它所擅长的,相对应的,复杂的关联交叉运算其速度很慢。

一定程度讲,比如企业客户统一视图宽表用HIVE做比较低效,因为涉及到多方数据的整合,但不是不可以做,最多慢点嘛,还是要讲究个平衡。

Hadoop到了1000台集群的规模也撑不住了,当前很多企业的数据量应该会超过这个数量,除了像阿里等自身有研发能力的企业(比如ODPS),是否也要走向按照业务拆分Hadoop集群的道路?

Hadoop的SPARK的机制很适合机器学习的迭代,但能否大规模的应用于数据关联分析,能否一定程度替代MPP,还需要实践来验证。

MPP应该来说,是采用分布式架构对于传统数据仓库最好的替代,毕竟其实际上是变了种的关系型数据库,对于SQL提供完整支持,在HIVE做了转化分析后,数据仓库的融合建模用它来做性能绰绰有余,其综合能力比传统DB2、Teradata似乎更好一点。

比如经过实用,Gbase30-40台集群就能超过2台顶配的IBM 780,但过了百台也会面临瓶颈,毕竟受关系型数据库天生的限制。

MPP现在产品很多,我不能做优劣判断,但一些实践结果可以说下,GBASE是堪当大任的,很多系统已经在上面跑了,主要还是国产的,技术保障靠谱,ASTER还有待观望,但其自带一些算法库是有其一些优势,GreenPlum、Vertica没用过,不好说。

现在有个说法是MPP最终也要被Hadoop那套框架替代,毕竟诸如SPARK啥的都在逐步稳定和成熟,但在短期内,我觉得还是很靠谱的,如果数据仓库要采用渐进的演化方式,MPP的确是很好的选择。 

现在诸如中国移动,eBAY等大量公司都在采用这类混搭结构,我想是有一定道理的。

大数据平台的三驾马车,少不了流处理。

对于很多企业来讲,其显然是核武器般的存在,大量的应用场景需要它,因此务必要进行建设,比如在IOE时代不可想象的实时、准实时数据仓库场景,在流处理那里就变得很简单了,以前统计个实时指标,也是很痛苦的事情,当前比如反欺诈实时系统,一天系统就申请部署好了。

只尝试过STORM和IBM STREAM,推荐IBM STREAM,虽然是商业版本,但其处理能力超过STORM不是一点半点,据说STORM也基本不更新了,但其实数据量,用啥都可以。


机器学习引擎



再来谈谈机器学习引擎吧。

R和Python是当前数据挖掘开源领域的一对基友,如果要说取舍,笔者真说不出来,可以这么比喻,虽然不贴切,R是算法中的C语言,Python是C语言的算法,两者是有侧重的,Python更偏向工程一点,比如有对分词啥的直接支撑,R的绘图能力异常强大。但他们原来都以样本统计为主,因此大规模数据的支撑有限。

笔者还是更关注分布式挖掘环境,SPARK是一种选择,它提供了Mllib库,SPARK同时也支持Python,因此,SPARK是大规模机器学习的一种环境选择,是否可以采用SPARK+Python? 现在很多企业用SPARK+scala,毕竟SPARK是用scala写得,的确有点凌乱。

TD的MPP数据库ASTER也内嵌了很多算法,应该基于并行架构做了很多优化,似乎也是一种选择,以前做过几度交往圈,速度的确很快,但使用资料屈指可数,还需要老外的支持。

传统的数据挖掘工具也不甘人后,SPSS现在有IBM SPSS Analytic Server,加强了对于大数据hadoop的支撑,笔者对其也蛮好奇,不知道到底会怎么样?

无论如何,工具仅仅是工具,最终靠的还是算法工程师。


数据开放层


最后,讨论下数据开放层,也处在一个战国时代。

曾经有些工程师直接将HIVE作为查询输出,虽然笑掉大牙,也体现出计算和查询对于技术能力要求完全不同,即使是查询领域,也需要根据不同的场景,选择不同的技术。

HBASE很好用,基于列存储,查询速度毫秒级,对于一般的百亿级的记录查询那也是能力杠杠的,具有一定的高可用性,我们生产上的详单查询、指标库查询都是很好的应用场景。但读取数据方面只支持通过key或者key范围读取,因此要设计好rowkey。

K-V数据库Redis都能做,读写速度比HBASE更快,大多时候,HBASE能做的,Redis也能做,但Redis是基于内存的,主要用在key-value 的内存缓存,有丢失数据的可能,当前对外标签的标签实时查询都用它,也是互联网或广告公司主流的技术组件了,但如果数据越来越大,那么,HBASE估计就是唯一的选择了。

另外在用IMPALA提供互联网日志的实时在线分析,也在尝试在营销平台采用SQLFire和GemFire实现分布式的基于内存的SQL关联分析,虽然速度可以,但也是困难重重,引入和改造的代价非常大。


革命性价值



最后,提一下大数据平台的一些革命性价值。

你会发现,大数据平台采用的技术组件,基本都是分布式的,可扩展的,这是其较传统系统的最大区别,大数据平台实际上是架构在云资源池上的。

其次,大数据平台还特别强调支持应用以多租户方式接入,租户间可实现资源隔离,并支持动态扩缩容,比如当前我们开发一个号码价值应用,环境开通基本是所见即所得,以前从申请到集成完成,还是以月单位,效率不可同日而语,这个意义极其深远。

最后,大数据时代,架构必然向着多元化发展,所谓合久必分,不再有一种技术能包打天下了,冲击着传统企业集中化的技术外包模式,挑战是何等巨大。

大数据及云计算时代,面多这么多技术组件,要采用一项新的技术,笔者也时常凌乱和发抖,怕听到技术人员跟我讲哪里又出现BUG了,数据又出不来,技术一日千里,BAT、新型互联网企业在风卷残云般的席卷人才,华为等巨鳄也对大数据人才虎视眈眈,而我们的人才增长却是龟速,传统企业在技术上要有所突破,是何其艰难!

Copyright © 古田计算器虚拟社区@2017