高麗麗 樊彩虹
(集寧師范學(xué)院數(shù)學(xué)與統(tǒng)計(jì)學(xué)院 內(nèi)蒙古自治區(qū)烏蘭察布市 012000)
高考作為我國(guó)教育選拔機(jī)制的最重要考試之一,受到社會(huì)廣大關(guān)注。據(jù)教育部統(tǒng)計(jì),2021年全國(guó)高考報(bào)考人數(shù)為1078萬(wàn),2020年全國(guó)高考報(bào)考人數(shù)達(dá)1071萬(wàn)人。2021年比2020年增加了8萬(wàn)人,比2019年增加了48萬(wàn)人。在填報(bào)高考志愿時(shí),很多同學(xué)對(duì)自己將要選擇的學(xué)?;?qū)W習(xí)的專(zhuān)業(yè)比較迷茫,沒(méi)有一個(gè)較為系統(tǒng)、明確的選擇。為了讓廣大考生報(bào)考到一個(gè)相對(duì)適合自己的專(zhuān)業(yè),利用歷年高考志愿填報(bào)數(shù)據(jù),結(jié)合學(xué)生個(gè)人信息,采用大數(shù)據(jù)技術(shù),設(shè)計(jì)一個(gè)基于大數(shù)據(jù)的高考志愿填報(bào)推薦系統(tǒng),在學(xué)生填報(bào)高考志愿時(shí)給學(xué)生推薦學(xué)校和專(zhuān)業(yè),以供參考[1]。
Hadoop是一個(gè)由Apache基金會(huì)所開(kāi)發(fā)的可靠的、可擴(kuò)展的用于分布式計(jì)算的分布式系統(tǒng)基礎(chǔ)架構(gòu)和發(fā)放開(kāi)源軟件[2]。Hadoop的核心模塊分為兩部分:HDFS和MapReduce。HDFS系統(tǒng)是可擴(kuò)展、高容錯(cuò)、高性能的Hadoop分布式文件系統(tǒng),用于分布式文件的存儲(chǔ)和備份,文件寫(xiě)入后只能讀取,不能修改。HDFS系統(tǒng)主要包括一個(gè)NameNode和多個(gè)DataNode,NameNode主要用于存儲(chǔ)元數(shù)據(jù)以及處理客戶(hù)端發(fā)出的請(qǐng)求,DataNode是真正存儲(chǔ)數(shù)據(jù)的地方,數(shù)據(jù)以數(shù)據(jù)塊為單位進(jìn)行存儲(chǔ),默認(rèn)一個(gè)數(shù)據(jù)塊大小為128M,備份3份,NameNode負(fù)責(zé)記錄文件的分塊信息。HDFS系統(tǒng)的存儲(chǔ)空間由DataNode的存儲(chǔ)空間決定,HDFS架構(gòu)圖如圖1所示。
圖1:HDFS系統(tǒng)架構(gòu)圖
MapReduce是Hadoop的分布式計(jì)算框架,分為映射(Map)和規(guī)約(Reduce)兩個(gè)過(guò)程。MapReduce的核心思想為:當(dāng)啟動(dòng)一個(gè)MapReduce任務(wù)時(shí),Map端就會(huì)從HDFS系統(tǒng)中讀取數(shù)據(jù),并將數(shù)據(jù)映射成鍵值對(duì),傳遞到Reduce端;Reduce端接收Map端傳過(guò)來(lái)的鍵值對(duì),根據(jù)不同鍵進(jìn)行分組,對(duì)鍵相同的數(shù)據(jù)進(jìn)行處理,得到新的鍵值對(duì)并將結(jié)果輸出到HDFS系統(tǒng)中。一個(gè)完整的MapReduce過(guò)程包括四個(gè)階段:讀取輸入數(shù)據(jù),每個(gè)在HDFS中的數(shù)據(jù)塊都會(huì)生成一個(gè)Map;Map階段:數(shù)據(jù)以鍵值對(duì)的形式讀入,根據(jù)需求對(duì)鍵值對(duì)進(jìn)行處理,映射成新的鍵值對(duì),將新的鍵值對(duì)傳到Reduce端;Shuffie/Sort階段,將同一個(gè)Map中輸出的鍵相同的數(shù)據(jù)先進(jìn)行一步整合,減少傳輸?shù)臄?shù)據(jù)量,并在整合后將數(shù)據(jù)按照鍵排序;Reduce階段,Reduce的任務(wù)個(gè)數(shù)按照Map階段設(shè)置的數(shù)據(jù)分區(qū)確定,一個(gè)分區(qū)數(shù)據(jù)被一個(gè)Reduce處理,一個(gè)Reduce任務(wù)中的每一次處理都是針對(duì)所有鍵相同的數(shù)據(jù)進(jìn)行規(guī)約,以新的鍵值對(duì)輸出到HDFS。
大數(shù)據(jù)處理關(guān)鍵技術(shù)主要包括:大數(shù)據(jù)采集、大數(shù)據(jù)預(yù)處理、大數(shù)據(jù)存儲(chǔ)與管理、大數(shù)據(jù)分析、大數(shù)據(jù)可視化[3]。
(1)大數(shù)據(jù)采集主要是指從網(wǎng)絡(luò)獲取各種類(lèi)型的海量數(shù)據(jù),是大數(shù)據(jù)數(shù)據(jù)處理的根本。大數(shù)據(jù)采集可通過(guò)數(shù)據(jù)爬取技術(shù)實(shí)現(xiàn)。
(2)大數(shù)據(jù)預(yù)處理是指對(duì)獲取的數(shù)據(jù)進(jìn)行辨析、抽取、清洗等操作。通過(guò)大數(shù)據(jù)預(yù)處理,可以將復(fù)雜的數(shù)據(jù)轉(zhuǎn)換為容易處理的數(shù)據(jù)結(jié)構(gòu),對(duì)于一些我們不關(guān)心的數(shù)據(jù),可以去除,從而達(dá)到快速分析處理的目的。
(3)大數(shù)據(jù)存儲(chǔ)與管理需要足夠大的空間對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ),一般可采用Hadoop的HDFS系統(tǒng)存儲(chǔ)大數(shù)據(jù)。
(4)大數(shù)據(jù)分析是指使用大數(shù)據(jù)處理技術(shù)突破用戶(hù)興趣分析、網(wǎng)絡(luò)行為分析等行為,可以使用Hadoop生態(tài)中的Hive、HBase等技術(shù),并結(jié)合一些大數(shù)據(jù)處理算法進(jìn)行數(shù)據(jù)分析。
(5)大數(shù)據(jù)可視化是指將數(shù)據(jù)分析的結(jié)果形象地展現(xiàn)給用戶(hù),讓用戶(hù)能夠比較直觀的看到分析結(jié)果,比如圖形化展示、網(wǎng)頁(yè)展示等。
Hadoop集群搭建可分為三種:?jiǎn)螜C(jī)版、偽分布式和完全分布式。在本系統(tǒng)中我們采用偽分布式方式搭建Hadoop環(huán)境,根據(jù)Hadoop系統(tǒng)架構(gòu)圖進(jìn)行集群搭建[4]。
表2:高考信息學(xué)校信息表
表3:高考信息專(zhuān)業(yè)信息表
表4:高考信息學(xué)校錄取成績(jī)表
表5:高考信息專(zhuān)業(yè)錄取成績(jī)表
VMware Workstation安裝包下載;Linux安裝包CentOS6.8下載;JDK8以上版本下載;Hadoop安裝包下載;WinSCP傳輸工具下載;Eclipse Linux版本下載。其中,WinSCP是用于Windows與Linux系統(tǒng)中互傳文件的工具,Eclipse用于MapReduce編程。
(1)在個(gè)人電腦上安裝VMware Workstation虛擬機(jī)軟件。
(2)安裝CentOS6.8系統(tǒng)。用戶(hù)名和密碼均設(shè)為hadoop,安裝完成后,修改主機(jī)名為hadoop,ip地址設(shè)為靜態(tài)的192.168.170.128,并設(shè)置地址映射。修改主機(jī)名的方法為:將系統(tǒng)用戶(hù)切換為root用戶(hù),用vi命令打開(kāi)系統(tǒng)下的/etc/sysconfig/network文件,將HOSTNAME=一行改為HOSTNAME=hadoop,進(jìn)行文件的保存,再重啟系統(tǒng)即可。修改地址映射的方法為:將系統(tǒng)用戶(hù)切換到root用戶(hù),用vi命令打開(kāi)系統(tǒng)下的/etc/hosts文件,在最后添加一行 192.168.170.128 hadoop,保存文件即可。
(3)安裝JDK,在Linux系統(tǒng)下的/etc/profile文件下配置JDK環(huán)境變量。
(4)安裝Hadoop,修改Hadoop配置文件和Hadoop環(huán)境變量。
(5)啟動(dòng)Hadoop集群,測(cè)試是否啟動(dòng)成功。啟動(dòng)Hadoop集群的過(guò)程為:首先,格式化主節(jié)點(diǎn),命令為:hdfsnamenode–format;再進(jìn)入Hadoop安裝路徑,執(zhí)行sbin/start-all.sh命令,啟動(dòng)Hadoop集群。查看Hadoop啟動(dòng)是否成功的方法為:用jps命令查看進(jìn)程,若出現(xiàn)NameNode、ResourceManager進(jìn)程,則namenode結(jié)點(diǎn)啟動(dòng)成功;若出現(xiàn)DataNode、NodeManager進(jìn)程,則說(shuō)明Datanode結(jié)點(diǎn)啟動(dòng)成功,兩個(gè)結(jié)點(diǎn)均啟動(dòng)成功,則說(shuō)明Hadoop啟動(dòng)成功。
系統(tǒng)分為前臺(tái)和后臺(tái)兩個(gè)部分[5]。前臺(tái)用戶(hù)為考生,采用網(wǎng)頁(yè)的形式進(jìn)行設(shè)計(jì)??忌卿浵到y(tǒng),可查看過(guò)去5年的錄取信息,比如錄取分?jǐn)?shù)、專(zhuān)業(yè)分?jǐn)?shù)、錄取人數(shù)等信息;通過(guò)在網(wǎng)頁(yè)中輸入自己的高考分?jǐn)?shù)、意向省份、意向?qū)I(yè)類(lèi)別等信息進(jìn)行意向填報(bào),可查詢(xún)到符合自己要求的院校及專(zhuān)業(yè)推薦。后臺(tái)用戶(hù)為管理員,管理員可對(duì)用戶(hù)信息進(jìn)行管理,更新往年錄取信息,更新預(yù)測(cè)錄取信息,更新志愿推薦信息。系統(tǒng)設(shè)計(jì)框架如圖2所示。
圖2:系統(tǒng)設(shè)計(jì)框架圖
對(duì)于數(shù)據(jù)的處理,采用以下方式:在高考信息相關(guān)網(wǎng)站、APP等平臺(tái)對(duì)高考信息進(jìn)行爬蟲(chóng),來(lái)獲取高考信息相關(guān)數(shù)據(jù)。對(duì)數(shù)據(jù)進(jìn)行清洗,通過(guò)Hadoop對(duì)數(shù)據(jù)進(jìn)行歸納整理,篩選出錄取年份、錄取省份、錄取最高分、錄取最低分、錄取平均分、錄取人數(shù)、錄取專(zhuān)業(yè)、專(zhuān)業(yè)錄取最高分、專(zhuān)業(yè)錄取最低分、專(zhuān)業(yè)錄取平均分、專(zhuān)業(yè)錄取人數(shù)等字段信息。將清洗后的數(shù)據(jù)上傳到Hive表,Hive表的設(shè)計(jì)如表1[6]。
表1:高考信息省份表
可采用從本地導(dǎo)入數(shù)據(jù)方式從本地將數(shù)據(jù)導(dǎo)入到Hive表中,在Hive中首先創(chuàng)建數(shù)據(jù)表,再?gòu)谋镜貙?dǎo)入,導(dǎo)入的語(yǔ)句語(yǔ)法為:load data local inpath‘?dāng)?shù)據(jù)在本地的路徑/文件名’ into table ‘Hive數(shù)據(jù)表名’。使用Hive處理數(shù)據(jù),統(tǒng)計(jì)出近5年的學(xué)校所在地、學(xué)校專(zhuān)業(yè)類(lèi)別、錄取平均分?jǐn)?shù)、專(zhuān)業(yè)錄取平均分?jǐn)?shù)等信息,將統(tǒng)計(jì)好的數(shù)據(jù)由HDFS系統(tǒng)下載到本地中,由本地再導(dǎo)入到MySQL數(shù)據(jù)庫(kù)中,通過(guò)錄取概率計(jì)算算法和推薦算法,將系統(tǒng)統(tǒng)計(jì)出的高考志愿信息推薦給考生。
高考錄取分?jǐn)?shù)預(yù)測(cè)采用KNN算法。KNN算法又稱(chēng)K近鄰分類(lèi)法,它是理論上比較成熟的一個(gè)算法,也是分類(lèi)技術(shù)中最簡(jiǎn)單的方法之一。該方法的思路為:如果特征空間中的K個(gè)最相似的樣本中的大多數(shù)屬于某一個(gè)類(lèi)別,某樣本是K個(gè)樣本之一,則該樣本也屬于這個(gè)類(lèi)別。在KNN算法中,所選擇的鄰居都是已經(jīng)正確分類(lèi)的對(duì)象。在高考推薦系統(tǒng)中,選取近五年的高考錄取成績(jī)作為樣本,根據(jù)這5個(gè)樣本推測(cè)本年的錄取成績(jī)。
推薦算法我們采用智能推薦算法,該算法基于層次分析,可用于選擇填報(bào)學(xué)校和專(zhuān)業(yè)。算法主要分為三層:目標(biāo)層、準(zhǔn)則層和方案層。目標(biāo)層需要解決的問(wèn)題是制定考生所在省份的志愿項(xiàng)目;準(zhǔn)則層需要解決的問(wèn)題是預(yù)測(cè)考生被錄取的概率、考生的地域及專(zhuān)業(yè)類(lèi)別的選擇;方案層需要解決的問(wèn)題是根據(jù)數(shù)據(jù)分析,為考生推薦合理的志愿。
系統(tǒng)采用B/S結(jié)構(gòu),Python技術(shù)爬蟲(chóng)獲取數(shù)據(jù),Hadoop技術(shù)統(tǒng)計(jì)數(shù)據(jù),推薦算法實(shí)現(xiàn)信息推薦,網(wǎng)頁(yè)采用Java語(yǔ)言實(shí)現(xiàn),數(shù)據(jù)庫(kù)采用MySQL進(jìn)行開(kāi)發(fā)。
基于大數(shù)據(jù)的高考志愿填報(bào)系統(tǒng)在給考生報(bào)考志愿時(shí)提供了參考,為考生推薦了志愿,是一個(gè)具有發(fā)展前景的項(xiàng)目。但系統(tǒng)還存在一些問(wèn)題,比如推薦的精確性不足、推薦的信息有限,在今后的工作中,要繼續(xù)對(duì)系統(tǒng)進(jìn)行改進(jìn),完善推薦算法、美化界面,使系統(tǒng)使用起來(lái)更為簡(jiǎn)單快捷。