APP下载

大数据编程对于JAVA程序设计课程改革的冲击

2021-11-19

探索科学(学术版) 2021年11期
关键词:子类数据类型序列化

高 岩

河南理工大学计算机科学与技术学院数据科学系 河南 焦作 454003

一、引言

大数据编程相关的课程主要包括:HDFS,MapReduce,YARN,Spark,Storm,Hive,HBase等内容[1]。所涉及的大量的计算机基础知识包括:Linux系统原理,计算机组成原理,网络组成,数据库原理,面向对象程序设计等内容。对于上课学生的基础都提出了极高的要求,往往存在一边上课,一边“填空”的情况。另一方面,为了改变“老师讲,学生听;教师问,学生答,动手练”的教学模式,我国的高校正在大量压缩理论教学时长,转而可以将更多精力放在实践过程中。面向对象程序课程中JAVA、PYTHON语言在大数据编程方面也存在大量的应用[2]。因此,教学过程中的需要按照大数据的要求进行相应的调整,并大量压缩课时。

二、JAVA程序设计课程的典型设定

JAVA程序设计相关课程是计算机专业的基础课程之一,也是重要的核心课程[3]。一般而言,这门的主要教学目标有三:1、熟练掌握JAVA语言的基本语法,能够较为深入理解面向对象程序设计机制,可以熟练掌握类的设计;2、掌握JAVA标准版的API使用方法,掌握常用系统类、异常处理相关类、容器集合类、输入输出类、多线程类;3、能过图形用户界面介绍页面布局、事件响应等知识为后续网络前端设计提供基础;在网络编程方面,介绍SOCKET的概念,进一步深化IO流及多线程的相关知识,为后续的服务池管理提供前期模型,能过相关的项目的练习培养良好编程习惯,并让学生具备编写一定规模简易程序的能力,为后续软件工程、web编程的相关课程打下基础。

对于普通计算机专业而言,继续学习数据库相关技术、JDBC、Servlet、Ajax、Spring MVC、HTML5等相关课程,让学生具有较为完整的web网站全栈开发能力,其学生重点发展方向为网站前、后台系统整合能力。

三、大数据平台Hadoop

Hadoop两大核心就是HDFS(Hadoop Distributed File System)分布式文件系统和 MapReduce(并行计算框架)[5]。

HDFS系统可以通过其中核心元祖类FileSystem的不同的HDFS实现子类实例化对象实现接入。这些实现子类包含:Apache Hadoop,Aliyun OSS,Amazon S3,Azure Blob Storage,Azure Data Lake Storage,OpenStack Swift,Tencent COS这些Hadoop兼容的文件系统完成。HDFS要求具体的实现文件系统满足(部分满足)LINUX文件系统的POSIX标准[6]。

MapReduce是非常容易上手的一个软件框架,它主要是利用其并行计算能力在由数千个廉价计算结点组成的高可靠计算集群之上进行TB级海量数据的运算。一个MapReduce的Job可以分为两大部分:Map和Reduce。在数据输入端,Map Redce分将数据集的分割成相互独立小份,再将每一小份送至完全并行的Map任务当中。从输出端来看,这个框架可以将这个Job中Map的输出进行排序,而后转化为后续的Reduce任务的输入,最后进行输出。通常来说,整个Job的输入与输出是存储的文件系统中的文件。Map Reduce这个框架的核心即是Job内任务的编排、监视及任务失败后的重启。整个Hadoop框架是由JAVA实现的,因此,使用面向对象程序语言JAVA的程序在Map Reduce框架中运行有着天然亲合性[7]。

四、面向Hadoop集群进行编程所面临的问题

HDFS文件系统是一个类似于UNIX实现的文件系统。对于HDFS文件系统的文件、文件夹对象,使用PATH对象进行封装。其中对于路径的描述是与常用的WINDOWS中对于文件系统的描述存在着差异,如层次文件系统以“/”根目录开始且不能重命名、不被覆盖,无盘符概念;更加严格的权限检查,也就是说一个调用者若没有相应许可,其程序操作将会拒绝而失败,且同时抛出一个异常对象;通常需要使用URI地址,即统一资源标志符Universal Resource Inde,在某一规则下能把一个资源独一无二地标识出来。我们所熟知的统一资源定位符URL是其子集;有些文件系统如Azure blob存储文件中不能使用嵌入字符“.”等。在有了HDFS联结对象(FileSystem对象)及HDFS文件管理对象(PATH对象)之后,使用FileSystem对象的Open方法产生一个FSDataInputStream实例,这里的org.apache.hadoop.fs.FSDataInputStream是java.io.DataInputStream及java.io.InputStream的子类;或使用create、append等方法产生一个FSDataOutput-Stream实例,这里org.apache.hadoop.fs.FSDataOutputStream是java.io.DataOutputStream与java.io.OutputStream的子类。只有找到这个接口,才能将HDFS文件系统的读写IO代码接入HDFS文件系统当中。这一个过程与JDBC及Socket编程方法十分类似,里面涉及大量对象序列化、反序列化、对象之间的比较、对象HashCode设定、IO处理流、节点流相关的知识。

另一方面,MapReduce的框架唯一可以进行操作的是一些Key-Value对,也就是说,从框架的角度来看,整个Job的输入是若干Key-Value对的集合,其输出也是若干Key-Value对的集合。不同的Job使用不同的数据类型,但整个运算框架是一致的。第一、MapReduce的框架中,JAVA中的基础数据类型及包装类类型不同的是:Map Reduce中用于Key-Value的数据类型类必须是被框架进行串行化处理的,具体来说就是要实现Writable接口,对于用于Key数据类型类必须实现WritableComparable接口以配合框架完成排序工作。在Hadoop中主要的数据类型包括了:BooleanWritable:布尔型数值、ByteWritable:单字节整型值、DoubleWritable:双精度浮点数、floatWritable:单精度浮点数、IntWritable:整型值、LongWritable:长整型值、Text:使用UTF8格式存储的文本、NullWritable:当<key,value>中的key或value为空时使用,分别对应JAVA 程序中的Boolean,Byte,Double,Float,Integer,Long,String和 null用来处理MapReduce框架中传递的数据。第二、在MapReduce框架中大量使用泛型接口、泛型类和泛型方法,但在基础语法中仅仅在容器类中出现。但是在实际的编程过程中,我们需要引导学生自己去使用泛型简化开发程序,且提高代码质量。第三、在Rreduce方法输入Key-Value中Value是一个包含同一类型的list,但对于Key则没有这个要求。这个框架可以重用reduce输入的Key与Value对象,因此,这个应用可以克隆希望可以拷贝的对象。综上可见,MapReduce的框架当中对于抽象类、接口、包装类对象、容器类,泛型、迭代器有了广泛地使用。

五、结论

通常来说,JAVA程序设计相关课程中的主讲内容多为:面向对象编程设计思相、类、接口、常用类、异常类、IO、容器类、多线程、网络编程与图形界面等内容。对于Hadoop这样的集群管理并行计算系统,使用JAVA编程是一种可行的选择,但在教学过程中还需要强调对象序列化、反序列化、对象之间的比较、对象HashCode设定、IO处理流、节点流相关的知识、于抽象类、接口、包装类对象、容器类,泛型、迭代器等内容。若时间有限的情况下,可适当删减多线程、网络编程与图形界面等部分的内容。

猜你喜欢

子类数据类型序列化
Java Web反序列化网络安全漏洞分析
如何建构序列化阅读教学
如何理解数据结构中的抽象数据类型
某物资管理调度系统的数据序列化技术
Java面向对象编程的三大特性
汉语儿童早期子类名词获得研究
Java类的继承
基于SeisBase模型的地震勘探成果数据管理系统设计
线上众筹产品的特征分析与研究
相似度计算及其在数据挖掘中的应用