一種云計(jì)算中自動(dòng)監(jiān)控分布式網(wǎng)絡(luò)爬蟲(chóng)的方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種云計(jì)算中自動(dòng)監(jiān)控分布式網(wǎng)絡(luò)爬蟲(chóng)的方法,屬于一種云計(jì)算技術(shù),一種云計(jì)算中自動(dòng)監(jiān)控分布式網(wǎng)絡(luò)爬蟲(chóng)的方法,通過(guò)腳本和輪詢實(shí)現(xiàn)實(shí)時(shí)監(jiān)控nutch任務(wù),執(zhí)行并自動(dòng)啟動(dòng)下一步操作;由兩個(gè)腳本實(shí)現(xiàn),腳本Ⅰ是循環(huán)執(zhí)行多個(gè)抓取周期,每個(gè)周期中順序執(zhí)行每一步任務(wù),并將執(zhí)行情況寫(xiě)入日志;腳本Ⅱ是使用crond實(shí)時(shí)監(jiān)控任務(wù)是否在執(zhí)行,如果終止,檢查上一步執(zhí)行情況,將中斷信息發(fā)送郵件給運(yùn)維人員,并自動(dòng)啟動(dòng)下一步任務(wù)繼續(xù)執(zhí)行。本發(fā)明通過(guò)腳本和輪詢實(shí)現(xiàn)實(shí)時(shí)監(jiān)控nutch任務(wù)執(zhí)行,并自動(dòng)啟動(dòng)下一步操作;數(shù)據(jù)抓取時(shí)間,使用方便。
【專(zhuān)利說(shuō)明】—種云計(jì)算中自動(dòng)監(jiān)控分布式網(wǎng)絡(luò)爬蟲(chóng)的方法
[0001]
【技術(shù)領(lǐng)域】
[0002] 本發(fā)明涉及一種云計(jì)算技術(shù),具體地說(shuō)是一種云計(jì)算中自動(dòng)監(jiān)控分布式網(wǎng)絡(luò)爬蟲(chóng)的方法。
【背景技術(shù)】
[0003]云計(jì)算(cloud computing)是基于互聯(lián)網(wǎng)的相關(guān)服務(wù)的增加、使用和交付模式,通常涉及通過(guò)互聯(lián)網(wǎng)來(lái)提供動(dòng)態(tài)易擴(kuò)展且經(jīng)常是虛擬化的資源。云是網(wǎng)絡(luò)、互聯(lián)網(wǎng)的一種比喻說(shuō)法。云計(jì)算是通過(guò)網(wǎng)絡(luò)提供可伸縮的廉價(jià)的分布式計(jì)算能力。
[0004]云計(jì)算為物聯(lián)網(wǎng)所產(chǎn)生的海量數(shù)據(jù)提供了很好的存儲(chǔ)空間,并使得實(shí)時(shí)在線處理成為可能。云計(jì)算是實(shí)現(xiàn)物聯(lián)網(wǎng)的核心,運(yùn)用云計(jì)算模式使得物聯(lián)網(wǎng)中各類(lèi)物品的實(shí)時(shí)動(dòng)態(tài)管理和智能分析變得可能。云計(jì)算為物聯(lián)網(wǎng)提供了可用、便捷、按需的網(wǎng)絡(luò)訪問(wèn),如果沒(méi)有這個(gè)工具,物聯(lián)網(wǎng)產(chǎn)生的海量信息無(wú)法傳輸、處理和應(yīng)用。
[0005]hadoop是云計(jì)算技術(shù)的重要組成部分,它是目前云計(jì)算、大數(shù)據(jù)解決方案中最為流行和最為穩(wěn)定的工具,是一個(gè)能夠?qū)Υ罅繑?shù)據(jù)進(jìn)行分布式處理的軟件框架。Nutch是與Hadoop結(jié)合最好的分布式網(wǎng)絡(luò)爬蟲(chóng)軟件,所謂網(wǎng)絡(luò)爬蟲(chóng)是一個(gè)自動(dòng)提取網(wǎng)頁(yè)的程序,它是搜索引擎的重要組成。Nutch是一個(gè)由Java實(shí)現(xiàn)的,剛剛誕生開(kāi)放源代碼(open-source)的web搜索引擎。Nutch主要分為兩個(gè)部分:爬蟲(chóng)crawler和查詢searcher, Crawler主要用于從網(wǎng)絡(luò)上抓取網(wǎng)頁(yè)并為這些網(wǎng)頁(yè)建立索引,Searcher主要利用這些索引檢索用戶的查找關(guān)鍵詞來(lái)產(chǎn)生查找結(jié)果。兩者之間的接口是索引,所以除去索引部分,兩者之間的耦合度很低。Nutch的一步式抓取命令Crawler在執(zhí)行時(shí),經(jīng)常中斷。而按Nutch —個(gè)抓取周期的分步任務(wù)順序generate、fetch、parse、updatedb單步執(zhí)行則不會(huì)產(chǎn)生這個(gè)問(wèn)題。但是分單步抓取需要實(shí)時(shí)關(guān)注任務(wù)的狀態(tài),在上一任務(wù)結(jié)束時(shí)手動(dòng)啟動(dòng)下一任務(wù)。這種方式過(guò)于占用人力,而且在很容易出現(xiàn)一段時(shí)間任務(wù)停止而沒(méi)被發(fā)現(xiàn),從而浪費(fèi)數(shù)據(jù)抓取時(shí)間。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的技術(shù)任務(wù)是提供一種通過(guò)腳本和輪詢實(shí)現(xiàn)實(shí)時(shí)監(jiān)控nutch任務(wù)執(zhí)行,并自動(dòng)啟動(dòng)下一步操作的一種云計(jì)算中自動(dòng)監(jiān)控分布式網(wǎng)絡(luò)爬蟲(chóng)的方法。
[0007]本發(fā)明的技術(shù)任務(wù)是按以下方式實(shí)現(xiàn)的,一種云計(jì)算中自動(dòng)監(jiān)控分布式網(wǎng)絡(luò)爬蟲(chóng)的方法,通過(guò)腳本和輪詢實(shí)現(xiàn)實(shí)時(shí)監(jiān)控nutch任務(wù),執(zhí)行并自動(dòng)啟動(dòng)下一步操作;由兩個(gè)腳本實(shí)現(xiàn),腳本I是循環(huán)執(zhí)行多個(gè)抓取周期,每個(gè)周期中順序執(zhí)行每一步任務(wù),并將執(zhí)行情況寫(xiě)入日志;腳本II是使用crond實(shí)時(shí)監(jiān)控任務(wù)是否在執(zhí)行,如果終止,檢查上一步執(zhí)行情況,將中斷信息發(fā)送郵件給運(yùn)維人員,并自動(dòng)啟動(dòng)下一步任務(wù)繼續(xù)執(zhí)行,具體流程為:
(1)、開(kāi)始,每分鐘執(zhí)行一次獲取是否有正在執(zhí)行的nutch任務(wù);
(2)、如果沒(méi)有執(zhí)行nutch任務(wù),將相關(guān)信息發(fā)送郵件給運(yùn)維人員;(3)、從日志runapps.log中獲取已經(jīng)運(yùn)行的周期數(shù);
(4)、若已經(jīng)運(yùn)行的周期數(shù)沒(méi)有執(zhí)行完指定循環(huán)數(shù),從日志runapps.log中獲取當(dāng)前未結(jié)束的批次batchid,從日志runapps.log中獲取上一步任務(wù)名稱;
(5)、若上一步任務(wù)名稱為generate,則nutch獲取,并將任務(wù)內(nèi)容和結(jié)束時(shí)間寫(xiě)入日志runapps.log ;若上一步任務(wù)名稱為fetch,則nutch解析,并將任務(wù)內(nèi)容和結(jié)束時(shí)間寫(xiě)入日志runapps.log ;若上一步任務(wù)名稱為parse,貝Unutch更新,并將任務(wù)內(nèi)容和結(jié)束時(shí)間寫(xiě)入日志runapps.log ;若上一步任務(wù)名稱為updatedb,則nutch啟動(dòng)下一步任務(wù)繼續(xù)執(zhí)行。
[0008]腳本I的偽代碼如下,crawl, sh:
【權(quán)利要求】
1.一種云計(jì)算中自動(dòng)監(jiān)控分布式網(wǎng)絡(luò)爬蟲(chóng)的方法,其特征在于通過(guò)腳本和輪詢實(shí)現(xiàn)實(shí)時(shí)監(jiān)控nutch任務(wù),執(zhí)行并自動(dòng)啟動(dòng)下一步操作;由兩個(gè)腳本實(shí)現(xiàn),腳本I是循環(huán)執(zhí)行多個(gè)抓取周期,每個(gè)周期中順序執(zhí)行每一步任務(wù),并將執(zhí)行情況寫(xiě)入日志;腳本II是使用crond實(shí)時(shí)監(jiān)控任務(wù)是否在執(zhí)行,如果終止,檢查上一步執(zhí)行情況,將中斷信息發(fā)送郵件給運(yùn)維人員,并自動(dòng)啟動(dòng)下一步任務(wù)繼續(xù)執(zhí)行,具體流程為: (1)、開(kāi)始,每分鐘執(zhí)行一次獲取是否有正在執(zhí)行的nutch任務(wù); (2)、如果沒(méi)有執(zhí)行nutch任務(wù),將相關(guān)信息發(fā)送郵件給運(yùn)維人員; (3)、從日志runapps.log中獲取已經(jīng)運(yùn)行的周期數(shù); (4)、若已經(jīng)運(yùn)行的周期數(shù)沒(méi)有執(zhí)行完指定循環(huán)數(shù),從日志runapps.log中獲取當(dāng)前未結(jié)束的批次batchid,從日志runapps.log中獲取上一步任務(wù)名稱; (5)、若上一步任務(wù)名稱為generate,則nutch獲取,并將任務(wù)內(nèi)容和結(jié)束時(shí)間寫(xiě)入日志runapps.log ;若上一步任務(wù)名稱為fetch,則nutch解析,并將任務(wù)內(nèi)容和結(jié)束時(shí)間寫(xiě)入日志runapps.log ;若上一步任務(wù)名稱為parse,則nutch更新,并將任務(wù)內(nèi)容和結(jié)束時(shí)間寫(xiě)入日志runapps.log ;若上一步任務(wù)名稱為updatedb,則nutch啟動(dòng)下一步任務(wù)繼續(xù)執(zhí)行。
2.根據(jù)權(quán)利要求1所述的一種云計(jì)算中自動(dòng)監(jiān)控分布式網(wǎng)絡(luò)爬蟲(chóng)的方法,其特征在于腳本I的偽代碼如下,crawl, sh:
for ((i=$l;i<$2;i++))
do
將時(shí)間和i寫(xiě)入日志runapps.log
nutch generate —topN 2
任務(wù)內(nèi)容和結(jié)束時(shí)間寫(xiě)入日志runapps.log
獲取generate生成的batchid
將 batchid 寫(xiě)入日志 runapps.log
nutch fetch $batchid -threads 2
任務(wù)內(nèi)容和結(jié)束時(shí)間寫(xiě)入日志runapps.log
nutch parse $batchid
任務(wù)內(nèi)容和結(jié)束時(shí)間寫(xiě)入日志runapps.log
nutch updatedb
任務(wù)內(nèi)容和結(jié)束時(shí)間寫(xiě)入日志runapps.log
Done0
3.根據(jù)權(quán)利要求1所述的一種云計(jì)算中自動(dòng)監(jiān)控分布式網(wǎng)絡(luò)爬蟲(chóng)的方法,其特征在于腳本II的偽代碼如下,poll.Sh:1srunning=獲取是否有正在執(zhí)行的nutch任務(wù) if [ Sisrunning=沒(méi)有]
將相關(guān)信息發(fā)送郵件給運(yùn)維人員
depth=從runapps.log中獲取已經(jīng)運(yùn)行的周期數(shù)
if [ $depth沒(méi)有執(zhí)行完指定循環(huán)數(shù)N ]
then
batchid=從runapps.log中獲取當(dāng)前未結(jié)束的batchid
【文檔編號(hào)】H04L12/26GK103997438SQ201410241378
【公開(kāi)日】2014年8月20日 申請(qǐng)日期:2014年6月3日 優(yōu)先權(quán)日:2014年6月3日
【發(fā)明者】范瑩, 于治樓, 梁華勇 申請(qǐng)人:浪潮集團(tuán)有限公司