国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Hadoop平臺的農(nóng)產(chǎn)品價格數(shù)據(jù)爬取和存儲系統(tǒng)的研究

2017-04-14 00:47楊曉東郜魯濤楊林楠劉建陽
計算機應(yīng)用與軟件 2017年3期
關(guān)鍵詞:副本爬蟲網(wǎng)頁

楊曉東 郜魯濤 楊林楠* 劉建陽

1(云南農(nóng)業(yè)大學(xué)基礎(chǔ)與信息工程學(xué)院 云南 昆明 650201)2(云南省信息技術(shù)發(fā)展中心 云南 昆明 650228)

基于Hadoop平臺的農(nóng)產(chǎn)品價格數(shù)據(jù)爬取和存儲系統(tǒng)的研究

楊曉東1郜魯濤1楊林楠1*劉建陽2

1(云南農(nóng)業(yè)大學(xué)基礎(chǔ)與信息工程學(xué)院 云南 昆明 650201)2(云南省信息技術(shù)發(fā)展中心 云南 昆明 650228)

目前許多大型農(nóng)貿(mào)市場和農(nóng)業(yè)信息商務(wù)平臺都在實時發(fā)布每天各地區(qū)不同農(nóng)產(chǎn)品的價格數(shù)據(jù)。針對數(shù)據(jù)更新快、數(shù)據(jù)量大、數(shù)據(jù)形式多樣,使數(shù)據(jù)的爬取和存儲以及后續(xù)的分析工作變得困難,提出基于Hadoop的農(nóng)產(chǎn)品價格爬取及存儲系統(tǒng)。利用HttpClient框架結(jié)合線程池通過多線程爬取,爬取結(jié)束后執(zhí)行完整性檢查,過濾出信息不完整的網(wǎng)頁,進行二次爬取直到信息完整。對爬取到的網(wǎng)頁使用正則表達式進行解析和清洗,提取有用的數(shù)據(jù),以文本文件的形式存入HDFS(Hadoop Distributed File System ),此后爬取到的數(shù)據(jù)以追加的方式寫入HDFS 文件中。實驗表明HDFS的寫入性能滿足爬取數(shù)據(jù)不斷遞增的現(xiàn)狀,副本數(shù)越少,數(shù)據(jù)塊越大,寫入性能越好。

分布式系統(tǒng) 爬蟲 Hadoop HDFS 正則表達式

0 引 言

隨著互聯(lián)網(wǎng)的快速發(fā)展,預(yù)計2020年全球數(shù)字規(guī)模將達到40 ZB[1],數(shù)據(jù)類型以結(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化三種為主,其中半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)的存儲是當下面臨的主要問題。如今全國各地的大型農(nóng)貿(mào)交易市場和農(nóng)業(yè)信息商務(wù)平臺,借助互聯(lián)網(wǎng)的實時性高、傳播速度快、覆蓋面廣等特點,在實時發(fā)布農(nóng)產(chǎn)品價格,更新供需數(shù)據(jù)。出現(xiàn)價格數(shù)據(jù)不斷增加卻過于分散的情況,因此通過網(wǎng)絡(luò)爬蟲爬取相關(guān)網(wǎng)頁,抽取有價值的數(shù)據(jù)進行存儲和應(yīng)用十分重要。

Hadoop分布式框架支持海量存儲,快速數(shù)據(jù)訪問的分布式處理,具有可擴展性、失效轉(zhuǎn)移等特點[2-3]。其中HDFS是分布式文件系統(tǒng),提供高吞吐量的數(shù)據(jù)訪問,能存儲從GB級到TB級別大小的單個文件,以及數(shù)千萬量級的文件數(shù)量。針對從農(nóng)產(chǎn)品價格網(wǎng)站爬取到的網(wǎng)頁大小不等,文件數(shù)量過多等特點,HDFS不像其他文件系統(tǒng),一個小于數(shù)據(jù)塊大小的文件占據(jù)整個塊。

HDFS文件系統(tǒng)將元數(shù)據(jù)文件存儲在Namenode節(jié)點的內(nèi)存中,因此存儲的文件總數(shù)與Namenode的內(nèi)存容量密切相關(guān)。文獻[4]-文獻[7]針對HDFS文件系統(tǒng)的弊端,分別提出了優(yōu)化方案,使文件存儲數(shù)量和寫入效率都有了提升。本文存儲的文件普遍在百兆以上,不斷爬取數(shù)據(jù)進行追加操作,會使單個文件的大小不斷增大,而文件數(shù)量不會增加。針對HDFS文件系統(tǒng)的不同配置,進行寫入性能的測試和比較。

1 爬蟲系統(tǒng)的設(shè)計與實現(xiàn)

本系統(tǒng)針對特定農(nóng)產(chǎn)品價格網(wǎng)站進行數(shù)據(jù)爬取,系統(tǒng)總共分為4個模塊:爬取、完整性檢查、解析、HDFS存儲。爬蟲系統(tǒng)基于Hadoop框架通過URL并行爬取網(wǎng)頁,針對不同網(wǎng)頁的內(nèi)容分類方式,根據(jù)需要設(shè)定爬取深度為n,保證數(shù)據(jù)爬取的完整性。在爬取過程中,由于網(wǎng)絡(luò)或者被爬取網(wǎng)站所在服務(wù)器的穩(wěn)定性,可能導(dǎo)致網(wǎng)頁爬取失敗。所以每次發(fā)起Http請求都會驗證返回值,保證請求成功。使用正則表達式對網(wǎng)頁進行解析,將解析得到的數(shù)據(jù)以文本文件格式存入HDFS。抽取特定標簽中包含的URL放入請求函數(shù)中,循環(huán)執(zhí)行上述過程直到爬取深度達到n值。

1.1 爬蟲基本原理

網(wǎng)絡(luò)爬蟲的主要作用是從網(wǎng)上下載網(wǎng)頁進行使用,可以建立索引提供搜索引擎的功能,解析其中的數(shù)據(jù)進行分析挖掘等[8-14]。其基本工作原理如下:首先初始化一個URL,判斷該URL是否處理過,如果沒有,則根據(jù)要求遍歷該URL中的鏈接地址,爬取所有遍歷的網(wǎng)頁直到結(jié)束。然后根據(jù)一定的遍歷算法傳入新的初始化URL,繼續(xù)遍歷鏈接,爬取網(wǎng)頁,直到待初始化隊列中沒有可用的URL為止。網(wǎng)絡(luò)爬蟲工作原理如圖1所示。

圖1 網(wǎng)絡(luò)爬蟲工作原理圖

1.2 爬取策略設(shè)計

在進行農(nóng)產(chǎn)品價格數(shù)據(jù)爬取過程中,發(fā)現(xiàn)價格的發(fā)布方式主要分為兩類:一類是以表格的形式列出所有價格數(shù)據(jù),不支持品種、產(chǎn)地等方式篩選查看價格數(shù)據(jù),例如北京新發(fā)地農(nóng)產(chǎn)品批發(fā)市場。此類網(wǎng)站分頁較多,但是網(wǎng)頁中鏈接的頁面較少,可以使用深度優(yōu)先爬取網(wǎng)頁。目前有近30萬條農(nóng)產(chǎn)品價格數(shù)據(jù),分為1萬多個頁面,每個頁面的Http地址可以按規(guī)則進行分解,使用多線程技術(shù)爬取頁面,提高爬取的速度。另一類是支持品種、產(chǎn)地等篩選的價格數(shù)據(jù)表格,例如一畝田農(nóng)產(chǎn)品商務(wù)網(wǎng)站。數(shù)據(jù)分頁較少,但是網(wǎng)頁中的鏈接頁面多,適合廣度優(yōu)先的搜索策略,遍歷所有需要的鏈接地址爬取網(wǎng)頁。

1.3 爬取模塊

本爬蟲系統(tǒng)的爬取模塊主要任務(wù)是讀取URL地址并將其放入集合,拆分隊列,使用多線程技術(shù)獲取網(wǎng)頁。基于爬取策略,分析網(wǎng)站內(nèi)容的組織形式,對于URL地址滿足特定規(guī)律即URL地址中只有部分路徑或者網(wǎng)頁名不相同,同時知道總的頁面數(shù),可拆分頁面數(shù)放入不同的線程進行處理,在每個線程中通過變量循環(huán)遍歷所有待爬取網(wǎng)頁地址。以江蘇凌江唐農(nóng)產(chǎn)品批發(fā)市場為例,該市場目前共發(fā)布近1 000 000條數(shù)據(jù),66 000多個頁面。每個頁面對應(yīng)一個URL地址,形成一個有66 000多個地址的URL列表,將列表進行拆分放入線程池,通過HttpClient框架發(fā)起GET請求并下載價格數(shù)據(jù)進行解析。最終存入HDFS中,通過配置形成3個副本的自動備份。如圖2為爬取模塊工作機制。

圖2 爬取模塊工作機制

1.4 解析模塊

不同網(wǎng)頁的編碼方式差異較大,使用正則表達式針對不同的編碼方式生成規(guī)則模板過濾信息,可以有效提取內(nèi)容,但是會使解析工作變得繁雜和冗余,需要不斷地設(shè)計解析規(guī)則。本文通過標簽名或標簽對中的唯一特征值鎖定標簽對,再抽取標簽對中的內(nèi)容,實驗表明能快速有效提取信息,避免大量重復(fù)設(shè)計解析規(guī)則。如圖3為數(shù)據(jù)解析過程。

圖3 數(shù)據(jù)解析過程

通過重載FileSystem提供的get()函數(shù)確定要使用的文件系統(tǒng)以及讀取配置文件,使用open()函數(shù)來獲取文件的輸入流,獲取Html類型信息后通過標簽名或特征值使用正則表達式解析DOM。以北京新發(fā)地農(nóng)產(chǎn)品批發(fā)市場公布的網(wǎng)頁價格數(shù)據(jù)為例,從body標簽開始獲取“class=table”的標簽對,再從該標簽對中獲取包含價格數(shù)據(jù)的標簽對“class=hq_table”,最后利用Java的split()方法通過空格拆分數(shù)據(jù),解析出需要的數(shù)據(jù)。如圖4所示為解析前數(shù)據(jù)格式,圖5為解析后的數(shù)據(jù)格式。

圖4 解析前數(shù)據(jù)格式

圖5 解析后數(shù)據(jù)格式

2 HDFS存儲模塊

相對于傳統(tǒng)的分布式文件系統(tǒng),HDFS具有高容錯性和高可用性的特點[15]。HDFS的“一次寫,多次讀”的特性,很好地支持大數(shù)據(jù)量的一次寫入、多次讀取,有助于對元數(shù)據(jù)的保存和后期的查詢分析。HDFS文件系統(tǒng)包括一個主控節(jié)點NameNode和一組DataNode節(jié)點,NameNode用于管理整個文件系統(tǒng)的命名空間和元數(shù)據(jù),DataNode是實際存儲和管理文件的數(shù)據(jù)塊。圖2中HDFS包含三個小方塊,每個方塊代表一個DataNode節(jié)點,節(jié)點中重復(fù)的數(shù)字表示數(shù)據(jù)的副本,本系統(tǒng)通過配置hdfs-site.xml文件中的dfs.replication屬性,將副本數(shù)設(shè)置為3個。

分布式文件系統(tǒng)HDFS提供了命令行和API兩種文件操作方式,包含常用的寫入、讀取、關(guān)閉等操作。本系統(tǒng)使用正則表達式解析原始網(wǎng)頁并保存為文本文件格式,此后通過append()方法向文件中不斷追加解析出來的數(shù)據(jù)。以下是通過API將數(shù)據(jù)寫入HDFS的過程:

1) 通過Path類定義需要的路徑,該路徑為即將寫入數(shù)據(jù)的路徑。

2) 在創(chuàng)建文件系統(tǒng)實例前,需要獲取當前的環(huán)境變量,Configuration類提供了封裝好配置的實例,該配置在core-site.xml中設(shè)置。

3) 接下來需要重載HDFS文件系統(tǒng)提供的get()方法,加載當前環(huán)境變量和建立讀寫路徑。

4) 通過FSDataOutputStream類創(chuàng)建輸出流,其中write()方法可以對數(shù)據(jù)文件進行相應(yīng)的寫操作。為了提高寫入速度,以及解析過程不影響寫入性能,使用Java的多線程技術(shù)對數(shù)據(jù)流進行操作,將解析好的數(shù)據(jù)提前放入隊列再執(zhí)行寫入操作。

5) 執(zhí)行完寫操作后,通過closeStream()方法關(guān)閉當前線程的寫出流,再用notify()方法喚醒另一個線程執(zhí)行寫操作。數(shù)據(jù)寫入HDFS的流程如圖6所示。

圖6 數(shù)據(jù)寫入HDFS的流程圖

3 實驗結(jié)果及分析

本系統(tǒng)可以解析并存儲北京新發(fā)地農(nóng)產(chǎn)品批發(fā)市場、江蘇凌家塘農(nóng)副產(chǎn)品批發(fā)市場、浙江省金華農(nóng)產(chǎn)品批發(fā)市場、北京城北回龍觀商品交易市場等。實驗選取從北京新發(fā)地和江蘇凌家塘農(nóng)產(chǎn)品批發(fā)市場爬取的價格數(shù)據(jù)為測試對象。

3.1 測試環(huán)境

測試使用了3臺服務(wù)器搭建測試環(huán)境,每臺服務(wù)器的硬件配置見表1所示,Hadoop版本為2.6.0。

表1 硬件配置

3.2 測試數(shù)據(jù)

測試數(shù)據(jù)集為爬取的80 000多個網(wǎng)頁,原始數(shù)據(jù)集共120多GB,通過正則表達式對數(shù)據(jù)解析后寫入HDFS。

3.3 測試場景

數(shù)據(jù)塊是磁盤進行數(shù)據(jù)讀/寫的最小單位,HDFS也一樣,增大HDFS的塊大小,可以減少尋址開銷。實驗通過設(shè)置不同的塊大小和副本數(shù)量,比較HDFS的寫入性能。如圖7和圖8為不同數(shù)據(jù)塊大小,不同副本數(shù)的寫入時間比較。

圖7 HDFS寫入性能(64 MB/塊)

圖8 HDFS寫入性能(128 MB/塊)

3.4 實驗結(jié)果

實驗過程用多線程技術(shù)預(yù)先解析數(shù)據(jù),排除了解析速度慢導(dǎo)致的延遲和誤差。通過實驗數(shù)據(jù)可以看出1個副本的寫入速度要比多個副本快,時間差距會隨著數(shù)據(jù)量的變大而增大。數(shù)據(jù)塊大小設(shè)置為64和128MB時的寫入速度相近,總體來看,當設(shè)置數(shù)據(jù)塊為128MB時寫入速度要比64MB時略快。

4 結(jié) 語

本文針對網(wǎng)絡(luò)資源的不斷豐富,爬取到的數(shù)據(jù)量巨大,而且增長速度快等特點,導(dǎo)致后期的存儲和分析難的現(xiàn)狀。設(shè)計了網(wǎng)絡(luò)爬蟲系統(tǒng)并且利用Hadoop平臺的HDFS文件系統(tǒng)進行存儲,并進行了寫入性能的實驗設(shè)計。從實驗得到的數(shù)據(jù)來看HDFS能很好地支持網(wǎng)絡(luò)爬蟲爬取的數(shù)據(jù)不斷遞增的現(xiàn)狀。即使設(shè)置了多副本的備份機制,也能很好地進行數(shù)據(jù)的寫入和自動備份。充分利用Hadoop平臺的優(yōu)勢,對已經(jīng)解析和清洗后的數(shù)據(jù)進行分析、挖掘是下一步的主要研究工作。

[1]IDC最新數(shù)字宇宙研究報告:中國數(shù)據(jù)量增長顯著[EB/OL].2013-03-01.http://www.searchbi.com.cn/showcontent_70996.htm.

[2]BorisLublinsky,KevinTSmith,AlexeyYakubovich.ProfessionalHadoopSolution[M].Wrox,2013:3-4.

[3]TomWbite.Hadoop:TheDefinitiveGuide[M].O’ReillyMedia,2010:497.

[4] 張海,馬建紅.基于HDFS的小文件存儲與讀取優(yōu)化策略[J].計算機系統(tǒng)應(yīng)用,2014,23(5):167-171.

[5] 李鐵,燕彩蓉,黃永鋒,等.面向Hadoop分布式文件系統(tǒng)的小文件存取優(yōu)化方法[J].計算機應(yīng)用,2014,34(11):3091-3095,3099.

[6] 張春明,芮建武,何婷婷.一種Hadoop小文件存儲和讀取的方法[J].計算機應(yīng)用與軟件,2012,29(11):95-100.

[7] 尹穎,林慶,林涵陽.HDFS中高效存儲小文件的方法[J].計算機工程與設(shè)計,2015(2):406-409.

[8] 孔濤,曹丙章,邱荷花.基于MapReduce的視頻爬蟲系統(tǒng)研究[J].華中科技大學(xué)學(xué)報(自然科學(xué)版),2015(5):129-132.

[9] 程錦佳.基于Hadoop的分布式爬蟲及實現(xiàn)[D].北京郵電大學(xué),2010.

[10] 萬濤.基于Hadoop的分布式網(wǎng)絡(luò)爬蟲研究與實現(xiàn)[D].西安電子科技大學(xué),2014.

[11] 王慶紅,李廣凱,周育忠,等.一種基于銀行家算法的網(wǎng)絡(luò)爬蟲資源配置策略[J].智能系統(tǒng)學(xué)報,2015(3):494-498.

[12]PrashantDahiwale,MMRaghuwanshi,LateshMalik.PDDCrawler:Afocusedwebcrawlerusinglinkandcontentanalysisforrelevanceprediction[C]//InternationalConferenceonInformationRetrieval,7-8,Nov,2014.

[13] 于娟,劉強.主題網(wǎng)絡(luò)爬蟲研究綜述[J].計算機工程與科學(xué),2015,37(2):231-237.

[14] 周中華,張惠然,謝江.基于Python的新浪微博數(shù)據(jù)爬蟲[J].計算機應(yīng)用,2014,34(11):3131-3134.

[15] 黃宜華,苗凱翔.深入理解大數(shù)據(jù):大數(shù)據(jù)處理與編程實踐[M].北京:機械工業(yè)出版社,2014:57,65-68.

RESEARCH ON DATA CRAWLING AND STORAGE SYSTEM OF AGRICULTURALPRODUCT PRICE BASED ON HADOOP PLATFORM

Yang Xiaodong1Gao Lutao1Yang Linnan1*Liu Jianyang2

1(CollegeofBasicScienceandInformationEngineering,YunnanAgricultureUniversity,Kunming650201,Yunnan,China)2(YunnanInformationTechnologyDevelopmentCenter,Kunming650228,Yunnan,China)

At present, many large farm product markets and agricultural information commerce platforms release the information of agricultural product prices from different regions in real-time each day. Because of a large number of various fast-updating data, the data crawling and storage as well as the following analysis work come to be difficult. Therefore, we put forward a data crawling and storage system of agricultural product price based on Hadoop. We implement multi-threaded crawling by HttpClient framework combined with thread pool and finish integrity checking. After filtering out the web pages whose information is incomplete, we crawl again until the information comes to be complete. We analyze and clean the crawled web pages by regular expression, and save the useful extracted data in the form of text file into HDFS (Hadoop Distributed File System). The data crawled later is supplemented into HDFS. Experiment shows that the writing performance of HDFS can satisfy the incremental crawling data. The less duplicates are, the bigger the data block is, then the better the writing performance is.

Distributed system Crawler Hadoop HDFS Regular expression

2016-03-12。國家“十二五”科技支撐計劃課題(2014BAD10B03)。楊曉東,碩士生,主研領(lǐng)域:數(shù)據(jù)挖掘。郜魯濤,講師。楊林楠,教授。劉建陽,高級工程師。

TP393

A

10.3969/j.issn.1000-386x.2017.03.013

猜你喜歡
副本爬蟲網(wǎng)頁
利用網(wǎng)絡(luò)爬蟲技術(shù)驗證房地產(chǎn)灰犀牛之說
基于Python的網(wǎng)絡(luò)爬蟲和反爬蟲技術(shù)研究
基于HTML5與CSS3的網(wǎng)頁設(shè)計技術(shù)研究
目前互聯(lián)網(wǎng)中的網(wǎng)絡(luò)爬蟲的原理和影響
使用卷影副本保護數(shù)據(jù)
面向流媒體基于蟻群的副本選擇算法①
基于CSS的網(wǎng)頁導(dǎo)航欄的設(shè)計
基于HTML5靜態(tài)網(wǎng)頁設(shè)計
大數(shù)據(jù)背景下校園輿情的爬蟲應(yīng)用研究
一種基于可用性的動態(tài)云數(shù)據(jù)副本管理機制