劉 飄 程棟?rùn)u 高琪琪 魯 琛
(無錫職業(yè)技術(shù)學(xué)院,江蘇 無錫 214121)
在數(shù)據(jù)量快速增長(zhǎng)的時(shí)代,大數(shù)據(jù)正迅速成為許多組織的社會(huì)需求和標(biāo)準(zhǔn)結(jié)構(gòu)。通過人們整理、分析、提取和集成大量數(shù)據(jù),能夠發(fā)現(xiàn)新的數(shù)據(jù),并可以創(chuàng)造出新的價(jià)值,讓標(biāo)準(zhǔn)化的認(rèn)知、判斷、思維方式、服務(wù)模式和產(chǎn)品形式形成嶄新的外觀和發(fā)展方向。隨著互聯(lián)網(wǎng)崗位需求增加,人們需要從大量職位信息中尋找出適合自己的崗位。以往人們需要從許多職位信息中對(duì)比、分析這個(gè)職業(yè)在當(dāng)前社會(huì)的需求和前景。但這樣煩瑣的方式已難以滿足當(dāng)前人們的需求,使得大數(shù)據(jù)分析快速發(fā)展。通過大數(shù)據(jù)崗位分析系統(tǒng)幫助高校學(xué)生透析職位市場(chǎng)需求變化,預(yù)測(cè)就業(yè)前景,給出現(xiàn)階段符合自己條件的崗位。
本系統(tǒng)采用B/S體系架構(gòu),設(shè)計(jì)開發(fā)采用Linux開發(fā)模式,先在Windows上進(jìn)行系統(tǒng)和前端的編碼實(shí)現(xiàn),再在Linux上進(jìn)行測(cè)試部署大數(shù)據(jù)集群環(huán)境。
使用Python開源爬蟲框架Scrapy并結(jié)合redis數(shù)據(jù)庫(kù),實(shí)現(xiàn)從招聘網(wǎng)站分布式爬取職位信息數(shù)據(jù),大幅度提高爬蟲的效率。使用Scrapyd提供的Scrapyd JSON API請(qǐng)求管理爬蟲任務(wù),再結(jié)合Gerapy可視化管理工具調(diào)用Scrapyd提供api,實(shí)現(xiàn)對(duì)爬蟲任務(wù)的打包部署、刪除、停止、監(jiān)控、日志分析等功能的可視化管理。
搭建分布式Hadoop集群系統(tǒng),在此基礎(chǔ)上建立HBase非關(guān)系數(shù)據(jù)庫(kù),對(duì)爬取的職位信息進(jìn)行存儲(chǔ),以便后續(xù)進(jìn)行數(shù)據(jù)分析。
搭建Spark計(jì)算引擎,并采用Yarn進(jìn)行資源分配,進(jìn)行數(shù)據(jù)轉(zhuǎn)移的分布式計(jì)算,以升高程序運(yùn)算的速度,并把職位信息的分析結(jié)果存儲(chǔ)到Mongodb非關(guān)系數(shù)據(jù)庫(kù)中。
用戶訪問網(wǎng)頁(yè)并發(fā)送http響應(yīng)請(qǐng)求,由Python開源框架Django進(jìn)行相應(yīng)響應(yīng),如用戶發(fā)送數(shù)據(jù)可視化請(qǐng)求,使用Django調(diào)用Mogodb數(shù)據(jù)庫(kù)調(diào)用數(shù)據(jù),并將其結(jié)果進(jìn)行響應(yīng)返回。
隨著當(dāng)代互聯(lián)網(wǎng)蓬勃發(fā)展,大量的工作崗位在網(wǎng)上發(fā)布,學(xué)生或求職人員需要從大量的數(shù)據(jù)中分析和了解當(dāng)前行業(yè)的技能要求、薪酬、崗位地區(qū)分布、學(xué)歷要求、工作經(jīng)驗(yàn)、職位發(fā)布數(shù)量等信息,較為困難。亟須一套能夠幫助學(xué)生和求職人員分析崗位信息,將處理好的數(shù)據(jù)直觀地展示給人們的軟件程序。本系統(tǒng)基于近期行業(yè)對(duì)人才需求信息進(jìn)行分析,主要實(shí)現(xiàn)了對(duì)職位信息分布式爬取、對(duì)信息分析處理、對(duì)處理完的信息可視化展示、用戶給出需求經(jīng)行崗位推薦。
當(dāng)前,大多數(shù)國(guó)內(nèi)招聘網(wǎng)站使用基于內(nèi)容的協(xié)同過濾算法來對(duì)用戶進(jìn)行推薦?;谟脩舻暮Y選和基于職業(yè)的篩選顯著提高了推薦的質(zhì)量,但是用戶通常受到特定職位要求的限制或?qū)π袠I(yè)或環(huán)境的了解不清,因此無法更好地選擇職位。
(1)使用大數(shù)據(jù)技術(shù)進(jìn)行分析,采用大數(shù)據(jù)分析算法,對(duì)工作行業(yè)分布、城市分布、工資分布、學(xué)歷信息、各個(gè)地區(qū)的用戶等數(shù)據(jù)進(jìn)行分析,讓用戶對(duì)行業(yè)和企業(yè)工資有清晰了解。系統(tǒng)可以幫助求職者選擇自己的職業(yè),以便求職者可以更好地了解自己的環(huán)境。
(2)利用Spark算法庫(kù)對(duì)職位信息內(nèi)容進(jìn)行特征抽取分詞,并轉(zhuǎn)換為哈希成特征向量。使用關(guān)鍵詞提取的方法對(duì)職位所需的具體技能進(jìn)行提取,通過Spark機(jī)器學(xué)習(xí)將相同職位所需要掌握的技能,使用貝葉斯算法進(jìn)行分類建立模型,再使用建立的模型為求職者進(jìn)行智能推薦。
大數(shù)據(jù)基礎(chǔ)平臺(tái)采用三臺(tái)服務(wù)器搭建,一臺(tái)作為主節(jié)點(diǎn),另外兩臺(tái)服務(wù)器為從節(jié)點(diǎn)。大數(shù)據(jù)集群主要搭建和使用Hadoop大數(shù)據(jù)平臺(tái)、Zookeeper分布式協(xié)調(diào)服務(wù)、Spark計(jì)算引擎、Hbase數(shù)據(jù)庫(kù)和Mongodb數(shù)據(jù)庫(kù)等。
使用三臺(tái)服務(wù)器對(duì)python開源框架Scrapy結(jié)合redis數(shù)據(jù)庫(kù)的分布式爬蟲,在主節(jié)點(diǎn)上對(duì)需要招聘信息的url地址經(jīng)行爬蟲,并將其存入redis數(shù)據(jù)庫(kù)中。另外兩臺(tái)從節(jié)點(diǎn)從redis數(shù)據(jù)庫(kù)中調(diào)用url進(jìn)行對(duì)招聘網(wǎng)站上職位信息的爬取,并將爬取的職位信息數(shù)據(jù)存在Hbase數(shù)據(jù)庫(kù)中,再結(jié)合使用Scrapyd和Gerapy可視化管理爬蟲集群。
Scrapy是一套純Python語言開發(fā)的、用于爬取網(wǎng)頁(yè)內(nèi)容或各種圖片并提取結(jié)構(gòu)化數(shù)據(jù)的開源網(wǎng)絡(luò)爬蟲框架,可以應(yīng)用于數(shù)據(jù)挖掘、信息處理或存儲(chǔ)數(shù)據(jù)等一系列操作中,是目前Python中使用最受歡迎和最廣泛的爬蟲框架。
Redis是遵循鍵值存儲(chǔ)原理的非關(guān)系數(shù)據(jù)庫(kù),內(nèi)存中鍵/值存儲(chǔ)主要作為一個(gè)應(yīng)用程序的高速緩存或快速響應(yīng)數(shù)據(jù)庫(kù)。Redis將數(shù)據(jù)存儲(chǔ)在內(nèi)存中,不存儲(chǔ)在磁盤或固態(tài)驅(qū)動(dòng)器(SSD)上,Redis提供了速度、可靠性和性能。
Scrapyd是一個(gè)應(yīng)用程序,可以在服務(wù)器上部署爬蟲并計(jì)劃爬網(wǎng)作業(yè),并提供對(duì)爬蟲項(xiàng)目的API管理。
Gerapy用于Scrapyd集群可視化管理,對(duì)Scrapy日志分析、自動(dòng)打包和部署、啟動(dòng)和停止服務(wù)、在線修改代碼、監(jiān)控和警報(bào)以及Web應(yīng)用程序。
系統(tǒng)數(shù)據(jù)的存儲(chǔ)分為分布式HBase存儲(chǔ)和Mongodb存儲(chǔ)。
HBase是一個(gè)基于在HDFS上開發(fā)的分布式數(shù)據(jù)庫(kù),不同于常見的關(guān)系數(shù)據(jù)庫(kù),其非常合適鍵/值對(duì)數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫(kù),主要用以存儲(chǔ)龐大的結(jié)構(gòu)化數(shù)據(jù)。邏輯上,HBase存儲(chǔ)用于表、行和列的數(shù)據(jù)。與Hadoop類似,HBase可以針對(duì)企業(yè)進(jìn)行水平擴(kuò)展,通過增加廉價(jià)商業(yè)服務(wù)器的發(fā)展,提高學(xué)生計(jì)算和存儲(chǔ)管理能力。
HBase是面向列的NoSQL數(shù)據(jù)庫(kù),雖然類似于包含行和列的關(guān)系數(shù)據(jù)庫(kù),但不是關(guān)系數(shù)據(jù)庫(kù)。關(guān)系數(shù)據(jù)庫(kù)面向行,HBase面向列。
在此系統(tǒng)中需要處理和分析大量半結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù),在線分析處理大量數(shù)據(jù),并進(jìn)行挖掘與分析,采用HBase這種非關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)大量數(shù)據(jù)比關(guān)系數(shù)據(jù)庫(kù)更具有優(yōu)勢(shì)。
MongoDB是一種分布式非關(guān)系數(shù)據(jù)庫(kù),MongoDB數(shù)據(jù)結(jié)構(gòu)如鍵值對(duì)構(gòu)成,類似一個(gè)JSON文檔。Mongodb可以儲(chǔ)存更多的復(fù)雜的數(shù)據(jù)結(jié)構(gòu),查詢語言系統(tǒng)強(qiáng)大,語法結(jié)構(gòu)相似于高級(jí)語言的查詢方式,如java語言面向?qū)ο蟮姆绞讲樵?。此外,還可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫(kù)的查詢功能單表,提供對(duì)數(shù)據(jù)索引的最大支持。
MongoDB的非結(jié)構(gòu)數(shù)據(jù)都存儲(chǔ)在類似于JSON的文檔中,使數(shù)據(jù)的持久性和合并更容易。應(yīng)用程序的代碼對(duì)象已被推送到文檔模型中,可以簡(jiǎn)單使用數(shù)據(jù),架構(gòu)的管理、數(shù)據(jù)的訪問和各種復(fù)雜豐富的功能不會(huì)受到任何影響,且沒有停機(jī)時(shí)間,可以動(dòng)態(tài)更改架構(gòu),具有較好的操作靈活性。
系統(tǒng)需要對(duì)數(shù)據(jù)進(jìn)行分析和可視化處理,對(duì)數(shù)據(jù)管道、數(shù)據(jù)搜索、圖形處理以及數(shù)據(jù)的可靠性、靈活性和安全性需求較大,采用Mongodb數(shù)據(jù)庫(kù)更具有效性和實(shí)用性。
使用Python編程語言調(diào)用Spark API,實(shí)現(xiàn)對(duì)HBase數(shù)據(jù)庫(kù)中的大量非結(jié)構(gòu)化職位信息數(shù)據(jù)進(jìn)行快速分析和處理,可以進(jìn)行行業(yè)的學(xué)歷統(tǒng)計(jì)、行業(yè)職業(yè)崗位統(tǒng)計(jì)、行業(yè)需求技能統(tǒng)計(jì)、行業(yè)薪酬統(tǒng)計(jì)、職位發(fā)布日期統(tǒng)計(jì)以及行業(yè)工作經(jīng)驗(yàn)統(tǒng)計(jì)以及行業(yè)工作地點(diǎn)統(tǒng)計(jì)的數(shù)據(jù)處理工作,并將分析結(jié)果存儲(chǔ)到Mongodb數(shù)據(jù)庫(kù)中。
Spark是一種快速發(fā)展的新開源技術(shù),可在計(jì)算機(jī)節(jié)點(diǎn)群集上工作。速度是Apache Spark的標(biāo)志之一,在這種環(huán)境下工作的開發(fā)人員可以獲得基于RDD(彈性分布式數(shù)據(jù)集)框架的應(yīng)用程序編程接口。RDD可以將節(jié)點(diǎn)分離到群集上的較小分區(qū)中,以便獨(dú)立處理數(shù)據(jù)。
使用web網(wǎng)頁(yè)方式展示信息,使用python開源框架Django。為了給用戶可視化直觀展示采用了Apache的ECharts開源可視化圖表庫(kù),提供更直觀、交互豐富、可高度進(jìn)行個(gè)性化定制的數(shù)據(jù)信息可視化圖表。
利用Spark MLlib機(jī)器學(xué)習(xí)的樸素貝葉斯算法對(duì)職位信息進(jìn)行建模,學(xué)生或求職者需要推薦合適職位時(shí),可以通過提交表單對(duì)web法出請(qǐng)求,程序?qū)ζ渥龀鲰憫?yīng),并調(diào)用推薦算法程序進(jìn)行分析,再將結(jié)果返回給用戶。
Spark機(jī)器學(xué)習(xí)庫(kù)(MLlib)建立在Spark上,并在分類、回歸、決策樹,聚類等領(lǐng)域提供了大量算法。Spark在內(nèi)存中運(yùn)行,性能較好,可以與其他模塊結(jié)合使用,以執(zhí)行特征轉(zhuǎn)換、提取和選擇。
Spark MLlib支持迭代計(jì)算,優(yōu)化性能和結(jié)果質(zhì)量,提供了許多ML算法的分布式實(shí)現(xiàn)。算法具有低級(jí)基元和實(shí)用程序,可用于優(yōu)化、特征提取和線性代數(shù)。
系統(tǒng)整體架構(gòu)如圖1所示。
圖1 系統(tǒng)整體架構(gòu)
本文介紹了大數(shù)據(jù)崗位分析系統(tǒng)功能的實(shí)現(xiàn)與系統(tǒng)的運(yùn)用。通過對(duì)系統(tǒng)設(shè)計(jì)和系統(tǒng)的實(shí)現(xiàn)做了比較詳細(xì)的介紹,并介紹了系統(tǒng)所依賴的各種環(huán)境并對(duì)其分析和比較其他工具的優(yōu)勢(shì),如Spark計(jì)算框和數(shù)據(jù)庫(kù)的選擇。通過大數(shù)據(jù)崗位分析系統(tǒng)幫助高校學(xué)生透析職位市場(chǎng)需求變化,預(yù)測(cè)就業(yè)前景,并給出現(xiàn)階段符合自己條件的崗位。