数据工程师必须掌握的7个大数据实战项目

文章导语:

做为一名电影爱好者,我阅片无数,有些片子还常常翻来覆去看个好几遍。小时候由于这事儿,没少被我妈抓耳朵,“看过的片子为啥还要倒二遍?”我也说不上来,就是单纯的爱看。html

男人爱看的电影,以武侠,动做,科技为多,也认识了一帮明星,好比尼古拉斯凯奇,史泰龙,李小龙,成龙,李连杰,甄子丹等等。这些人很猛,有男人气。只要是他们的片儿,确定不落下。在我眼里,他们就是好片代名词。java

不知几什么时候,电影上开始出现一些不认识的男明星了,好比张翰,韩庚,鹿晗等等。看着这些人主演的片子,真是…哎,能不睡着就算是对得起票钱了。web

后来我从半佛那里才知道,啥叫鲜肉,啥叫老阿姨审美。假如看到有更嫩的男演员,不用问了,老阿姨审美又变了。注定又是一部烂片。算法

那么,审美能够变,审词呢?数据库

好比这几年,媒体一直在炒做的大数据,用前卫的词儿来讲,Big Data. 听得人耳朵老茧都涨了一层。那么 你们是真把它当作有效的工具呢,仍是执拗的认为又是换汤不换药的营销噱头呢?编程

为弄清楚这个问题,我查了不少资料,中文的,外文的,百度文库的, Google 论文。期间的所见所闻能够写 3 部小说还不止。小程序

令我印象最深的还属这件事:微信小程序

《纽约时报》将 1851 - 1922 之间的 1100 多万篇文章,在24小时内花费3000美金,转成 PDF 供大众搜索查看。缓存

资料背景指出,这些文章已经作好了 TIFF 图档格式,要解决的本质问题就是将 TIFF 转换成 PDF.这件事情,工做量很是大。单纯写代码转换,可行,但对完工时间很差把握。服务器

此时有个工程师,仅凭一人之力完成了这项工做,整个过程,他只作了 4 件事情:

1) 首先他是资深编程爱好者。日常阅读技术Blog,知道 AWS, S3,EC2 等云计算概念,还熟悉 Google 的 MapReduce 论文,而且知道 Hadoop 的功能。

2)因而他本身在他的我的电脑上,搭建了Hadoop,玩起大数据,利用 MapReduce 来试着完成 TIFF 到 PDF 的转换;

3)接着在 Amazon 上申请 4 台 EC2 的主机,搭建了 Hadoop 集群,跑了一批 TIFF 到 PDF 转换程序。发现竟然可行。

4)大规模实施批量转换,用了 24 个小时,3000 美金,最终将 1100 万文章的影音图像,转成了 PDF,并对外提供服务。

再举一些通过报道的大数据应用案例:

  • Yahoo!使用4000节点的集群运行 Hadoop, 支持广告系统和 Web 搜索;
  • Facebook 使用 1000 节点运行 Hadoop, 存储日志数据,支持其上的数据分析和机器学习;
  • 百度使用 Hadoop 处理每周 200TB 的数据,进行搜索日志分析和网页数据挖掘工做;
  • 中移动基于 Hadoop 开发了 BigCloud 系统,提供对内外的数据支持;
  • 淘宝的 Hadoop 则处理电子商务交易数据。

初学者要入门大数据,最好的方式,从了解具体的应用开始。掌握大数据能作哪些事情,完成哪些小数据作不到的功能,学着才有意思。只有学着有意思,才会继续往下学。越学越想学,越学越开心,天然也就学好了。

接下来,我整理一些大数据已经发挥它真正做用的应用场景,若是你要作大数据项目,确定离不开这7个范畴。

所以,你说大数据离咱们远吗,我说确定很近。无论你信不信,反正我信了。


项目一:数据整合

说到数据整合,咱们作数据的人,通常想到的是数据仓库。

image

当咱们有不少应用,好比 MES, ERP, HR, SALES AND Marketing, CRM 等,每一个应用都是一些独立的数据岛,每一个使用这些应用的人,均可以从这些应用里面找到本身想要的数据和答案,若是找不到也能够找IT帮你作报表。

可是当咱们须要的数据,是整条完整的数据链,这些系统就显得无力了。好比咱们要分析每一个 ERP 的成本中心,到底分摊到每一个车间,每道工序,有多少成本时,仅仅靠ERP就无能为力了,必须将 MES 的数据导入ERP,综合起来分析。此时,ERP数据就会整合部分的MES数据。但自己ERP是排斥这些MES数据的,过于详细,对BOM,PP等的支持粒度不够,须要从新写代码完善。

那么与其把这些数据都导入ERP,再从新编码,那还不如将MES,ERP的数据整合到一个数据库里面,从新出完整的数据字典,供财务或者运营去作分析。这就是数据仓库的做用了。

若是HR也想要从数据中,获得招聘人员的产出,一样也须要整合HR系统。CRM的分析师,可能想知道某个客户的利润,是否与生产成正相关,总不能让利润最少的客户长期霸占工厂的资源吧。所以CRM也能够接入到数据仓库来。

当数据仓库数据量超额时,好比 Oracle 成本已经很高,且计算能力也达不到旺盛的分析需求时,就须要考虑 Hadoop 了。所以 Hadoop 在这里扮演的角色就是数据仓库的落地数据存储和计算。

从传统的数据仓库架构扩展而来,此时企业的数据仓库又多了一层大数据,以下图:

image
(图来自mastechinfotrellis.com)

可是也有可能,Hadoop 的离线应用完成了聚合,分析师须要从原有的RDBMS获取,那么咱们就须要回写到RDBMS里面来,方便分析师的调用。这里须要说明下为何要回写关系数据库(SQL类数据库),不少分析师还在使用 Excel 和 Tableau 作数据分析,而这类工具最搭配的即是 RDBMS, SQL 的学习成本放在那里,Excel 的易用性摆在那里,还有 Tableau 漂亮的UI。而从 Hadoop 这类分布式数据系统中,取数分析,须要新型的做战武器, Zepplin 或者 IPython Notebook , 固然这类工具,SQL仍是必不可少。

总之,数据整合是 Hadoop 的最基础应用,扮演的多是最终存储,也有多是整条数据链上的一环,也就是ETL中的任一角色。

在正式的报告中(官方文档或者公司知识库),你们会采用"企业级数据中心"或者"数据湖"来表示 Hadoop 的这类应用。

为何要用 Hadoop 而不是传统的 Teradata 和 Netezza 呢?
很大的缘由,Teradata, Netezza 的成本不是通常的高,若是用来存储一些非交易性的数据,形成很大的资源成本。好比评论,用户行为,这些彻底能够存储在 Hadoop 的低成本集群中


项目二:专业分析

在《Spark高级数据分析》这本书里讲到一个实例,就是:
Estimating Financial Risk Through Monte Carlo Simulation

蒙特卡洛模拟分析,用来预测和监控银行流动性风险。这类专业应用,通常的软件公司并不会去考虑如何兼容,如何作的性能更优,好比数据量巨大的状况下,R有什么特别好的方法去处理,T-SQL会怎么处理,恐怕都无能为力?

针对有限的数据量,上述两个工具会 有不错的效果,但现在的数据量堆积下,要将本来一台单机提供的算力,复制到成千上百台计算机,传统的RDBMS和分析工具都会失效。

此时,Hadoop 配合 Spark 的组合,就有用武之地了!

众所周知,Yahoo!已有4000个Hadoop节点,用这4000个节点去计算一次聚合统计,好比有4亿的订单,须要核算每一个订单的总金额,成本,和利润,那分配到4000个节点上,每一个节点平均处理10万订单,以后汇总便可。

因此 Hadoop 能够处理更多的量,而 Spark 则在更快的计算上知足了需求。

拿 Spark 举个例子,好比推荐系统。喜好音乐的朋友会用网易云音乐,喜欢看书的朋友常常会去亚马逊。不难发现的事情是,当你打开这些 App 的时候,会有不少音乐或者书推荐给你,你打开这些推荐的音乐或者书,可能还会以为很好,正是本身喜欢或者须要的。这就是推荐系统。

推荐系统最大的难点在于实时性。咱们能够用 Hadoop 聚合所有人的喜爱,进一步去作实时推荐。而 Hadoop 的计算框架,要搭配 MapReduce 程序使用,这类程序最大的弱点是中间结果集存盘,而不是存在内存,那么对于推荐中常用的 ALS(Alternating Least Squares )算法就不友好了。这类训练算法须要无数次回头重读中间结果集,每次从硬盘读取结果(有可能还要重算),就会浪费极大的时间。

Spark 就是在解决这个问题。

它将全部的数据集封装在 RDD(Resilient Distributed Dataset)中,这个结果集自然就带着分布式特性,也就是每一个Spark节点上都有一个小的RDD,针对RDD的计算都会分摊到这些小的RDD上,同步计算。这个特性知足了分布式并行计算的需求,RDD还有个特性就是Cache操做,将RDD的结果缓存到内存保存,以后能够复用RDD结果集。这是Spark区别于MapReduce的重要特色,简单说来,就是整个计算过程变快了,使得实时推荐也变成了可能。

image
(图来自https://luminousmen.com/post/spark-anatomy-of-spark-application)

看上去,咱们只提交了一个Spark Job,完成对输入数据的处理,而且输出结果。没有特别厉害的地方。但背后作了很大的工做,它均衡地在每一个数据节点上分配处理算子(Executor),作本地处理,以后将这些中间结果集缓存起来,以提供给其余子程序使用。


项目三:大数据做为服务

一般企业足够大,就会自建 Hadoop 集群用来知足数据整合或者专业分析的需求。当企业拥有自主开发 Hadoop 实力以后,会有多余的计算资源能够分享给其余企业用户,那么这时能够把 Hadoop 做为服务开放给市场。

这就是云计算的力量。

国外的案例有 GCP(Google Cloud Platform), Amazon, Microsoft Azure, 而国内出色的供应商则是HTA(华为云,腾讯云和阿里云).

要说明的是,Hadoop 做为云服务的一种,须要很强的技术性。针对创业型或资源短缺性的中小企业,则能够付费使用大公司提供的服务,你们各得其所。

云计算:基本概念

云计算目前可分为 IAAS,SAAS,PAAS,这三者在使用上有很大区别。

都说云计算有不可替代的成本优点,那么成本到底优化在哪里?

好比公司若是内建一个运维团队,包括硬件,软件与人员,配套的基础设施还有机房,办公楼。假设一个软件公司由一我的,一台服务器,一个办公室组成,软件所有由这我的来编写,采用的所有是开源技术,一年的费用算50万,而这些采用云计算,这我的负责编程没变,可是能够在咖啡馆,图书馆,高铁,飞机,任何只要有网线的地方便可,这样就省去办公楼,硬件与软件的采购费用,主要成本都在云上和应用的开发人员身上。云上有专业的Devops团队,有DBA专业人员保障基础设施,还有可靠的机房双灾备,一切后顾之忧都交给了云服务商。按照腾讯云最新的企业云服务器,一年下来就3,500千块。

即买即用,部署极速

某天公司须要使用 Hadoop 的离线大容量存储来容纳日志,而且用 MapReduce 负责超大规模的计算,那么自建一个大数据团队,负责装机,配置和搭建,可能要花去1个月左右的时间,同时还须要进行业务的梳理和代码的编写,等到系统完毕,上线调试,这样大半时间下去了,效果还出不来。

而使用云计算,接口调试好,今天就能够导入数据,极大节约了时间成本。

若是云服务商对于每次查询都须要结算,而大数据又是公司避不可避的战略,那么内建也不是大问题。但每每公司业务还没成熟呢,就急着去部署大数据系统是不划算的。

云计算:IAAS, SAAS, PAAS 的区别:

经过NYT(NewYorkTimes)的4T TIFF图片数据转PDF的事件,咱们来讲明这三者的区别,就很容易了:

详细案例:https://t.zsxq.com/QrBmeaY

这个案例中,做者经过购买Amazon EC2 的100台服务器,将S3的4T文件转成PDF,并最终提供给大众搜索。

正好将IAAS,SAAS都涉及到了。好比 EC2,S3就是典型的IAAS,提供服务器操做系统,存储,网络,就是典型的IAAS应用;而最终开发的PDF搜索就是SAAS应用;若是做者不是本身写MapReduce来转换PDF,而是使用AWS提供的编辑软件,且使用了AWS的Hadoop, Spark做业接口实现了转换,那么PAAS也就被用到了。可能当时AWS并无提供这样整套的开发环境。

若是你是微信小程序开发者,不难理解,小程序的开发就是在PAAS平台上完成的。


项目四:流分析

流和流式计算一直存在于应用场景中,但在大数据未出现以前,一直作的很差。以前业界一直使用低延迟来对流进行处理,可是流的实时性,低延迟编程方法就显得笨拙了。

以前我有文章对流处理作过详细的科普,能够看这里:

http://dwz.win/uCZ

此时虽然看起来与Hadoop没有啥关系了,主要担任重责的是 Storm, Flink, Spark, 但最终落地数据的,仍是Hadoop.

举两个实时流分析的例子:

银行风控:若是依据模型检测到有大量小额连续的取款,那么就有多是洗钱。此时应当场冻结帐户,而不是等到整个取款过程结束,经过跑批次去检测某帐户洗钱,再进行追溯,冻结。不管是低延迟仍是分批处理,都不足以弥补帐户的损失,只有实时流分析才能够解决这个场景应用。

库存管控:好比双11,双12的在线秒杀,若是2万件iPhone11半折秒,疯抢的人数达到2000万,那么对于实时库存就要计算很精确。就像有些公司搞的饥饿营销,不到1s,上百万手机一抢而空,形成假象,带给消费者的印象就low了。

以上只是流分析的冰山一角,只要有需求存在就有流分析存在。但也不是全部场景都须要流分析来处理,有些历史统计或者预测分析,仍是经过跑批的方式,成本会更小。


项目五:复杂的事件处理

事件有两个维度的属性,时间与时长。

在时间线上保持接二连三发生的事件,造成一个流,就像是水龙头出来的水同样,只有积累多了才能派上用场,针对这类数据作处理,咱们称之为流式处理;孤立这段时间,选取当前时间点发生的事件,作单独的处理,那就是实时处理。

这类项目里,复杂度就是针对时间点的细化,能够是 millisecond(毫秒), nanosecond(纳秒:十亿分之一秒), picosecond(皮秒:一万亿分之一秒).

有的领域,好比邮件的收发,评论的发布,在秒级实现是能够接受的。而有些领域,好比量化交易,须要在更精细粒度时间上作挂单和撤单,时间差加上大资金量,可以得到很好的受益。

实际上,咱们发评论时,在点击发布到得到显示这段时间,哪怕是1-2秒,中间也可作不少处理,好比限流,关键字与舆情评判,内容分发。

综上,在时间维度上作实时处理,是件复杂的事情。

以前,处理这类实时数据,最有效的方法是加缓存,加消息队列,其原理是假定消息处理不完,就先缓存起来,经由处理方慢慢处理。如今这类需求也能够这样处理,借助 Redis, MessageQ, Kafka 等软件,作到低延迟处理。

但在现在数据呈井喷式暴涨的互联网,使用队列处理显得明显低效,还可能致使数据大量积压而没法处理。因此增长10倍,100倍,甚至1000倍机器来并行处理,变成了当今惟一可解决的方法。

好比在交通灯处,增长传感器,增长摄像头,使用 Spark, Storm, Flink, Apex Project 来实时传导Iot数据,使得交管局能够实时监控路面拥堵状况,违规行为甚至犯罪行为等。


项目六:流式ETL

这是一种特殊的数据整合方法,与传统的批次处理不同的是,在时间的时长维度上作了无限流的处理。除了作数据的分包转发以外,流式ETL还能够作专业分析,并将分析结果再分包转发。

从宏观来看,ETL既能够有跑批的步骤,还能包含流式计算的步骤。

上述的5种项目中,均可以涉及到这种项目的设计。

image
(图来自Confluent公司)

互联网时代,慢,正在成为用户流失的重大因素。在每一个数据接口实现流式ETL变得很是有必要,实现数据流动无断点,创建 Streaming Platform 变得愈来愈重要。

最适合用来搭建流式ETL的工具,Kafka.

一旦消息入库(Kafka),咱们要作的事情就像是从水库接水同样,接入管道便可。

image
(图来自Confluent公司)

NetFlix公司在Kafka实时流式处理方面有前卫的探索,在这里一窥究竟:

image


项目七:可视化分析

市面上不少统计分析软件都比较昂贵,他们独有的算法搭配内建的可视化展示组件,通过多年市场检验,越磨越好用。但成本上就是下不去,好比 SAS.

但现在大数据量的市场下,这些传统供应商显得不够友好,所以催生了iPython Notebook, Zeppelin 等一系列可直接用于大数据的可视化分析工具。尤为Python,Spark社群在机器学习,深度学习软件库上的开发,使得整个大数据统计分析生态日臻完美,不只对数据挖掘算法有友好的支持,对数据可视化组件也提供了开箱即用的软件包。

image

以上来自 Andrew C. Oliver 的文章《the 7 most common Hadoop and Spark projects》以及其余百度文库参考资料 - https://www.javaworld.com/article/2972303/the-7-most-common-hadoop-and-spark-projects.html Oliver 就是《7周7编程语言》的做者 https://www.techworld.com.au/article/455387/epic_codefest_7_programming_languages_7_days/