基于简化分布式模型与数据结构理论的SPARK教学方法研究

2018-06-27 07:52胡建华
计算机教育 2018年6期
关键词:数据结构分布式编程

胡建华

(浙江农林大学暨阳学院 工程技术系, 浙江 诸暨 311800)

1 研究背景

云计算或大数据课程中,SPARK编程章节是学生反映较难掌握的内容之一。SPARK是scala语言编写的,而scala语言同时支持面向对象与函数式编程的特性[1],特别是函数式编程特性,使得scala程序代码非常精炼,编程效率非常高,然而,这恰恰成为困扰学生的问题。大多数学生的先修课程是Java或者C++语言,这些语言都是面向对象的,因此学生对函数式编程很不适应,觉得代码不好理解。笔者阅读过很多SPARK编程教材,发现很少有教材从理论的高度对SPARK函数式编程进行清晰的阐述,绝大部分教材是直接介绍scala的基础语法,然后马上学习SPARK的rdd编程,没有解释清楚函数式编程与面向对象编程究竟有何不同、SPARK的rdd与Java集合是否有类比性等。由于缺乏与先期知识的类比性,学生觉得一下进入了一个完全陌生的世界,造成学习上的困难与迷惑。在教学实践中,笔者发现从数据结构理论的角度介绍SPARK函数式编程特点,以简化分布式模型描述SPARK框架组成,能帮助学生轻松掌握SPARK编程,取得较好的教学效果。

2 从数据结构理论理解SPARK函数式编程

SPARK是scala语言编写的,而scala语言函数式编程的特性让初学者感到很迷惑,学生经常会有诸如以下问题:函数既然是代码,为何可以作为另一个函数的参数或者返回值;SPARK的rdd与Java集合有何不同;map与filter函数有何不同等。那么怎样让学生理解map、filter等高阶函数,以及它们是如何作用于rdd的?可以从数据结构理论的角度阐述。第一步,回顾数据结构课程的内容。数据结构是一门研究非数值计算问题中,数据的组织、存储及操作的学科。非数值计算问题是指不是一个公式就能解决的问题,如排序问题等。然后,讲解数据的组织、存储及操作的意思,见表1。

表1 数据结构课程内容

接着,最重要的是要让学生理解:程序可以看做数据状态转换器,也可以理解为一个广义函数。例如,要实现对全班成绩按从高分到低分排序的任务,可先输入全班成绩,得到一个集合A,通过排序程序,就得到排好序的集合B,如图1所示。

图1 数据状态转换器示意图

如果用数学形式表示,则可表示为B=f(A),排序程序其实就是实现函数关系f。现在可以理解SPARK的相关概念:rdd就是一个集合,不过它是分布式的,分布在集群的不同机器上。map函数只是一个显式的映射关系名,表示要把一个集合中的元素映射到另一个集合,而映射规则是编写函数实现的,因此SPARK程序的业务逻辑就是编写函数并将其作为map等高阶函数的参数来运行的。

在函数式语言中,由于引入匿名函数及Lamda表达式,因此可以写出非常精炼的代码。例如,要把集合A中所有元素加3,放到集合B中,一行代码就可实现:

map函数相当于数学上的f,一个形式上的映射名,表示集合A要进行一个映射,具体怎么映射,是由作为map函数的参数(也是一个函数)实现的。从这个意义上理解,SPARK所谓的高阶函数,都是一个形式上的映射名而已。

既然都是形式上的映射名,那么map函数与filter函数有何不同呢?filter函数表示过滤映射,它的参数函数返回值必须是boolean型。例如,要把集合A中所有小于0的元素放到集合B中,可以这样写:

从数据结构理论的角度,spark的rdd与Java集合是一个概念,都是一批数据构成的集合。

3 从简化分布式模型理解rdd及SPARK工作原理

rdd(弹性分布式数据集)是SPARK编程的核心概念[2],在数据结构理论上就是一个数据集合,不过是分布在多台计算机上,每台计算机可以并行操作本机上的数据集,这是一个典型的分布式系统。SPARK是怎样管理分布在不同计算机上的数据,以及怎样通过程序处理这些数据呢?一个简化分布式模型框图[3]如图2所示。

图2 spark工作原理

每个SPARK应用程序都由一个任务控制节点(Driver Program)来控制,每个程序都要生成一个程序环境(SparkContext)。集群资源管理器(Cluster Manager)管理整个集群的资源,当执行程序前,Driver Program会向Cluster Manager要求分配计算机资源,称为Worker Node,即运行作业任务的工作节点。每个SPARK应用程序称为一个作业(Job),每个作业被分为一个个的任务(Task)。Driver Program得到工作节点后,就可以把任务分配给工作节点。每个工作节点上都有一个执行器(Executor),负责执行任务(即程序),执行完成后,会报告给Driver Program。这样所有的工作节点都可以并行执行,并且由Driver Program统一管理。

rdd由SparkContext创建,分布在每个工作节点上。一般来说,rdd都是由hdfs文件产生,而hdfs文件是分布在工作节点上的[4],因此rdd基本上从本机数据文件生成,这样可以避免大量数据在网络上传播,极大节约时间及网络带宽。对分布式编程中经典的例程--统计文件中每个单词出现的次数,进行分析。

4 结 语

通过数据结构理论理解函数式编程思想,用简化内存模型分析SPARK系统框架,然后通过程序实例解析SPARK代码,这样能帮助学生轻松掌握SPARK编程,显著提高教学效果。我系2014级学生按此方法教学,该门课程平均成绩达到80分,而前一届学生未采用这种讲课方法,同样试卷考试,该门课程平均成绩只有65分。由此可见,人们对知识的理解是有类比性的,通过已有的知识类比理解新的知识,接受新知识就很快。本文的教学方法,其实就是通过学生已掌握的数据结构知识、数学函数知识以及分布式模型知识,类比SPARK函数式编程,从而让学生轻松理解新知识并记忆深刻。

[1]黎文阳. 大数据处理模型Apache Spark研究[J]. 现代计算机(专业版), 2015(8): 55-60.

[2]胡俊, 胡贤德, 程家兴. 基于Spark的大数据混合计算模型[J].计算机系统应用, 2015(4): 214-218.

[3]陈虹君. 基于Hadoop平台的Spark框架研究[J]. 电脑知识与技术, 2014(35): 8407-8408.

[4]夏靖波, 韦泽鲲, 付凯, 等. 云计算中Hadoop技术研究与应用综述[J]. 计算机科学, 2016(11): 6-10.

猜你喜欢
数据结构分布式编程
数据结构线上线下混合教学模式探讨
编程,是一种态度
元征X-431实测:奔驰发动机编程
重典型应用,明结构关系
编程小能手
纺织机上诞生的编程
浅析分布式发电对电力系统的影响
为什么会有“数据结构”?
基于预处理MUSIC算法的分布式阵列DOA估计
分布式并联逆变器解耦电流下垂控制技术