數(shù)據(jù)采集方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001 ]本發(fā)明涉及數(shù)據(jù)采集技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)采集方法及系統(tǒng)。
【背景技術(shù)】
[0002]現(xiàn)有開(kāi)源的網(wǎng)絡(luò)爬蟲很多,比如說(shuō)Heri trix,是一個(gè)由java開(kāi)發(fā)的、開(kāi)源的網(wǎng)絡(luò)爬蟲,用戶可以使用它來(lái)從網(wǎng)上抓取想要的資源。但它是單實(shí)例的爬蟲,爬蟲之間不能進(jìn)行合作。由于每個(gè)爬蟲是單獨(dú)進(jìn)行工作的,因此在硬件和系統(tǒng)失敗時(shí),恢復(fù)能力很差。
[0003]另外,Nutch也是開(kāi)源的爬蟲系統(tǒng)、但架構(gòu)過(guò)于復(fù)雜,靈活度不高。不能有效的對(duì)采集進(jìn)行管理和監(jiān)控。
【發(fā)明內(nèi)容】
[0004]針對(duì)現(xiàn)有技術(shù)的缺陷,本發(fā)明提供一種數(shù)據(jù)采集方法及系統(tǒng),實(shí)現(xiàn)了對(duì)爬蟲集群的有效狀態(tài)監(jiān)控和管理、提高了數(shù)據(jù)采集的效率,且具有較強(qiáng)的容錯(cuò)能力。
[0005]第一方面,本發(fā)明提供了一種數(shù)據(jù)采集方法,所述方法包括:
[0006]多個(gè)節(jié)點(diǎn)啟動(dòng)時(shí)自動(dòng)注冊(cè)到zookeeper服務(wù)器上;
[0007]所述zookeeper服務(wù)器從所述多個(gè)節(jié)點(diǎn)中確定主節(jié)點(diǎn)和采集節(jié)點(diǎn);
[0008]所述主節(jié)點(diǎn)獲取采集任務(wù),并將獲取的采集任務(wù)存入集群數(shù)據(jù)庫(kù)中;
[0009]所述主節(jié)點(diǎn)將已存入集群數(shù)據(jù)庫(kù)的采集任務(wù)分配給所述主節(jié)點(diǎn)和/或多個(gè)采集節(jié)點(diǎn),以使所述主節(jié)點(diǎn)和/或各采集節(jié)點(diǎn)讀取所述集群數(shù)據(jù)庫(kù)中相應(yīng)的采集任務(wù);
[0010]當(dāng)某一采集節(jié)點(diǎn)出現(xiàn)故障時(shí),所述主節(jié)點(diǎn)收回該采集節(jié)點(diǎn)的采集任務(wù),并將該采集任務(wù)分配給所述主節(jié)點(diǎn)和/或除該采集節(jié)點(diǎn)以外的其他采集節(jié)點(diǎn)。
[0011]其中,所述主節(jié)點(diǎn)獲取采集任務(wù),并將獲取的采集任務(wù)存入集群數(shù)據(jù)庫(kù)中,包括:
[0012]所述主節(jié)點(diǎn)獲取采集任務(wù),并將獲取的采集任務(wù)按照任務(wù)標(biāo)識(shí)分別存入集群數(shù)據(jù)庫(kù)的各個(gè)數(shù)據(jù)庫(kù)中。
[0013]其中,所述主節(jié)點(diǎn)將已存入集群數(shù)據(jù)庫(kù)的采集任務(wù)分配給所述主節(jié)點(diǎn)和/或多個(gè)采集節(jié)點(diǎn),以使所述主節(jié)點(diǎn)和/或各采集節(jié)點(diǎn)讀取所述集群數(shù)據(jù)庫(kù)中相應(yīng)的采集任務(wù),包括:
[0014]所述主節(jié)點(diǎn)將已存入集群數(shù)據(jù)庫(kù)中的采集任務(wù)按照任務(wù)標(biāo)識(shí)分配給主節(jié)點(diǎn)和/或多個(gè)采集節(jié)點(diǎn),并將分配結(jié)果記錄在zookeeper服務(wù)器中,以使主節(jié)點(diǎn)和/或各采集節(jié)點(diǎn)通過(guò)zookeeper服務(wù)器獲取對(duì)應(yīng)各自節(jié)點(diǎn)的任務(wù)標(biāo)識(shí),并根據(jù)任務(wù)標(biāo)識(shí)讀取所述集群數(shù)據(jù)庫(kù)的相應(yīng)數(shù)據(jù)庫(kù)中的采集任務(wù)。
[0015]其中,所述方法還包括:
[0016]當(dāng)某一采集節(jié)點(diǎn)出現(xiàn)故障,所述主節(jié)點(diǎn)向管理中心發(fā)送關(guān)于該采集節(jié)點(diǎn)發(fā)生故障的報(bào)警信息。
[0017]其中,所述方法還包括:
[0018]所述zookeeper服務(wù)器從多個(gè)節(jié)點(diǎn)中確定從節(jié)點(diǎn),所述從節(jié)點(diǎn)用于在所述主節(jié)點(diǎn)出現(xiàn)故障后,接替所述主節(jié)點(diǎn)的工作。
[0019]其中,所述方法還包括:
[0020]所述從節(jié)點(diǎn)向管理中心發(fā)送關(guān)于主節(jié)點(diǎn)發(fā)生故障的報(bào)警信息。
[0021]其中,所述zookeeper服務(wù)器將第一個(gè)注冊(cè)到zookeeper服務(wù)器的節(jié)點(diǎn)確定為主節(jié)點(diǎn);將第二個(gè)注冊(cè)到zookeeper服務(wù)器的節(jié)點(diǎn)確定為從節(jié)點(diǎn);將第N個(gè)注冊(cè)到zookeeper服務(wù)器的節(jié)點(diǎn)確定為采集節(jié)點(diǎn),N>2,N為正整數(shù)。
[0022]第二方面,本發(fā)明還提供了一種數(shù)據(jù)采集系統(tǒng),包括zookeeper服務(wù)器、集群數(shù)據(jù)庫(kù)和多個(gè)節(jié)點(diǎn);所述多個(gè)節(jié)點(diǎn)在啟動(dòng)時(shí)自動(dòng)注冊(cè)到所述zookeeper服務(wù)器上;
[0023]所述zookeeper服務(wù)器,用于從所述多個(gè)節(jié)點(diǎn)中確定主節(jié)點(diǎn)和采集節(jié)點(diǎn);
[0024]所述主節(jié)點(diǎn),用于獲取采集任務(wù),并將獲取的采集任務(wù)存入所述集群數(shù)據(jù)庫(kù)中;
[0025]所述主節(jié)點(diǎn),還用于將已存入集群數(shù)據(jù)庫(kù)的采集任務(wù)分配給所述主節(jié)點(diǎn)和/或多個(gè)采集節(jié)點(diǎn),以使所述主節(jié)點(diǎn)和/或各采集節(jié)點(diǎn)到所述集群數(shù)據(jù)庫(kù)中執(zhí)行相應(yīng)的采集任務(wù);
[0026]所述主節(jié)點(diǎn),還用于在某一采集節(jié)點(diǎn)出現(xiàn)故障時(shí),收回該采集節(jié)點(diǎn)的采集任務(wù),并將該采集任務(wù)分配給所述主節(jié)點(diǎn)和/或除該采集節(jié)點(diǎn)以外的其他采集節(jié)點(diǎn)。
[0027]其中,所述主節(jié)點(diǎn)具體用于:獲取采集任務(wù),并將獲取的采集任務(wù)按照任務(wù)標(biāo)識(shí)分別存入集群數(shù)據(jù)庫(kù)的各個(gè)數(shù)據(jù)庫(kù)中。
[0028]其中,所述主節(jié)點(diǎn)還具體用于:將已存入集群數(shù)據(jù)庫(kù)中的采集任務(wù)按照任務(wù)標(biāo)識(shí)分配給主節(jié)點(diǎn)和/或多個(gè)采集節(jié)點(diǎn),并將分配結(jié)果記錄在zookeeper服務(wù)器中;
[0029]所述主節(jié)點(diǎn)還具體用于:向所述zookeeper服務(wù)器發(fā)送請(qǐng)求信號(hào),以請(qǐng)求獲取與所述主節(jié)點(diǎn)對(duì)應(yīng)的任務(wù)標(biāo)識(shí),并根據(jù)獲取的任務(wù)標(biāo)識(shí)讀取所述集群數(shù)據(jù)庫(kù)的相應(yīng)數(shù)據(jù)庫(kù)中的采集任務(wù);
[0030]和/或,
[0031]所述采集節(jié)點(diǎn)具體用于:向所述zookeeper服務(wù)器發(fā)送請(qǐng)求信號(hào),以請(qǐng)求獲取與所述采集節(jié)點(diǎn)對(duì)應(yīng)的任務(wù)標(biāo)識(shí),并根據(jù)獲取的任務(wù)標(biāo)識(shí)讀取所述集群數(shù)據(jù)庫(kù)的相應(yīng)數(shù)據(jù)庫(kù)中的米集任務(wù)。
[0032]由上述技術(shù)方案可知,本發(fā)明提供的數(shù)據(jù)采集方法,采用集群方式由zookeeper月艮務(wù)器協(xié)同管理和分配任務(wù)、實(shí)現(xiàn)了對(duì)爬蟲集群的有效狀態(tài)監(jiān)控和管理、實(shí)現(xiàn)了爬蟲集群的科學(xué)調(diào)度、增強(qiáng)了數(shù)據(jù)采集的靈活性、提高了數(shù)據(jù)采集的效率。且本發(fā)明所述的數(shù)據(jù)采集方法具有較強(qiáng)的容錯(cuò)機(jī)制。
【附圖說(shuō)明】
[0033]為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些圖獲得其他的附圖。
[0034]圖1是本發(fā)明第一個(gè)實(shí)施例提供的數(shù)據(jù)采集方法的流程圖;
[0035]圖2是本發(fā)明提供的數(shù)據(jù)采集方法的工作原理示意圖;
[0036]圖3是本發(fā)明第二個(gè)實(shí)施例提供的數(shù)據(jù)采集系統(tǒng)的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0037]下面將結(jié)合本公開(kāi)實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0038]圖1示出了本發(fā)明第一個(gè)實(shí)施例提供的數(shù)據(jù)采集方法的流程圖。如圖1所示,本實(shí)施例提供的數(shù)據(jù)采集方法包括如下步驟:
[0039]步驟101:多個(gè)節(jié)點(diǎn)啟動(dòng)時(shí)自動(dòng)注冊(cè)到zookeeper服務(wù)器上。
[0040]在本步驟中,所述多個(gè)節(jié)點(diǎn)上均部署有采集應(yīng)用,所述多個(gè)節(jié)點(diǎn)在啟動(dòng)的時(shí)候自動(dòng)注冊(cè)到zookeeper服務(wù)器中。本實(shí)施例所述的節(jié)點(diǎn)可以為部署有采集應(yīng)用的計(jì)算機(jī)。
[0041 ] 步驟102:所述zookeeper服務(wù)器從所述多個(gè)節(jié)點(diǎn)中確定主節(jié)點(diǎn)和采集節(jié)點(diǎn)。
[0042]在本步驟中,所述zookeeper服務(wù)器從多個(gè)節(jié)點(diǎn)中確定主節(jié)點(diǎn)和采集節(jié)點(diǎn),例如zookeeper服務(wù)器可以根據(jù)節(jié)點(diǎn)注冊(cè)到zookeeper服務(wù)器的先后順序自動(dòng)確定主節(jié)點(diǎn)和采集節(jié)點(diǎn)。
[0043]步驟103:所述主節(jié)點(diǎn)獲取采集任務(wù),并將獲取的采集任務(wù)存入集群數(shù)據(jù)庫(kù)中。
[0044]在本步驟中,優(yōu)選地,所述主節(jié)點(diǎn)獲取采集任務(wù),并將獲取的采集任務(wù)存入集群數(shù)據(jù)庫(kù)中,包括:
[0045]所述主節(jié)點(diǎn)獲取采集任務(wù),并將獲取的采集任務(wù)按照任務(wù)標(biāo)識(shí)分別存入集群數(shù)據(jù)庫(kù)的各個(gè)數(shù)據(jù)庫(kù)中。
[0046]在本步驟中,假設(shè)所述集群數(shù)據(jù)庫(kù)為redis,則主節(jié)點(diǎn)負(fù)責(zé)讀取任務(wù)庫(kù)進(jìn)行種子初始化并根據(jù)task id作為一個(gè)隊(duì)列key存入redis集群。這樣處理有兩個(gè)優(yōu)勢(shì):①存入redis集群按照任務(wù)劃分可以在集群中分布的均勻,不至于采集任務(wù)集中到一臺(tái)機(jī)器造成壓力;②可以按照任務(wù)劃分并將任務(wù)指定給采集節(jié)點(diǎn),保證節(jié)點(diǎn)任務(wù)獨(dú)立。
[0047]步驟104:所述主節(jié)點(diǎn)將已存入集群數(shù)據(jù)庫(kù)的采集任務(wù)分配給所述主節(jié)點(diǎn)和/或多個(gè)采集節(jié)點(diǎn),以使所述主節(jié)點(diǎn)和/或各采集節(jié)點(diǎn)讀取所述集群數(shù)據(jù)庫(kù)中相應(yīng)的采集任務(wù);當(dāng)某一采集節(jié)點(diǎn)出現(xiàn)故障時(shí),所述主節(jié)點(diǎn)收回該采集節(jié)點(diǎn)的采集任務(wù),并將該采集任務(wù)分配給所述主節(jié)點(diǎn)和/或除該采集節(jié)點(diǎn)以外的其他采集節(jié)點(diǎn)。
[0048]在本步驟中,優(yōu)選地,所述主節(jié)點(diǎn)將已存入集群數(shù)據(jù)庫(kù)的采集任務(wù)分配給所述主節(jié)點(diǎn)和/或多個(gè)采集節(jié)點(diǎn),以使所述主節(jié)點(diǎn)和/或各采集節(jié)點(diǎn)讀取所述集群數(shù)據(jù)庫(kù)中相應(yīng)的米集任務(wù),包括:
[0049]所述主節(jié)點(diǎn)將已存入集群數(shù)據(jù)庫(kù)中的采集任務(wù)按照任務(wù)標(biāo)識(shí)分配給主節(jié)點(diǎn)和/或多個(gè)采集節(jié)點(diǎn),并將分配結(jié)果記錄在zookeeper服務(wù)器中,以使主節(jié)點(diǎn)和/或各采集節(jié)點(diǎn)通過(guò)zookeeper服務(wù)器獲取對(duì)應(yīng)各自節(jié)點(diǎn)的任務(wù)標(biāo)識(shí),并根據(jù)任務(wù)標(biāo)識(shí)讀取所述集群數(shù)據(jù)庫(kù)的相應(yīng)數(shù)據(jù)庫(kù)中的采集任務(wù)。
[0050]從上面描述可知,主節(jié)點(diǎn)另外一個(gè)重要的任務(wù)就是將已經(jīng)存入reids中的task均分指定到采集節(jié)點(diǎn)中,并記錄到zookeeper中的status文件中。這樣采集節(jié)點(diǎn)就可以直接讀取zookeeper中分配給自己的tasks去redis中獲取待采集任務(wù)。
[°°51 ] 具體地,zookeeper保存的數(shù)據(jù)結(jié)構(gòu)如下,其中tasks保存分配給自己的task id的json數(shù)據(jù),其中spiderl、spider2、‘"、spiderN表示主節(jié)點(diǎn)和/或采集節(jié)點(diǎn)。
[0052]/spider/spiderl/tasks
[0053]/spider2/tasks
[0054]/spider3/tasks
[0055]/spiderN/tasks
[0056]/status.properties
[0057]圖2示出了本實(shí)施例所述的數(shù)據(jù)采集方法的工作原理圖,參見(jiàn)圖2,主節(jié)點(diǎn)(即圖2中的采集主)從采集任務(wù)庫(kù)DB中獲取采集任務(wù),然后將獲取的采集任務(wù)按照任務(wù)ID存入到集群數(shù)據(jù)庫(kù)的各個(gè)數(shù)據(jù)庫(kù)中,如圖2中Redis的6個(gè)數(shù)據(jù)庫(kù)中,然后主節(jié)點(diǎn)將已存入集群數(shù)據(jù)庫(kù)的采集任務(wù)分配給所述自身、從節(jié)點(diǎn)(即圖中的采集從)以及多個(gè)采集節(jié)點(diǎn)(即圖中的采集),并將任務(wù)分配情況記錄到zookeeper服務(wù)器中,例如任務(wù)1、任務(wù)2分別存放在數(shù)據(jù)庫(kù)1和數(shù)據(jù)庫(kù)2中,且任務(wù)1、任務(wù)2分配給主節(jié)點(diǎn)。又如,任務(wù)3、任務(wù)4分別存放在數(shù)據(jù)庫(kù)3和數(shù)據(jù)庫(kù)4中,且任務(wù)3、任務(wù)4分配給從節(jié)點(diǎn);任務(wù)5存放在數(shù)據(jù)庫(kù)5中,且任務(wù)5分配給采集節(jié)點(diǎn)3;任務(wù)6存放在數(shù)據(jù)庫(kù)6中,且任務(wù)6分配給采集節(jié)點(diǎn)N。這樣,主節(jié)點(diǎn)、從節(jié)點(diǎn)和各采集節(jié)點(diǎn)就可以通過(guò)zookee