云计算环境下的信息资源集成与服务
上QQ阅读APP看书,第一时间看更新

2.5.2 数据模型

本平台建议采用一种支持并行操作和具有较强容错能力的弹性数据模型。在具体实现上,可以借鉴Spark中的RDD(Resilient Distributed Datasets)数据模型Zaharia M, Chowdhury M, Das T, et al. Resilient Distributed Datasets: A Fault-tolerant Abstraction for In-memory Cluster Computing[C]//Proceedings of the 9th USENIX Conference on Networked Systems Design and Implementation, 2012, San Jose, USA.。因此,本课题中采用的数据模型的名称为iRDD,以表示该数据模型主要借鉴了RDD模型进行核心设计,并根据云计算环境下的信息资源的碎片化处理和碎片数据的集成需要进行了一定的优化与调整工作。

1. iRDD的特征

本平台中的iRDD数据模型具有Spark RDD的以下基本特征:

•统一性。本平台中的所有数据均抽象成iRDD数据模型。

•只读性。本平台中的iRDD数据对象均为只读性,任何对iRDD对象的更改(包括碎片化分解、再次集成)均采用“产生一个新iRDD”的方式,而不再更改原iRDD本身。

•继承性。本平台中的iRDD数据对象之间可能存在继承关系,而继承关系的生成是由Transformation操作定义的,继承过程用DAG方式描述。

•视图模式。为了降低序列化操作带来的成本,除根iRDD数据对象之外,多数iRDD对象的计算采用惰性计算模式,只存储其计算方式,不对其进行序列化操作。但是,当完成复杂转换操作之后或在执行容易失败的转换操作之前,需要对iRDD对象进行序列化操作。

2. iRDD的基本组成

每个iRDD主要包括数据和操作两大类成员。当然,用户可以自行添加新的属性和操作。

iRDD的基本组成如下:

属性

●Fragments:碎片数据内容

●Tags:碎片的用户标签

●Dependencies:碎片数据之间的依赖关系

●PreferredLocations:碎片数据的位置偏好

●Partitioner:碎片数据的分发偏好

操作

●Fragmenting():碎片化处理

●Integrating():集成处理

●其他:Spark中的操作

iRDD的属性如下:

•Fragments(碎片数据内容)。是本平台中信息资源处理的最小单位,对应于Spark的一个分区。本平台中分区操作是与碎片化处理一致的,而不是完全按照Spark的分区机制完成。当然,系统可以自动进行碎片化处理操作,但这种碎片化处理并不等同于分区操作。本平台中的碎片化处理与Spark自带的分区操作的主要区别在于:前者是语义层次上的,后者是语法层次上的。然而,就本平台而言,二者的联系在于分区操作是针对碎片化处理的结果进行的,也就是说本平台不再沿用Spark的默认分区机制。

•Tags(碎片的标签)。用户给出的碎片内容标签。用户标签有两种:一种是受控词汇,即基于语义Web和领域本体的语义标签;另一种是自然语言标签,即用户给出的自由文本标签,其选择不限于控制词汇的范围。

•Dependencies(碎片数据之间的依赖关系)。与RDD的依赖关系相似,本平台中的依赖主要用来记录iRDD之间的世系关系,可以进一步分为宽依赖和窄依赖,并分别采用不同的执行流程选择及故障节点恢复策略。

•PreferredLocations(碎片数据的位置偏好)。此属性为可选属性,用于指定碎片数据的存储位置偏好。

•Partitioner(碎片数据的分发偏好)。此属性也是可选属性,用于表示对于计算出来的数据结果如何分发。

iRDD的操作如下:

•Fragmenting()(碎片化处理函数)。本平台提供针对碎片数据的再分解函数,属于Transformation类型的操作,采用惰性计算模式。用户可以直接调用系统提供的默认函数或者指定自己的碎片化处理函数。

•Integrating()(碎片集成处理函数)。本平台提供针对碎片数据的集成函数,也属于Transformation类型的操作,采用惰性计算模式。用户可以直接调用系统提供的默认函数或者指定自己的集成处理函数。

3. iRDD之间的依赖关系

在本平台中,iRDD之间的依赖关系是iRDD的流程设计、可信度评估、故障恢复、版本控制的重要依据。因此,iRDD之间的依赖关系的设计与保障是本平台的关键技术之一。与Spark一样,本平台中的iRDD依赖关系分为两大类:

•窄依赖(narrow dependencies)。是指父iRDD的每个分区都只被子RDD的一个分区所使用。

•宽依赖(wide dependencies)。是指父iRDD的分区被多个子RDD的分区所依赖。从iRDD操作看,不同的操作依据其特性可能会产生不同的依赖。例如,map操作会产生窄依赖,而某些join操作则可能产生宽依赖,如图2-17所示。

图2-17 窄依赖与宽依赖

本平台针对不同的依赖关系给出了相应的含义、是否对父iRDD进行序列化、可信度评估以及故障恢复策略,如表2-6所示。

表2-6 本平台中不同的依赖关系的差异性

4. iRDD的操作

与Spark类似,iRDD操作分为两大类:转换(transformation)类和动作(action)类,如图2-18所示。本平台中定义的集成处理和碎片化处理均属于转换类操作。所有转换类操作均采用惰性计算模式。

图2-18 转换类操作与动作类操作

转换类操作。主要用于iRDD之间的转换,生成新的iRDD,例如iRDD的分解和集成。本平台中的所有转换类操作的先后顺序将自动生成一个DAG,以便进行iRDD的版本跟踪。

动作类操作。主要用于对iRDD进行计算,一般需要向Driver或HDFS返回一个值,例如计算均值和计数等。