Crawl Recovery


정상적인 작동 중에는 Heritrix Frontier가 일지를 계속 남긴다. 이러한 일지는 logs 디렉토리에 보관이 되는데, frontier.recovery.gz 의 이름으로 남는다. 만약 크롤링 도중 crash가 발생한 경우, frontier.recovery.gz 가 crash 상황의 크롤러의 대략적인 상태를 재구성할 수 있게 사용된다. 몇몇 경우에 복구가 시간이 좀 걸릴 수 있지만, 다시 한번 크롤링이 crash된 상황을 기다리는 것보다는 훨씬 빠르게 진행된다.






 이 복구 과정을 사용한다면, 당신은 아예 새로운 crawling을 같은 (또는 변경된) 설정값을 가지고 시작하는 것이지만, 이 새로운 crawling은 frontier-recover.gz 파일을 이용하여 이전 크롤링의 frontier 상태를 시뮬레이션 하여 크롤링 초반부를 크게 우회해 진행할 수 있다. 이전 크롤링에 대한 로그, ARC/WARC파일들, 체크포인트들에 대한 기록은 한쪽으로 따로 기록으로 남길 수 있다.

 .open 확장자로 존재하는 ARC/WARC 파일들은 이전 실행에서 제대로 닫히지 않은 경우이다. 이 때, 망가지거나 중간에 잘려진 데이터를 포함할 수 있는데, 이때 .warc.gz.open 파일에서 .warc.gz 확장자로 이름을 바꾸기 전에 확인해야 할 사항이 있다. 이 파일을 /dev/null로 zcat 명령어를 실행하여 이 gzip의 유효성을 판단하던지 또다른 ARC/WARC 툴로 기록의 완전성을 체크해야한다.

































(세부적인 사항은 생략하였고, 이해를 바탕으로 완역하였음)


Posted by Righ
,

Frontier queue budgets



BdbFrontier는 queue에 각 집중도(attention)를 할당하는 "budgeting" 작업을 한다. 


 이러한 세팅 방법은 queue가 정규화된 텀을 가지고 active 상태에 속해있다 벗어났다 할 수 있도록 로테이팅 할 수 있게 한다. ( active 상태는 queue가 URI를 worker thread에 제공할 수 있는 상태를 말하며, ready/in-process/snoozed 상태로 분류될 수 있다 ) Queue를 언제 비활성화 시킬 것인지에 대한 결정은 현재 queue가 가지고 있는 activity balance가 고갈되었는지 여부에 달려있다. 이 balance는 URI가 더 높은 'cost'를 가질 수록 더 빨리 닳는다. 따라서 상대적으로 더 적은 cost의 URI 들을 가진 queue들이 더 많은 attention을 갖게 되고, 반대로 더 많은 cost를 가진 URI들이 더 적은 attention을 갖게 된다.


비활성화(inactive)된 queue는 FIFO queue의 제일 마지막으로 가게 되는데, 이 queue는 queue들의 queue라고 할 수 있으며 모든 inactive queue들이 이곳에서 대기(pending)한다.  active 상태의 queue가 전부 in-progress 중이거나 snooze 상태로 쉬고 있을 때, worker thread를 놀게 하면 안되므로 이 inactive queue를 다시 활성화 시킨다. 활성화 되면 queue의 activity balance는 다시 충전 되며, queue에 속해 있는 각각의 URI들은 그 balance를 다시 감소 시킨다. balance가 다시 마이너스 상태가 되면 queue는 다른 queue들에게 active될 기회를 넘기며 다시 비활성화 된다. 만약 inactive 상태의 queue가 없다면 비활성화 되자마자 다시 balance가 충전 되며 활성화 된다.


 전체 수명인 'total budget'은 각 queue 당 세팅을 해주어야한다. Queue의 총 지출(queue가 active 되어 있던 모든 상태에서 이루어진 지출)이 이 값을 초과 하면 queue는 은퇴(retired)한다.  즉, 영구적으로 inactive 상태가 된다. 'total budget'을 증가시키는 것과 같은 작업자의 개입만이 queue를 은퇴(retirement)상태에서 재호출 할 수 있다. 하지만 retired상태 동안 queue 는 여전히 대기중인 URI를 포함하며 새로 발견된 URI들도 받기 때문에 작업자가 어떤 URI를 크롤링하는데 더 노력을 기울여야 할지 결정하기에 좋은 상태이다. 


 retired 상태의 queue들이 홀딩하고 있는 URI들은 대기 중인 URI로 세어지지 않기 때문에 모든 active/inactive queue가 비어질 때 크롤링이 끝나 버릴 수 있다. 따라서 retired queue가 있을 경우 'pause-at-finish' 기능을 이용하는 것이 좋은데, 이는 finish state에 도달했을 때 크롤링이 끝나버리는 것이 아니라 일시정지 상태로 대기할 수 있도록 한다. retired queue 이외의 queue들이 모두 비어졌을 때, 크롤링을 끝내지 않고 잠시 멈춤으로써 작업자는 크롤링 진행상태를 살펴보다가 같은 context에 대해 크롤링을 더 진행할 지 아니면 정말로 크롤링을 끝낼 지 결정을 할 수 있다.



https://webarchive.jira.com/wiki/display/Heritrix/Frontier+queue+budgets


(세부적인 사항은 생략하였고, 이해를 바탕으로 완역하였음)

Posted by Righ
,

Log

210.Heritrix/00. Personal Note 2015. 7. 22. 09:44

[참조] https://webarchive.jira.com/wiki/display/Heritrix/Logs


말 그대로 로그... Heritrix는 크롤링의 세부적 내용을 자세히 뜯어 볼 수 있도록 여러 기능들을 가지고 있다. 

로그는 run time 중에도 확인 가능함.


./conf 디렉토리 밑에 logging.properties에서 속성값 설정을 해줄 수 있다.


Log Files

1. alerts.log

: 크롤링할 때 발생한 문제점들에 대한 alert를 기록함


2. crawl.log

: Heritrix가 fetch 하는 각각의 URI마다 log 라인 하나 씩 남김.

(ex)

2011-06-23T17:12:09.591Z 200 15829 http://www.identitytheory.com/etexts/poetics.html L http://www.identitytheory.com/ text/html 
#025 20110623171208546+922 sha1:7AJUMSDTOMT4FN7MBFGGNJU3Z56MLCMW - -

[Timestamp] [Fetch Status Code] [Document Size] [Downloaded URI] [Discovery Path] [Referrer] [Mime Type] [Worker Thread ID] [Fetch Timestamp] [SHA1 Digest] [Source Tag] [Annotations] [warc]


3. progress-statistics.log

StatisticsTracker bean에 의해 쓰여지는 log. 크롤링에 대한 상세 진척 정보들에 대한 로그가 씌여져 있다. 이 정도에 대한 interval은 설정 가능하다.

(ex)

timestamp  discovered     queued   downloaded       doc/s(avg)  KB/s(avg)   dl-failures   busy-thread   mem-use-KB  heap-size-KB   congestion   max-depth   avg-depth

2015-07-17T11:20:15Z           0           0            0           0(NaN)       0(0)             0             0       172576        202428            0          -1           0

2015-07-17T11:20:15Z CRAWL RUNNING - Preparing

2015-07-17T11:20:15Z           1           1            0             0(0)       0(0)             0             0       154028        202428            ??           1           1

2015-07-17T11:20:15Z CRAWL PAUSED - Paused

2015-07-17T11:20:34Z CRAWL RUNNING - Running

2015-07-17T11:20:35Z           1           1            0             0(0)       0(0)             0             0       155266        236364            ??           1           1


4. runtime-errors.log

크롤링 중 예상하지 못한 예외 혹은 에러에 대한 로그. 몇몇은 하드웨어 제한 ( 메모리 부족 등등), 대부분은 소프트웨어 버그 ( Heritrix core에서도 날 수 있지만 대부분은 플러그인 클래스 들이다.)


5. uri-errors.log

URI Fetch 할 때의 에러. 대부분 존재하지 않는 URI 일 때 발생. 


6.frontier.recover.gz

Frontier 이벤트에 대한 설명. crash 이후에 Frontier를 재 설정 할 때 사용될 수 있음.


Posted by Righ
,