“基于大规模集群的海量数据处理技术”新型课程教学探索

时间:2022-10-23 02:11:35

“基于大规模集群的海量数据处理技术”新型课程教学探索

文章编号:1672-5913(2009)08-0054-04

摘要:本文通过对一个全新的实践课程“基于大规模集群的海量数据处理技术”的教学课程内容与教学设计的分析,对引入工业界最新的技术到教学实践过程进行了有益的尝试。通过实践表明,在现有的本科课程体系中选取适当的工业界实践技术能够有效激发学生的学习热情,提高学习兴趣,并通过小组项目的形式有效增强了学生的创新能力,合作能力和动手能力。

关键词:集群;海量数据处理;工业界新技术;创新课程

中图分类号:G642

文献标识码:B

1课程简介

本课程是Google公司与清华大学合作,在清华大学开设的有关集群分布式编程的课程。通过本课程的学习,学生将深入了解到通过大规模集群的模式处理海量数据的方式与编程方法。在课程进行的过程中,来自Google公司的工程师了讲述有关使用大规模集群处理海量数据的理论知识以及相应的实际编程方法。通过实践相关的课程内容,使用开源的Apache Hadoop工具,学生亲身实践了Google文件系统以及Google所使用的分布式编程方式MapReduce。学生需要完成特定的分布式应用程序设计来巩固所学的编程知识,用于处理实际的海量数据问题。

2课程的内容

本课程的内容分成两个部分,一个部分是上课的内容,即是在课堂中讲述分布式编程的基本理论与方法,主要包括下面五个方面的内容:

(1) 课程简介:主要讲述分布式编程的模式,分布式编程所需要涉及到的相关知识,包括分布式的应用问题,并行与分布的基础,分布式的历史,并行编程与同步等的相关内容。

(2) MapReduce编程技术:主要讲述有关MapReduce编程技术的来龙去脉,相关的理论与技术实现,包括函数式编程语言的简介,大规模数据处理,MapReduce的编程模型,MapReduce编程实例,在实际编程中的错误处理以及优化等相关内容。

(3) 分布式系统的层次:主要简介分布式编程,包括网络的基本处理,远程过程调用,事务处理系统的工作流程,可靠性等方面的内容。

(4) 分布式文件系统:分布式文件系统是分布式编程的一块重要的内容,是构建上层应用的基础,用来存储各种应用的数据。本节的内容包括文件系统简介,网络文件系统NFS以及AFS相关的内容,Google使用的GFS(Google File System)等相关的内容。

(5) 其它的分布式系统:将通过具体的例子来讲述在实际的可运行的分布式系统的内部结构,内容包括域名系统,PlanetLab等,这些内容为学员将来的研究提供入门的知识。提高的内容还包括Google所使用的分布式锁技术Chubby以及分布式的结构化数据处理方法BigTable。

本课程的另外一个重要组成部分是实验和分组大项目。其中实验内容是固定的,分组大项目则由学生自由组合,一般由2~3人为一个小组。每个小组自主提出与课程内容相关的大实验内容,并有大约3个星期的时间完成大项目的内容。下面是固定实验的内容:

实验0:实验环境Hadoop/Eclipse/Map/Reduce编程环境的介绍与熟悉。

实验1:倒排索引实验

倒排索引是所有搜索引擎的基础,将一个文档中出现的单词以及相关的文档编号联系在一起,以便在检索的时候能够达到快速搜索的目的。本实验通过让学生对Wikipedia的数据进行倒排索引,使得学生初步具有使用分布式环境进行大规模文档索引的基本技能。

实验2:图算法PageRank的实现

图算法PageRank是Google对一个网页进行评价的一个重要因素。本实验使用Wikipedia网页数据,形成一个网络图的结构。通过实现一个分布式的PageRank算法,使得学生能够在分布式系统上实现算法有一个较为深入的认识。同时结合实验一的内容,使得学生能够了解到当前搜索引擎的基本架构。

实验3:聚类算法Canopy的实现

在分布式系统处理大规模数据的时候,还需要考虑很多算法,其中本实验的聚类算法即是一项比较重要的内容。聚类算法通过无监督的学习过程,从一个数据集中抽取有用的信息。聚类算法的计算量比较大,本实验则是通过分布式的方法,能够处理大数据集Netflix的数据。使得学生能够对于大规模数据处理有更进一步的认识。

3课程实践

我们在2007年和2008年暑假分别组织了两次课程。总体来说,两次课程还是非常成功的,许多学生在这个课程上第一次体验了分布式编程,观察到程序在多个节点上同时运行的情况。

3.1课程的准备与授课

(1) 硬件环境的准备

Google为本课程提供了一个20个节点的集群,集群节点配置为两路双核Intel CPU 1.2GHz,每个节点配备4G内存,两块SATA180G的硬盘,集群的各个节点之间采用千兆以太网连接。

(2) 软件环境的准备

课程所需要的数据集从网络上采集,在实验开始之前在实验环境的存储设备上准备完毕。网络上的数据主要是两个部分,一部分是Wikipedia的数据,一部分是Netflix的数据。Wikipedia的数据在硬盘上展开之后有10G之多,存放到Hadoop的分布式文件系统HDFS中。Netflix的数据也有1G之多,同样放在HDFS中。学生的应用程序可以直接访问这些数据。

在应用软件上,主要是软件包Hadoop的部署。由于Hadoop本身还需要ssh等软件的支持,以保证安全性以及远程执行,在配置上面需要一定的工作量。在编程环境方面,主要是Java环境的部署(使用从Sun公司网站上下载的最新的JDK软件包)以及Eclipse编程环境上MapReduce插件的安装。这几个软件安装比较方便,下载软件包解压缩,而后配置一下环境变量。

在教材的准备上,我们修改了一部分由Google提供的教材,使得教材能够更加符合计算机系现有的教学进度。主要修改的内容包括增加了一部分分布式系统系统内容的介绍,原因是本科生以前没有学习过分布式系统的课程(实际上本科生还是十分需要了解分布式系统的),对分布式系统没有感性认识;减少了有关函数式编程语言的内容,因为本科生没有相关的课程,而此部分内容与分布式系统相关性不是很大。

(3) 授课的过程

暑期小学期的时间是5个星期,因此本课程的安排也是按照5个星期的时间进行。在前两周主要是固定的授课时间(上午9点到11点),隔天进行,同时穿插固定的实验内容。学生一般在两个星期之内完成5个规定的实验项目。在2007年授课的时候,我们还邀请了Google公司内部的员工给学生做了三个特殊的讲座,分别是有关Google内部RPC的实现机制,对等网络的介绍以及BigTable内容的相关讲座。学生对于这样的讲座非常感兴趣,因为这些内容实际上是在工业界正在使用的技术内容,对于平常课本的教学内容有进一步更深的认识。2007年的夏季学期有15位同学选课,最后分成7个小组做大项目;2008年有14位同学选课,分成6个小组做大项目。在完成大项目之后,每一个小组会派出一名代表在所有的同学面前讲述自己小组的工作以及小组成员的分工情况。2007年的大项目总结会在Google中国公司进行,Google公司总部、华盛顿分部以及Google中国公司的部分员工参与了最后的总结会。学生的项目创意和完成情况受到了他们的好评,有很多项目被认为具有研究生水平。

3.2学生大项目的情况

大项目是由学生自主提出项目内容,基于课程内容完成。

2007年的大项目概况:

项目1:对Netflix数据进行处理,实现相应的矩阵算法SVD,使得从这个数据集中获得比较好的电影推荐结果。

项目2:通过对学校中各种不同角色的模拟以及他们之间的相互关系,可以用来模拟传染病在一个人群中的传播模式(如图1所示)。

图1Epidemic!传染病模拟(学校生活模拟)

项目3:通过网络上的数据采集以及最后对采集到的数据进行后期处理,建立索引,对于用户采购IT产品,例如数码相机进行推荐,是一个垂直搜索的雏形。

项目4:NBody系统的模拟,即通过模拟多个小球或者数量众多节点的相互作用模型,用以研究行星的变化,气体的变化,布朗运动等。

项目5:统计气象预报,通过对某一个地区几十年的气象数据进行统计,用来对未来的数据进行预报,主要实现一个分布式的神经网络算法。

项目6:心电图数据处理,现有的心电图数据处理还停留在小规模的状态,大规模的心电图数据被大量浪费,本项目试图对大量的数据进行并行处理,从而能够利用长时间的心电图数据。

项目7:网络音乐的模式分类,由于网络上各种

音乐数据非常的多,本项目则基于内容对音乐进行聚类和搜索。

2008年的大项目概况:

项目1:笔记本电脑信息的整合与搜索:从互联网上各大网站等信息来源获取各类笔记本产品的详细信息,对数据进行分类和索引,根据用户的查询需求提品推荐,为用户在购买笔记本时提供有针对性的推荐和查询服务。

项目2:水木精华区的全文搜索:为水木精华区建立全文搜索引擎,以网络爬虫为开始,将数据保存到分布式文件系统中并建立索引,最后建立搜索引擎。

项目3:网络新闻分类:从互联网上下载各类新闻,并通过机器学习算法建立新闻分类。主要实现一个基于朴素贝叶斯方法的分类器以及网页下载与索引程序(如图2所示)。

图2 新闻分类搜索引擎

项目4:跨论坛热门信息检索:网络上有多个论坛的内容,本项目是为了在多个论坛的热点新闻之间建立联系,在构造搜索引擎的过程中,将论坛热门信息因素加入到检索排序中。

项目5:煎饼大亨:本项目主题是实现一款模拟经营类游戏。使用Apache Hadoop大规模数据处理技术,对店铺、顾客进行模拟,并针对店铺信息等提供可供玩家设置的交互性,从而实现最简单的模拟经营效果。

项目6:图片搜索引擎:实现了一个基本的图片搜索引擎的功能。根据关键字来查找互联网相关图片,返回图片缩略图,并给出文件名,文件大小,图片所在网页等信息。

3.3经验,教训,反馈

(1) 经验与教训

总体而言,本课程的开展还是非常成功的,大部分学生都是第一次接触到分布式系统的编程,也第一次通过集群的方式去解决一个具体的数据处理问题。例如在2004级学生孟祥亮在毕业总结中写道:“学习到很多平时课堂上学不到的知识”。

学生基本上对这样的授课形式非常有兴趣,即首先通过一定的课堂讲解获得基础知识,而后利用所获得的知识解决一些实际的问题。在课程内容上,由于课程内容非常新颖,而且也紧贴当前工业界的热点,因此能够引起学生很大的学习兴趣,积极性比较高。通过本课程的学习,学生能够在一定程度上了解到当前计算机工业界中所采用的技术,而不是课本上比较枯燥的内容。实际上,这样的实践课能够将课本知识与实际应用相结合,满足学生对于工程实践上相关内容的了解需求。而实验的设计则完全能够满足学生对于分布式编程的初步认识,了解程序的相关运行状况。

在教学的过程中也碰到了一些技术上的困难。最困难的是Hadoop环境的问题,由于是尚未成熟的软件包,Hadoop缺乏文档说明,设置起来也比较困难。现在Hadoop的最新版本是0.19,还需要很多工作才能够使得软件成熟。好在设置完成之后的Hadoop在运行的过程中较为稳定,基本上能够稳定运行2~3天,出现异常状况后只需要重新启动即可。在具体的教学过程中的困难是Hadoop缺乏编程文档,在很多情况下需要学生去阅读源代码,这可以让学生更加深入地了解相关系统的运行状况。

在大项目的选题情况上,基本上所有的项目都可以归为三个类型。第一个类型是网络应用程序,即通过重新实现一个搜索引擎类似的应用来加深对于课程内容的印象以及对现有网络应用程序构建的直观经验。第二个类型是有关于机器学习的分布式实现,由于机器学习是一大类比较重要的应用程序,可能需要处理大量的数据,学生很有兴趣使用分布式的方式去实现现有的机器学习算法。第三个是非常具体的类型,是有关于N体问题的模拟,选题的方向比较直接,即对每一个体做模拟,然后在局部做相互作用关系,最后总结作用关系模拟出结果。由于课程的设置比较紧,学生没有太多的时间考虑一些更加有意思的课题,这一点需要在将来的授课实践中做改进。

(2) 教学反馈

在教学完成之后,我们对学生的学习情况作了一定的调查总结,获得有益的反馈。总结来说,学生反而反应情况有两点:

(1) 时间比较紧。由于是5个星期的课时,需要完成的工作很多,包括上课,读论文,写家庭作业(回答有关论文的小问题),做规定的实验以及最后的大项目。在这样的情况下,学生在构思最后的大项目的时候比较匆忙,从而只能够想到一些比较容易获得的题目。另外,有些学生认为聚类的大实验可能没有必要,但实际上这是一次让学生了解不同分布式系统的机会,还是不要去掉的为好。在时间紧张的情况下,有一些家庭作业倒是可以去掉,因为在讲课的过程中已经有所涉及 。

(2) 计算资源缺乏。在所有学生同时运行程序的时候,20个节点还远远无法满足计算需求。特别是将近暑假小学期结束的时候,系统的反应会非常缓慢。如果有可能的话,需要增加计算节点,以提高集群的总体计算能力。或者将节点进行分组,由某些组共享几个独立的节点,但是这样会减少程序的分布式程度。有几个学生在学习的过程中已经能够自己建立Hadoop集群,减少与其它组同学的相互影响,提高效率。

另外,我们还举办了有关此课程的全国著名高校研讨班,参加者包括北京大学,上海交通大学,浙江大学,华中科技大学,北京科技大学等高校教师,反响热烈。与会各方的教师以及Google方面的代表都认为此课程是非常有意义的。下面是参会人员的反响。

“本次培训班举办得很成功。”

――Google公司朱爱民(Google公司高校合作部)

“研讨会上获得的经验和资料将帮助我们课程的顺利展开。”

――北京大学闫宏飞(副教授)

北京大学和浙江大学已经率先开展了相关的课程。

4结论

我们组织了新型课程“基于大规模集群的海量数据处理技术”,本课程将最新的工业界使用的分布式数据处理技术带给学生。总结来说,本课程很好的为学生讲述了如何构建一个真正可用的分布式系统,将课本知识扩展到实践的层次,加深学生对所学知识的印象。同时,本课程也为本科学生提供了分布式编程的机会,提高他们的专业水平。我们认为引入工业界最新的技术到教学实践过程是非常有益的尝试。

参考文献:

[1] Kang Chen, Yubing Yin, Weimin Zheng. Teaching Large Scale Data Processing: the Five-Week Course and Two Years’ Experiences[R]. The First ACM Summit on Computing Education in China, Beijing, Oct. 24-26,2008.

[2] S. M.-S. Aaron Kimball and C. Bisciglia. Cluster computing for web scale data processing[C]. SIGCSE’08, Portland, OR.,2008.

[3] S. G. Jeffrey Dean. Mapreduce: Simplified data processing on large clusters[C]. OSDI’ 04: Sixth Symposium on Operating System Design and Implementation,2004,137-150.

[4] S.-T. L. Sanjay Ghemawat,Howard Gobioff. The google system[C]. Proceedings of the 19th ACM Symposium on Operating Systems Principles,2003,20-43.

上一篇:对软件企业招聘应届毕业生的思考 下一篇:基于案例再现的软件开发综合实训项目设计