APP下载

Hadoop和Spark在Web系统推荐功能中的应用

2020-06-08童莹杨贞卓

现代信息科技 2020年19期

童莹 杨贞卓

摘  要:随着Web系统的数据量不断增大,利用传统数据库等技术难以满足系统数据分析及用户个性化需求的要求,而大数据技术可以有效达成上述目标。文章基于Hadoop和Spark两个大数据框架,介绍了其基本功能,结合两个框架的工作原理及部署、应用方式,将其应用到一个Web系统的影视推荐功能中,最后提出了系统推荐功能后期的完善思路。

关键词:Hadoop;Spark;Python;推荐功能

Abstract:With the increasing amount of data in the Web system,it is difficult to meet the requirements of system data analysis and user personalized needs by using traditional database technology,while big data technology can effectively achieve the above goals. Based on Hadoop and Spark two big data frameworks,this paper introduces their basic functions. Combined with the working principle,deployment and application mode of the two frameworks,it applies them to the movie recommendation function of a Web system. Finally,it puts forward the improvement ideas of the system recommendation function in the later stage.

Keywords:Hadoop;Spark;Python;recommendation function

0  引  言

如今Web系统开发的一个重要趋势就是加入大数据技术来进行数据处理。传统的无个性化推荐的购物网站、电影网站等Web系统,很难对用户进行精准营销。随着大数据应用技术的不断发展,其已被应用到个性化推荐及数据分析功能中。不止购物网站,多个行业都用到了数据处理功能,如:阿里的“猜你喜欢”,又或是外卖平台的派单功能中,根据最近的用户进行派单操作,均是利用大数据技术实现了精准的推荐及任务分派。本设计源于武汉商学院信息工程学院软件工程实训,通过将传统的Web系统和大数据技术结合的方式,完成了Web系统中推荐功能模块。

大数据的特点就是能够在短时间内捕捉、管理和处理海量数据,在Web系统中添加个性化推荐功能,可使其更精准的满足用户个性化的信息推荐需求,势必成为未来Web应用系统不可或缺的功能。实现大数据推荐功能的框架有很多,Hadoop和Spark作为大数据技术的主流框架,很适合与Web系统结合,用以完成其中数据推荐等功能,所以利用Hadoop和Spark实现Web系统推荐功能,具有很强的应用价值。

1  大数据框架的基本介绍

大数据框架也称处理框架,是大数据系统中一个最基本的组件。处理框架负责对系统中的数据进行计算。Hadoop可以看作是MapReduce处理引擎的处理框架,引擎和框架通常可以相互替换或同时使用,例如:Spark可以结合Hadoop,并取代MapReduce。组件之间的互操作性体现了大数据系统的灵活性,了解和应用大数据处理框架,对深入应用大数据至关重要。

1.1  Hadoop的基本组件介绍

Hadoop作为一个分布式系统,能让开发人员在不了解底层架构的情况下,轻松完成应用。它实现的分布式文件系统核心组件是HDFS和MapReduce。HDFS是Hadoop的储存系统,能够实现创建文件、删除文件、移动文件等功能,操作的数据主要是要处理的原始数据以及计算过程中的中间数据,它能实现高吞吐量的数据读写。MapReduce系统是一个分布式计算框架,可利用分散的计算机集群对海量的数据进行分解处理。当然,除了上面这些优势,Hadoop也存在着一些缺点,例如:Hadoop无法对大量小文件进行高效存储,MapReduce计算框架缺少迭代支持,另一方面会有较高的延迟,但作为大数据开源框架的代表,Hadoop仍是目前业界广泛认可,且使用非常广泛的一个大数据开源框架。

1.2  Spark的基本组件介绍

Spark是一个开源集群运算框架,由Scala语言进行实现,它是一种面向对象、函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集。Spark本身具有几个特点,首先相对于同为计算模型MapReduce来说,Spark更快,不管数据是从磁盘中读取还是从内存中读取。其次Spark易用性更好,除了Scala之外,它还支持Java,Python等语言編写,和Hadoop一样,Spark的通用性也强,它的生态圈也十分广泛,包括了Spark SQL,MLlib等组件。Spark具有很强的适应性,能够读取HDFS,HBase等为持久层读写原生数据,作为资源管理器去调度Job来完成Spark应用的计算,但因其缺少文件管理系统,所以一般在实际开发中,常与Hadoop结合起来一起使用。

Spark的MLlib机器学习库是它非常重要的一个组成部分。MLlib机器学习库由一些通用学习算法和工具组成,包括分类、回归、聚类、协同过滤、降维等。相对于Hadoop中MapReduce实现的机器学习算法,Spark基于内存的计算模型良好的改善了MapReduce计算框架迭代中反复读取磁盘的问题。在Web系统的推荐功能中,开发人员可以直接调用Spark MLlib库中的协同过滤算法来对数据进行处理。

2  Hadoop和Spark的应用方式

Hadoop具有高可靠性,高扩展性,高效性,高容错性的优点,Spark有更高的性能,能够与Hadoop生态兼容,并且还有易用的机器学习库。类似的大数据框架还有storm、Flink等,但前者对于真正的大流量应用还不太稳定,后者产生时间较晚,应用起来有一定风险。

Hadoop和Spark大数据框架搭建在虚拟机环境上,可以通过Java,Python等完成应用开发,也可使用包括专为Spark服务的Scala来进行开发。鉴于信息工程学院开设了Phyton课程,在我们此次Web系统的推荐功能中,采用Python来调用Hadoop和Spark服务。

Python是一个轻量化脚本语言,使用方便。Hadoop和Spark都支持Python,所以此系统中通过Python来连接使用Hadoop和Spark。使用Hadoop和Spark服务,首先需要连接上Hadoop和Spark的主机。开发人员可以通过使用用来操作Hadoop和Spark的PyHDFS和PySpark来完成。具体操作为:

(1)用pyhdfs.HdfsClient链接Hadoop主机,设置主机HOST信息及用户名信息,具体代码为:fs = pyhdfs.HdfsClient(hosts='Hadoop0,50070', user_name='hdfs')

(2)再通過pySpark连接到Spark主机,利用Spark Context容器,在参数中设定应用的名字和要连接到的集群的URL:sc = SparkContext(appName="endless similar matrix",master="Spark://Hadoop0:7077")

通过这两步操作,开发人员就可以很轻易地连接上主机,当然前提是需要保证上述使用的主机名及端口是正确的。

除了连接服务,开发时,要使用HDFS存储系统需要的数据,在本系统中,可以选择通过upload来进行上传操作,实现该操作的代码为:upload_to_hdfs(file)

在准备好系统所需要的存储文件以后,就可以调用Spark来对数据进行处理,读取文件的路径,本系统中代码如下所示:text = sc.textFile("hdfs://Hadoop0:9000/user/data.csv")

以上就是连接Hadoop和Spark集群所进行的操作,如果需要进一步对文件进行处理优化,就需要编写脚本来设置处理方法,也可以直接调用Spark MLlib库中的已有算法,通过设置好需要的一些迭代参数,进行模型训练即可。当然如果需要将服务暴露出去供系统开发人员后端调用,则可以先将端口号修改为0.0.0.0,然后通过设置的路由,访问相对应的函数即可,实现代码为:app.run(host="0.0.0.0")

3  Hadoop和Spark在推荐系统中的应用

Web系统推荐功能要解决的就是数据量大的问题,同时还要快和准,如果用单机处理,即使内存够跑完整个流程也要耗费大量时间,迭代就更加难以完成,所以实际开发中,Web系统常常要用到分布式系统。对于分布式计算框架,Hadoop和Spark是目前合适并且优秀的分布式模型。目前它们的应用场景有很多,包括提供个性化服务,优化业务流程等,当然最常见的就是个性化推荐的服务。下文具体介绍Hadoop和Spark在Web系统推荐功能中的开发方法。

首先,Hadoop和Spark都是免费开源框架,开发人员可在Apache官网下载Hadoop和Spark的安装包;然后安装一个虚拟机环境,安装配置诸如:ubantu等系统;接着通过Xshell等终端模拟软件连接上虚拟机,此时就可将下载的安装包上传到虚拟机当中;上传完成后,通过zxvf指令将安装包解压至指定位置。完成上述部署后,还需要对几个配置文件进行修改,修改之前,因为Hadoop需要Java环境,所以开发人员还需要先行下载Java JDK,并且在etc/profile中配置路径。这些完成之后,就要对Hadoop和Spark配置文件进行修改,主要开发步为:

(1)在Hadoop中,首先修改Hadoop-env.sh文件,将jdk路径导入进去,修改core-site.xml文件,指定namenode的通信地址以及Hadoop运行时产生的文件路径,接着修改hdfs-site.xml,设置HDFS副本数量,然后修改mapred-site.xml。应注意的是,由于在配置文件目录下没有此文件,需要修改名称,具体方式为:mvmapred-site.xml.template mapred-site.xml

通知MapReduce使用yarn,修改yarn-site.xml,然后修改reduce获取数据的方式。这些修改完成之后需要将Hadoop添加到环境变量中去,然后执行。

配置文件修改完成后,需要先格式化Hadoop,然后在sbin目录下执行start-all.sh脚本即可启动Hadoop服务,通过jps可以看到各个节点的端口,具体如图1所示。

(2)Hadoop启动完成后就可以启动系统的Spark服务,同Hadoop一样也需要先修改其配置文件,并且需要先将Python配置到默认环境中,虽然Spark大部分是以Scala作为开发语言的,但在此处,采用Pyhton来进行操作。将环境配置完成之后,同样是在sbin目录下运行start-all.sh脚本来启动Spark集群,通过jps查看是否成功,如图2所示。

(3)集群都启动成功后,开发人员就需要准备推荐功能所需要的推荐服务,结合本Web系统中影视推荐功能,此服务可结合用户的喜好,有针对性的为其推荐相类似的影视资源。此功能要利用协同过滤算法,因为Spark自带的MLlib库中有ALS(协同过滤)可以直接调用,所以只需要设置好迭代的参数即可,当然首先还是要先对数据集进行处理,具体代码为:movieRatings = text.map(lambda x: x.split(",")[:3])model = ALS.train(movieRatings, 10, 10, 0.01)

通过这两步操作就可以完成一个模型的训练。

(4)服务脚本编写好之后,需要上传到虚拟机环境当中运行,在运行服务脚本之前,开发人员需要通过pip指令在虚拟机中安装好PySpark,PyHDFS等各个插件,然后可以直接通过Python脚本的方式来直接启动服务,如图3所示。

至此,一个推荐服务已经基本搭建并且运行起来了,如果后端需要访问这个服务,可以用flask框架设置的路由直接进行访问。具体效果如图4所示。

4  結  论

此基于Hadoop和Spark的Web系统推荐功能可以依据用户喜好,实现个性化推荐,这让Web系统变得更加个性化,有针对性,使用效果更加出色。本Web系统的推荐功能后期可以进一步做升级,如果要处理更大的数据量的推荐,可以采用诸如:Spring Cloud等框架集合来构架分布式、微服务架构的Web系统。在此基础上,结合Hadoop和Spark,推荐功能的优化性会得到明显提高。

软件工程实训项目通常以某项技术平台为支撑,但仅使用Web开发技术完成的Web项目,难以适应实际开发的需要。Web系统中的推荐功能,个性化服务等一定会应用得越来越广泛,了解和应用大数据技术对Web开发人员会变得更加重要,特别是在涉及大量数据处理的系统开发工作中,其将成为一个基本应具备的开发技能,此系统的设计与实现,对软件工程专业、大数据专业的学生实训都能起到极大的锻炼作用。

参考文献:

[1] 李晓颖,赵安娜,周晓静,等.基于大数据分析与挖掘平台的个性化商品推荐研究及应用 [J].电子测试,2019(12):65-66+81.

[2] 李荣.大数据技术必须了解这些 [J].计算机与网络,2019,45(13):36-37.

[3] 孙皓.基于Hadoop平台和Spark框架的推荐系统的设计与实现 [D].福建:华侨大学,2018.

[4] 徐林.基于Spark MLlib协同过滤算法的美食推荐系统研究 [J].吉林大学学报(信息科学版),2019,37(2):181-185.

[5] 吴荣,段宏涛.基于Hadoop平台的Spark快数据推荐算法解析——以其在图书推荐系统中的应用为例 [J].数字技术与应用,2020,38(6):115-117.

作者简介:童莹(1981—),女,汉族,湖北武汉人,硕士研究生,讲师,研究方向:网络数据库。