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