首页  ·  知识 ·  大数据
分布式计算技术
CIO之家的朋友  简书  实践应用  编辑:Enoch   图片来源:网络
分布式计算(Distributedcomputing)是一种把需要进行大量计算的工程数据分割成小块,由多台计算机分别计算,在上传运算结果后,将结果统一合并得出数据结论的科学。

分布式计算( Distributed computing )是一种把需要进行大量计算的工程数据分割成小块,由多台计算机分别计算,在上传运算结果后,将结果统一合并得出数据结论的科学。”

讲到分布式计算,大多数人第一时间想到的,就是“Hadoop”,它的诞生就是为了解决海量数据的计算问题。Hadoop以谷歌三大论文为蓝本,Google FS、MapReduce、BigTable,这三篇论文奠定了大数据算法的基础。但这些论文毕竟是2003年就发表了,当时也只能应对离线数据的处理,因此后来衍生出了一些其他的方式,比如流失计算、流水线模式,以应对技术发展的需要,为实时计算、机器学习提供了更强有力的保障。

如果问起MapReduce、Spark、Tensorflow的区别,很多人会认为这是属于不同领域的引擎,但它们都有共同的一部分,即“分布式计算”。也就是说,这三个框架,都是定义了一种计算数据的方法,通过这种方法,来设计它的分布式计算能力,并解决一些特定的问题。

接下来我们就分别讲一下,这三种引擎对应的三种设计思想。

批处理:分而治之的思想

MapReduce的代表思想是“分而治之”,如何理解?其实很简单,根据名字就可以看出来,分而治之就是将一个复杂的大问题,拆解成规模较小的子问题,然后通过对子问题的求解,来合并成对大问题的求解。

第一个阶段称为Map阶段,负责将大的任务拆分为多个并行的子任务,相较于原始任务而言,子任务所执行的内容与父任务是相同的,但子任务的数据规模及需要计算的数据量都会小很多。第二个阶段称之为Reduce阶段,将各个拆分子任务的结果进行汇总,并得到最终的计算结果。整个过程如下图所示:

1.png

MapReduce的调优是一个复杂的过程,是一种长期积累的经验总结。主要包括以下四个部分:

1.硬件调优:内存、磁盘io以及网络等;

2.参数调优:缓冲区、磁盘读写、增加JVM内存、增加运行个数等;

3.代码调优:编写Combiner、重新设计Key、合并小文件、数据压缩等;

4.作业调优:合理规划运行依赖、调整作业优先级等。

 流处理:实时计算的基础

MapReduce虽然对于大任务的处理有很高的效率,但也有自身的瓶颈,即任务的启动和停止需要耗费大量的资源,而且时间很长,因此处理实时任务“心有余而力不足”。实时任务通常是针对“数据流”进行处理,需要常驻的进行,数据到了之后,即时进行处理。在分布式领域,我们把这种方式称之为“流处理”,英文是Stream,如最近比较火的直播电商,就需要实时处理直播产生的流数据。

目前流式计算框架相对成熟,以Flink、Spark Streaming、Storm为代表的开源组件也被广泛应用。流式数据处理,简单来讲,就是系统每产生一条数据,都会被立刻采集并发送到流式任务中心进行处理,不需要额外的定时调度来执行任务。

通常来讲,流式计算与离线计算的区别在于以下四点:

1.数据像水流一样,持续的进行计算;

2.数据的规模通常很大,至少TB级以上;

3.对实时性的要求高,但旧数据的重要性会持续下降;

4.数据到达的顺序无法保证,因此需要窗口计算。

以Flink为例,流式数据处理过程如下图所示:


 流水线:机器学习的助手

批处理和流式计算,能够解决绝大多数的业务场景,即便是复杂的业务场景,应用“流批一体”的技术,也能够设计出较好的方案。但有一种模式还是例外的,那就是“流水线”模式,这种模式通常与制造业相关。

例如生产一瓶饮料,首先需要在瓶子里灌装饮料,然后需要瓶盖封口,再包上相应的包装纸。这种向工厂一样的作业,即上一个任务结束后,再开始下一个任务,这种模式我们称之为“流水线”模式。

这种模式最早应用于CPU的设计,后来推广到机器学习等领域,广泛应用于模型训练之中,典型的框架就是Tensorflow,示意图如下:


TensorFlow的ETL流程如下:

提取(Extract):通过多种途径读取数据,比如内存、本地的 HDD 或 SSD、远程的 HDFS、GCS 等。数据的种类也有很多,比如图像数据、文本数据、视频数据等;

转换(Transform):使用 CPU 处理器对输入的数据进行解析以及预处理操作,包括混合重排(shuffling)、批处理(batching), 以及一些特定的转换。比如图像解压缩和扩充、文本矢量化、视频时序采样等;

加载(Load):将转换后的数据加载到执行机器学习模型的加速器设备上,比如 GPU 或 TPU。

流水线模式对于一些加速模型训练还是很重要的,如果你的CPU处理数据能力跟不上GPU的处理速度,此时CPU预处理数据就成为了训练模型的瓶颈环节。

综上,分布式计算技术,相较于分布式的其他领域,理解起来比较容易,实际应用也非常广泛,因此勤加学习,相信您很快可以掌握其中的精髓。

本文作者:CIO之家的朋友 来源:简书
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读