凌文婧 鄭麗敏
摘 要:針對(duì)海量的食品安全數(shù)據(jù),傳統(tǒng)食品安全預(yù)警系統(tǒng)架構(gòu)往往存在運(yùn)算速度慢、處理效率低等缺點(diǎn),本文提出了一種基于Hadoop的食品安全預(yù)警系統(tǒng)架構(gòu),該架構(gòu)以Hadoop框架為基礎(chǔ),分別設(shè)定了基于分布式爬蟲(chóng)的數(shù)據(jù)獲取模塊、基于數(shù)理統(tǒng)計(jì)和數(shù)據(jù)挖掘的數(shù)據(jù)分析、存儲(chǔ)模塊和預(yù)警模塊。該架構(gòu)具有層次清晰、擴(kuò)展性高等特點(diǎn),適合運(yùn)用和推廣。
關(guān)鍵詞:Hadoop 食品安全 系統(tǒng)
食品安全指的是食品應(yīng)當(dāng)符合無(wú)毒害、對(duì)人體健康不造成任何急慢性危害,并且包含一定營(yíng)養(yǎng)物質(zhì)的特點(diǎn)。為了維護(hù)人民群眾在食品安全與保障方面的相關(guān)權(quán)益,國(guó)內(nèi)外建立了相應(yīng)的食品安全預(yù)警和快速反應(yīng)系統(tǒng),來(lái)預(yù)防食品突發(fā)性、群發(fā)性事件。
目前較大的食品安全預(yù)警系統(tǒng)有:世界衛(wèi)生組織(WHO)的國(guó)際食品安全網(wǎng)絡(luò)(INFOSAN)、歐盟食品和飼料快速預(yù)警系統(tǒng)(RASFF)、美國(guó)疾病和預(yù)防中心(CDC)的FoodNet系統(tǒng)等[1]。我國(guó)國(guó)家質(zhì)檢總局建立了食品安全風(fēng)險(xiǎn)快速預(yù)警與快速反應(yīng)系統(tǒng),來(lái)快速報(bào)告和處理食品突發(fā)事件[2];香港行政區(qū)在2007年啟動(dòng)了食品安全快速預(yù)警系統(tǒng)(RAS);北京市在2012年啟用了食品安全短信預(yù)警平臺(tái),來(lái)防治食品安全突發(fā)事件。
國(guó)內(nèi)外通用的系統(tǒng)大多采用檢驗(yàn)檢疫產(chǎn)生的數(shù)據(jù)來(lái)對(duì)食品安全進(jìn)行預(yù)警,這些數(shù)據(jù)的特點(diǎn)是,準(zhǔn)確、可靠且容易被處理。然而,食品安全數(shù)據(jù)不僅限于此來(lái)源,在互聯(lián)網(wǎng)絡(luò)中具有海量的食品安全相關(guān)信息。這些信息大多與媒體報(bào)導(dǎo)、網(wǎng)友發(fā)帖、政府發(fā)布為主要來(lái)源,具有多種來(lái)源渠道和廣泛的受眾[3]。因而,有效地利用網(wǎng)絡(luò)中海量的食品安全數(shù)據(jù)來(lái)搭建食品安全預(yù)警系統(tǒng)具有廣闊的前景。
Hadoop是一個(gè)使用Java編寫(xiě)的開(kāi)源分布式框架,它在存儲(chǔ)和計(jì)算方面(分別由Hadoop分布式文件系統(tǒng)HDFS和Map/Reduce編程模型實(shí)現(xiàn))與普通的現(xiàn)有的單節(jié)點(diǎn)計(jì)算相比具有顯著優(yōu)勢(shì)[4]。使用Hadoop平臺(tái)來(lái)獲取和處理網(wǎng)絡(luò)信息、搭建食品安全預(yù)警系統(tǒng),具有處理速度快、并行化程度高、預(yù)警及時(shí)的特點(diǎn)。
1 Hadoop開(kāi)發(fā)環(huán)境搭建
本文使用的Hadoop版本是其在Linux平臺(tái)上的一個(gè)Java開(kāi)源版本。在開(kāi)源操作系統(tǒng)Linux環(huán)境中進(jìn)行Hadoop開(kāi)源平臺(tái)的搭建,首先需要安裝Java軟件開(kāi)發(fā)工具包(Java SE Development Kit,JDK)并配置環(huán)境變量,使得基于Java語(yǔ)言的Hadoop代碼能夠順利運(yùn)行;然后進(jìn)行網(wǎng)絡(luò)橋接和配置,將各物理機(jī)和虛擬機(jī)的IP地址設(shè)置在同一個(gè)網(wǎng)段,且固定IP;最后進(jìn)行Hadoop平臺(tái)的安裝及配置,并監(jiān)控各個(gè)節(jié)點(diǎn)的運(yùn)行狀況。以下我們將詳細(xì)闡述各個(gè)階段的配置過(guò)程。
1.1 網(wǎng)絡(luò)橋接和配置
為使分布式平臺(tái)的各主機(jī)節(jié)點(diǎn)能被其他節(jié)點(diǎn)通過(guò)網(wǎng)絡(luò)地址訪(fǎng)問(wèn)到,將網(wǎng)絡(luò)地址改寫(xiě)為同局域網(wǎng)內(nèi)的固定IP,因?yàn)楸疚闹惺褂昧薑VM虛擬機(jī)技術(shù)配置網(wǎng)絡(luò),因而需要對(duì)虛擬機(jī)進(jìn)行網(wǎng)絡(luò)橋接,使主機(jī)和節(jié)點(diǎn)在同一個(gè)網(wǎng)段上。本文使用的是bridge的網(wǎng)絡(luò)連接方式,將宿主機(jī)和客戶(hù)機(jī)設(shè)定在同一個(gè)局域網(wǎng)中,有利于相互訪(fǎng)問(wèn)。
另外,為了使得各個(gè)虛擬機(jī)之間能夠順暢訪(fǎng)問(wèn),我們關(guān)閉了Linux系統(tǒng)中自帶的防火墻功能。為了保障Hadoop系統(tǒng)間的信息安全,我們使用SSH協(xié)議來(lái)為遠(yuǎn)程登錄會(huì)話(huà)提供安全性。在創(chuàng)建一對(duì)密鑰后,將公用密鑰寄放在NameNode宿主機(jī)中,實(shí)現(xiàn)NameNode和DataNode之間的連通(DataNode之間并無(wú)網(wǎng)絡(luò)相連)。在通信過(guò)程中,我們使用RSA加密算法加密。網(wǎng)絡(luò)橋接和配置完成后,形成了倒樹(shù)狀的邏輯結(jié)構(gòu)。
1.2 Hadoop平臺(tái)的安裝及配置
本文使用兩臺(tái)服務(wù)器,分別部署2個(gè)和3個(gè)虛擬機(jī)來(lái)假設(shè)Hadoop平臺(tái),共計(jì)為7個(gè)節(jié)點(diǎn)。這些節(jié)點(diǎn)均為CentOS系統(tǒng),并統(tǒng)一安裝了JDK1.7.0_25。本系統(tǒng)使用Apache基金會(huì)發(fā)布的Hadoop2.2.0版本,該版本的特點(diǎn)為運(yùn)行較為穩(wěn)定,且與JDK1.7.0_25互相兼容。在配置Hadoop的過(guò)程中,需要在hadoop/slaves文件中加入DataNode的IP地址,使得Hadoop在項(xiàng)目運(yùn)行過(guò)程中可通過(guò)該IP訪(fǎng)問(wèn)DataNode。我們將服務(wù)器的/etc/hosts文件中設(shè)置為對(duì)應(yīng)的主機(jī)名和固定IP地址,來(lái)方便SSH的訪(fǎng)問(wèn)。
然后配置SSH的RSA加密訪(fǎng)問(wèn),首先使用ssh-keygen生成一對(duì)密鑰,接著將公鑰/root/.ssh/id_rsa.pub拷貝到DataNode服務(wù)器中,使得DataNode可與NameNode進(jìn)行安全的數(shù)據(jù)交流。接下來(lái)我們啟動(dòng)hadoop并進(jìn)行測(cè)試,首先啟動(dòng)NameNode,接著分別啟動(dòng)DataNode,并設(shè)置好日志存儲(chǔ)位置,以便對(duì)任務(wù)運(yùn)行狀況進(jìn)行監(jiān)視。
1.3 在Hadoop平臺(tái)上進(jìn)行任務(wù)部署
本系統(tǒng)通過(guò)網(wǎng)頁(yè)http協(xié)議訪(fǎng)問(wèn)相關(guān)端口(定為localhost:50030端口和localhost:50070端口)前者監(jiān)控MapReduce任務(wù)的運(yùn)行情況,資源占用等,后者為監(jiān)控各個(gè)DataNode子節(jié)點(diǎn)的運(yùn)行狀況。如圖1所示。
同時(shí),可通過(guò)控制臺(tái)的hadoop命令來(lái)運(yùn)行所編寫(xiě)的Java程序,首先需要將編寫(xiě)的Java程序?qū)氲紿DFS分布式文件系統(tǒng)中,然后運(yùn)行hadoop命令對(duì)程序進(jìn)行執(zhí)行。在程序執(zhí)行的過(guò)程中,同樣可使用網(wǎng)頁(yè)端口來(lái)監(jiān)視各節(jié)點(diǎn)資源分配情況,任務(wù)處理狀況和查看運(yùn)行日志。
2 食品安全預(yù)警系統(tǒng)架構(gòu)
本系統(tǒng)的系統(tǒng)架構(gòu)如圖2所示。主要分為數(shù)據(jù)獲取模塊、數(shù)據(jù)分析存儲(chǔ)模塊和數(shù)據(jù)展示模塊。其中,數(shù)據(jù)獲取模塊首先分析用戶(hù)自定義的數(shù)據(jù)挖掘策略,然后通過(guò)網(wǎng)絡(luò)爬蟲(chóng)結(jié)合食品安全數(shù)據(jù)庫(kù)來(lái)對(duì)網(wǎng)絡(luò)中的食品安全數(shù)據(jù)進(jìn)行爬取。所獲取到的網(wǎng)絡(luò)輿情信息結(jié)合實(shí)驗(yàn)室監(jiān)測(cè)數(shù)據(jù),共同存儲(chǔ)在云存儲(chǔ)服務(wù)器中,進(jìn)行數(shù)據(jù)備份。
在數(shù)據(jù)分析模塊,我們使用了統(tǒng)計(jì)學(xué)和數(shù)據(jù)挖掘的分析方法,來(lái)對(duì)數(shù)據(jù)獲取模塊得到的食品安全信息進(jìn)行處理,從而得到食品安全預(yù)警信息。我們從食品安全數(shù)據(jù)的時(shí)間分布、空間分布以及違禁項(xiàng)分布3個(gè)方面來(lái)分析所獲取的數(shù)據(jù)。最后將所得到的預(yù)警信息生成食品安全預(yù)警報(bào)告,并將此報(bào)告通過(guò)數(shù)據(jù)展示模塊匯報(bào)給用戶(hù)。
我們搭建的Hadoop集群在該食品安全預(yù)警系統(tǒng)中有兩處應(yīng)用。首先在使用爬蟲(chóng)進(jìn)行數(shù)據(jù)獲取的時(shí)候,爬蟲(chóng)程序架設(shè)在Hadoop集群之上,充分利用集群的運(yùn)算和處理性能,來(lái)使用爬蟲(chóng)進(jìn)行并行化爬取食品安全數(shù)據(jù);其次,在進(jìn)行數(shù)據(jù)挖掘和分析的過(guò)程中,Hadoop集群被用于處理和分析網(wǎng)絡(luò)中獲取的食品安全數(shù)據(jù),最終得出食品安全預(yù)警信息,輸出到數(shù)據(jù)展示的用戶(hù)端。
3 數(shù)據(jù)獲取模塊
數(shù)據(jù)獲取模塊以爬蟲(chóng)技術(shù)的應(yīng)用為核心,主要分為Frontier模塊、ToeThread模塊和Processor模塊,這3個(gè)模塊的作用分別為:爬取網(wǎng)頁(yè)中的URI,向線(xiàn)程提供鏈接;實(shí)現(xiàn)多線(xiàn)程運(yùn)行;實(shí)現(xiàn)爬蟲(chóng)處理信息的邏輯結(jié)構(gòu)等。見(jiàn)圖3。
Frontier模塊用于向線(xiàn)程提供鏈接,它的作用主要是:保存等待處理的鏈接、記錄那些已經(jīng)被處理過(guò)的鏈接。在Frontier實(shí)現(xiàn)的過(guò)程中,為了解決大數(shù)據(jù)量,多并發(fā)存在的問(wèn)題,因而實(shí)現(xiàn)了Berkeley Database嵌入式數(shù)據(jù)庫(kù),它能夠按“key/value”方式來(lái)保存數(shù)據(jù)。
在ToeThread模塊中,提供了一個(gè)標(biāo)準(zhǔn)的線(xiàn)程池ToePool,用于管理所有的抓取線(xiàn)程,從而更有效更快速的抓取網(wǎng)頁(yè)內(nèi)容。在Processor模塊中,首先進(jìn)行預(yù)抓取,接著進(jìn)行網(wǎng)頁(yè)抓取活動(dòng),然后進(jìn)行網(wǎng)頁(yè)內(nèi)容的提取,并進(jìn)行寫(xiě)入,最后完成抓取活動(dòng)的收尾工作。如圖4所示。
4 食品安全預(yù)警系統(tǒng)
功能設(shè)計(jì)
為了從數(shù)據(jù)獲取模塊獲得的數(shù)據(jù)中提取預(yù)警信息,本系統(tǒng)設(shè)計(jì)了預(yù)警數(shù)據(jù)分析與挖掘模塊。通過(guò)對(duì)網(wǎng)絡(luò)食品安全信息進(jìn)行數(shù)據(jù)分析和挖掘后,當(dāng)發(fā)現(xiàn)預(yù)警因子的數(shù)據(jù)值超過(guò)預(yù)警設(shè)定值時(shí),預(yù)警系統(tǒng)發(fā)出預(yù)警信息,并呈遞給用戶(hù)處理。以下小節(jié)將詳細(xì)敘述該預(yù)警過(guò)程:
4.1 預(yù)警因子的確定
參考國(guó)家對(duì)食品安全的檢測(cè)標(biāo)準(zhǔn),我們將預(yù)警因子設(shè)定為以下幾個(gè)分類(lèi):添加劑、重金屬超標(biāo)、獸藥殘留、微生物超標(biāo)、違禁物添加。并對(duì)這幾類(lèi)因子設(shè)定了不同的預(yù)警閾值。比如,在國(guó)家標(biāo)準(zhǔn)中,添加劑、重金屬、獸藥殘留和微生物這4個(gè)指標(biāo)允許有一定量的檢出,但不允許超過(guò)國(guó)家限定的含量。因而,當(dāng)這幾類(lèi)預(yù)警因子達(dá)到一定標(biāo)準(zhǔn)的時(shí)候,預(yù)警提示才會(huì)發(fā)布;而作為違禁物添加的項(xiàng)目,國(guó)家規(guī)定不得檢出,這類(lèi)物質(zhì)一旦出現(xiàn),無(wú)論含量是否較大都將發(fā)布預(yù)警提示。
4.2 預(yù)警信息的獲取
本系統(tǒng)通過(guò)兩類(lèi)方法來(lái)獲取食品安全預(yù)警信息。
數(shù)據(jù)分析的方法,主要是統(tǒng)計(jì)學(xué)分析和數(shù)據(jù)擬合。我們將各項(xiàng)食品的預(yù)警因子在時(shí)間上進(jìn)行趨勢(shì)擬合,如近期擬合曲線(xiàn)明顯呈上升趨勢(shì)(如曲線(xiàn)斜率超過(guò)限定值),則認(rèn)為該食品的此項(xiàng)預(yù)警因子的檢出呈明顯上升趨勢(shì),此時(shí)即發(fā)布預(yù)警信息;否則則認(rèn)為近期該項(xiàng)目處于安全狀況,不發(fā)布預(yù)警信息。
數(shù)據(jù)挖掘方法,本項(xiàng)目使用關(guān)聯(lián)規(guī)則挖掘方法,來(lái)對(duì)各項(xiàng)因子之間的潛在規(guī)則進(jìn)行探尋。例如,通過(guò)歷年數(shù)據(jù)關(guān)聯(lián)規(guī)則挖掘,發(fā)現(xiàn)當(dāng)預(yù)警因子A明顯升高時(shí),預(yù)警因子B也隨之升高,且A和B出現(xiàn)的相關(guān)性R2大于0.8,則認(rèn)為預(yù)警因子A和B呈強(qiáng)相關(guān)性。依照此規(guī)律,當(dāng)預(yù)警因子A的檢測(cè)超過(guò)閾值時(shí),應(yīng)當(dāng)考慮同時(shí)發(fā)布預(yù)警因子B的預(yù)警信息。
5 總結(jié)和展望
本文通過(guò)對(duì)Hadoop平臺(tái)和爬蟲(chóng)技術(shù)的研究,提出了一種基于Hadoop的食品安全預(yù)警系統(tǒng)架構(gòu)。該架構(gòu)以Hadoop分布式系統(tǒng)為底層框架,結(jié)合使用爬蟲(chóng)技術(shù)來(lái)獲取食品安全數(shù)據(jù)。該架構(gòu)適合應(yīng)用于對(duì)海量網(wǎng)絡(luò)食品安全數(shù)據(jù)進(jìn)行處理和預(yù)警。后續(xù)工作可集中在爬蟲(chóng)策略的改進(jìn)上,使其爬取過(guò)程更適合食品安全網(wǎng)站的信息發(fā)布特點(diǎn);也可進(jìn)一步研究Hadoop平臺(tái)上的任務(wù)調(diào)度和優(yōu)化問(wèn)題,進(jìn)行任務(wù)調(diào)度、優(yōu)化及負(fù)載的實(shí)驗(yàn),使該系統(tǒng)達(dá)到最合理的任務(wù)分配方式。
參考文獻(xiàn)
[1] Marvin H J P, Kleter G A, Prandini A, et al. Early identification systems for emerging foodborne hazards [J]. Food and Chemical Toxicology, 2009, 47(5):915-926.
[2] Law W T Y, Chiu D K W, Hu H, et al. An advanced rapid alert system for food safety[C]//e-Business Engineering (ICEBE),2012 IEEE Ninth International Conference on. IEEE, 2012:361-366.
[3] 劉文,李強(qiáng).食品安全網(wǎng)絡(luò)輿情監(jiān)測(cè)與干預(yù)研究初探[J].中國(guó)科技論壇, 2012(7):44-49.
[4] 王彥明.近年來(lái)Hadoop國(guó)內(nèi)研究進(jìn)展[J].現(xiàn)代情報(bào),2014,34(8):4-19.