写点什么

架构师训练营 1 期 -- 第十三周总结

用户头像
曾彪彪
关注
发布于: 2020 年 12 月 18 日

在现今的大数据计算领域,Spark已经被广泛采用,可以说是MapReduce的替代品,那么为什么Spark会如此受欢迎呢?原因在于

  • DAG多阶切片的计算过程更快。

  • 使用内存存储中间结果效率更高。

  • RDD编程模型更简单。



实际上,Spark的计算过程和MapReduce是一样的,也是对分片数据进行计算,然后输入结果,最后经过Shuffle过程后,将相同的key交给相同的方法进行处理,第一个过程非常类似Map,第二个过程非常类似于Reduce。



RDD(Resilient Distributed Dataset)是Spark的核心,既是编程模型,也是架构的核心因素,它是Spark架构的物理概念,一个RDD会被分配到具体的节点上,分配给指定的进程进行计算。

RDD定义的函数分为两种,第一种是转换函数,这种函数还是返回一个RDD,另一种是执行函数,执行结果将不再返回RDD。

Spark也是对数据分片进行计算的,Spark的分片,调度都是以RDD为单位的,每一个RDD都会分派到一个执行进程取处理。

RDD的转换也分为两种,一种是会产生新的分片,一种是不会产生新的分片。对于不产生新分片的RDD,它不会被立即执行,这种行为称为惰性计算。在RDD的计算过程中,如果没有产生新分片,这样的操作叫做窄依赖,如果产生了新的分片,这样的操作叫做宽依赖。

在Spark中,一个Shuffle对应一个计算阶段,而一个计算阶段又对应一次任务调度。计算阶段是和RDD的计算函数相关的,map,filter,union等一定是窄依赖,不会产生shuffle,而reduceByKey,groupBy以及join等,则可能产生宽依赖。这样,Spark就能根据编程的代码产生DAG,最终生成执行任务。在上一个Shuffle没执行完毕之前,下一个任务无法启动。

在Spark的任务调度中,一个执行函数action会产生一个Job,而一个Shuffle会产生一个阶段,一个Job可能包含多个阶段。每一个数据分片,都会有一个计算任务去执行,因为一个阶段中,会有很多的数据分片,所以一个阶段中会有多个计算任务执行。

Spark的调度架构如下:





  • 客户端编写程序,交给Driver去处理,Driver会根据代码,生成DAG。

  • DAGScheduler根据DAG,决定哪些任务需要先执行,于是告诉Cluster Manger,需要执行的任务有哪些。

  • Cluster Manager会将需要执行的任务分发给Worker Node,告知Driver所在的IP和端口,以及它需要执行的任务。

  • Worker Node根据自己的CPU,内存等状况,决定向Driver领取计算任务并执行。

  • Worker Node执行完计算任务后,将结果返回给Driver。

  • Driver收到计算结果后,继续执行后续计算。



Hadoop中的MapReduce,Spark等框架,都是针对超大的数据量进行的计算,计算周期比较长,这种计算称作批处理。而与之相对应的则是流处理计算,流处理计算的计算周期通常行比较短,和批处理计算相比,其数据量也会少一些,但是因为其规模比较大,这也是大数据计算的一种场景。



Storm是大数据流处理计算的框架,它也具有低延迟,高性能,高可用,可伸缩,分布式等特点。

实际上,Storm的组件和Hadoop非常的相似。如下:



我们来看Storm的架构图:



nimbus是任务调度系统,管理所有的supervisor。supervisor向zookeeper注册,负责执行具体的计算任务。任务提交给nimbus,由nimbus分配给supervisor,supervisor负责创建worker进行计算。



除了Storm,实际上,Spark也提供了一个叫Spark Streaming的组件对流数据处理的支持。因为Spark是对批数据进行处理的,在处理流数据计算的时候,需要做两个调整。首先,数据源不能来自HDFS,而是来自与实时数据源。其次,Spark是针对数据块进行计算的,而Spark Streaming则对流式数据进行统计分块,使流式数据变成数据块,交给Spark取进行计算。至于任务调度,shuffle等后续计算操作,就都可以由Spark来完成了。



另一个比较知名的大数据计算框架是Flink,其架构与Spark非常像,它也支持批处理和流处理的数据计算。



对于大数据计算框架环境的搭建,可能相对比较容易,但是要对其测试,则需要准备大量数据,以及写一些程序,这写工作反而比较耗时间。可以使用HiBench来测试Hadoop的性能,它包含数据生成,常见的大数据算法测试程序等。其地址是 https://github.com/Intel-bigdata/HiBench



关于大数据分析,用得最多并且效果最直观的一个应用是数据大屏,开发这样一个系统,性价比比较高。

对一个互联网系统而言,比较有价值的指标包括新增用户数,用户留存率,Page View,成交总额GMV(Gross Merchandize Volume),转化率等。

关于数据分析的展现图标包括折线图,散点图,热力图,漏斗图等等。



常规的推荐引擎算法包括,基于人口统计推荐,基于商品属性推荐,基于用户的协同过滤推荐以及基于商品的协同过滤推荐等。



用户头像

曾彪彪

关注

还未添加个人签名 2019.03.23 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 1 期 -- 第十三周总结