大数据的程序设计模型(Programming models)
概述
程序设计模型是一种抽象或现有的机制或基础结构(an abstraction or existing machinery or infrastructure)。它是抽象的运行库和编程语言的组合,构成了一个计算模型。这个抽象级别可以是低级的,就像计算机中的机器语言一样。或者高级的,例如在高级编程语言中的Java。
如果大数据分析的基础设施是我们提到的分布式文件系统,那么大数据的程序设计模型应该能够使分布式文件系统中的操作具有可编程性。我们的意思是,能够编写计算机程序,在使用大数据的分布式文件系统上高效地工作,使处理所有潜在问题变得容易。
要求&特点
基于我们到目前为止讨论的所有内容,让我们描述一下大数据编程模型的需求。
-
首先,这样的大数据编程模型应该支持大数据分割等常见的大数据操作。
这意味着对计算机内存中的数据进行分区和放置,以及稍后同步数据集的模型。对数据的访问应该以一种快速的方式实现。它应该允许快速分布到机架中的节点,这些节点可能是我们将计算转移到的数据节点。这意味着同时调度多个并行任务。
-
它还应该保证计算的可靠性和对故障的完全容忍度。这意味着它应该支持可编程的复制和恢复文件时需要。它应该很容易扩展到生成数据的分布式notes。
-
它还应该使添加新资源能够利用分布式计算机,并在不损失性能的情况下扩展到更多或更快的数据。如果需要,这称为向外扩展。因为有各种不同类型的数据,如文档、图、表、键值(key-value)等。编程模型应该支持对这些类型的特定集合进行操作。不是每种类型的数据都可以由特定的模型支持,但是模型应该针对至少一种类型进行优化。
一个形象的例子
想象一个岁月静好的星期六下午。你接到一个朋友的电话,她说,她会在一个小时后到你家吃晚饭。你好像完全忘了你邀请了你的朋友来吃饭。所以你说,你很期待她的光临。
-
作为一个快速的解决方案,你决定用一些番茄酱来煮意大利面。你需要利用并行化,这样在你的客人到达的时候,也就是一个小时内,晚餐就准备好了。你把你的伴侣和十几岁的孩子叫到厨房里去。现在,你需要告诉他们如何开始为你切割食材。但一时冲动之下,你把洋葱、西红柿和辣椒混合在一起。你选择不是先把它们分类,而是给每个人随机混合一批不同类型的蔬菜。
-
他们被要求用“算力”切菜。同时需要确保不混合不同类型的蔬菜。
-
当每个人都切好了,你要把蔬菜按照它们的类型分类。你需要助手们收集相同类型的物品,把它们放在一个大碗里,并在这个大碗上标记每个碗的重量,比如一个碗里的番茄,另一个碗里的辣椒和第三个碗里的洋葱。
-
最后,你会得到漂亮的大碗,上面标有每种蔬菜的总重量。你的助手很快就完成了他们的工作,当你在厨房里集中精力协调他们的行动和其他晚餐任务时,你就可以开始做意大利面了。
上述就是一个很好的大数据建模实例。它实际上是由人工处理器处理的数据。其中你的“伴侣、孩子”就是并行的计算机,你则是主计算机,洋葱、辣椒和番茄则是我们说的大数据。
Note:这个场景可以通过一个通用的大数据编程模型来建模。即MapReduce。MapReduce是一个大数据编程模型,它支持我们提到的所有大数据建模需求。它可以建模处理大数据,将复杂的任务分解为不同的并行任务,并有效地利用大型的商品集群和分布式文件系统。此外,它还抽象出了并行化、全容差、数据分布、监控和负载平衡的细节。作为一种编程模型,它已经在几个不同的大数据框架中实现。
总结
综上所述,大数据编程模型是基于分布式文件系统的抽象。大数据所需的编程模型应该能够处理大量和各种数据。支持全容差并提供扩展功能。MapReduce就是这些模型中的一个,在包括Hadoop在内的各种框架中实现。