태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

Nutch Crawler, briefly

Tech 2007.10.31 22:21

Nutch의 크롤링은 대강 Inject(Generate Fetch Update)+Invertlinks 와 같은 과정을 거친다. hadoop이 감지되면 hdfs 위에서 작업, hadoop이 보이지 않으면 그냥 로컬 파일시스템에서 작업.



Inject: 준비된 URL리스트를 <key:url, value:CrawlDatum> pair 로 변환하여 저장 - crawldb. CrawlDatum에는 fetchtime, score 등이 들어간다.

Generate: 만들어진 crawldb를 가지고 segment구성. segment는 긁어온 녀석들이 저장될 창고 같은거라고 보면 된다. CrawlDatum.score 를 기준으로 정렬되어 점수 높은 녀석들 먼저 가져오게 된다. <key:sortValue, value:entry> pair를 내보냄.
    entry는 datum(CrawlDatum), url 등을 가지고 있다.
    partitioning(for politeness)
    sorting(OPIC의 일종?)
    등이 일어남.

Fetch: 준비된 Segment에 실제로 데이터를 채워넣는다.

Update: Fetch에서 가져온 내용에서 links 를 모아 crawldb 를 업데이트.

Generate-Fetch-Update 를 거칠수록 crawldb 가 쌓이게 되니 당연히 더 많은 범위에 대해 작업함. 대략 추정해보면 평균적으로 문서 하나가 m 개의 링크를 가지고 있다고 하고, 이 사이클을 n 번 돈다고 하면 최초 url리스트 a개에서 시작했을때 a X m ^ n 개의 문서에 접근 (물론 졸라 rough하다) - 실제로 모든 제한을 풀고(robots.txt무시, url filtering 없음) 초기 url 1000개로 시작했더니 (Xeon Quad, 4GB Ram, 250GB HDD 머신 5대에서 3일) 5번째 iteration이 도저히 끝나지 않을 것 같아 죽였음.

Invertlinks: linkdb 생성. <key: from, values:to> 로부터 <key: to, value: from> 을 만들어낸다. 어떤 URL의 backlink는 페이지(사이트)의 중요도 계산에 잘 쓰인다지? Map-Reduce로 하는 작업의 기본중의 기본으로 아주 간단하다. (덜덜)
    mapper: <from, to> 를 뒤집어서 <to, from> 으로 내보낸다.
    reducer: <to, from> 에서 to라는 키로 from들을 더하여 묶는다. <to, from_list> 가 나오겠지.

이후의 작업은 indexer에게 넘김.


'Tech' 카테고리의 다른 글

Fibo2 ...  (3) 2007.11.05
Fib(n) = Fib(n-1) + Fib(n-2), Fib(1) = Fib(2) = 1  (4) 2007.11.02
Nutch Crawler, briefly  (1) 2007.10.31
String matching  (3) 2007.10.31
SSH Key distribution  (2) 2007.10.24
C++: stringstream  (2) 2007.10.23
Trackbacks 0 : Comments 1