2017-01-04 21 views
0

StormCrawler를 라이브 크롤링에 사용하고 있습니다. ElasticSearch에 도메인을 삽입하고 크롤러가 제대로 크롤링 중이므로 각 도메인에 대해 개의 URls를 정의했습니다 (SimpleFetcherBolt의 Redis 사용).ElasticSearch를 사용하여 StormCrawler에 삽입 된 새 도메인/URL의 병렬 처리

시나리오 : 도메인을 삽입하면 StormCrawler가 크롤링을 시작합니다. 이제 ElasticSeeds에 새 도메인을 입력하면 StormCrawler가 즉시 가져 오지 않습니다.

이전 도메인의 페이지를 가져 오는 중 사용량이 많습니다. 한도가 높으면 (예 : 1000 개의 URL) 새로 삽입 된 도메인에서 크롤링을 시작하는 데 적어도 최소한 20 분이 걸립니다.

결과가 즉시 나타나기를 원합니다. 새 도메인에서 우선 순위를 설정할 수 있습니까? 또는 StormCrawler가 새 도메인에서 크롤링을 시작합니다. 새 도메인이 삽입 될 때마다? 각 도메인에 대한 다른 대기열 (DB)?

제안 사항에 감사드립니다.

답변

1

나는 (SimpleFetcherBolt에서 레디 스 사용) 각 도메인

당신은 당신이 무슨 뜻인지 설명해주십시오 수의 URL을 크롤링의 한계를 정의? Fetcher 볼트를 수정할 필요가 없습니다. 이것이 URL 필터의 용도입니다.

어떤 종류의 주둥이를 사용하고 있습니까? 집계 스푸핑? 얼마나 많은 SimpleFetcherBolt 인스턴스를 사용하고 있습니까?

SC는 새 도메인에서 크롤링을 시작해야합니다. 로그 수준을 적절하게 설정하고 로그를 검사하여 스파우트가 새 도메인에 대한 튜플을 생성했는지 여부와 URL이 더 이상 차단되었는지 여부를 확인하십시오.

EDIT : SimpleFetcherBolt 인스턴스를 두 개 이상 지정하거나 대신 FetcherBolt를 사용하십시오. SFB의 단일 인스턴스를 사용하면 URL이 대기열에 고정되어 FetcherBolt가 병렬로 처리합니다.

한계로 말하면 SC는 한 도메인의 제한된 URL 만 가져옵니다. SC는 각 도메인

100 개 URL을 가져옵니다, 한도가 100라고 아마 별도의 URL 필터로, 이것은 가져 오기 클래스를 해킹보다 훨씬 청소기 될 것이라고 할, 또한보다 효율적으로해야한다.

SC 내가 SC 만 그것은 가져 오는 중지하는 것이 후 한 도메인의 제한 URL을 가져 오는 의미를 잘

아니, 제한함으로써 ESCrawlTopology

+0

를 참조 기본적으로 Agg.Spout을 사용합니다. 한계가 100이라고하면 SC는 각 도메인의 100 개의 URL을 가져옵니다. 나는 ElasticSearchSpout을 사용하고 SImpleFetcherBolt의 단일 인스턴스를 실행하고 있습니다 (SC는 기본적으로 Agg.Spout을 사용합니다). 로그를 확인한 결과 SC에서 새 도메인을 가져 오는 것처럼 보였습니다 (SimpleFetcherBolt). 이미 대기열 URL에있는 HTML 콘텐츠를 가져 오는 것을 완료했습니다. – superB

+0

주셔서 감사합니다. 나는 FetcherBolt와 AggregateSpout을 사용하고 있습니다. 이것은 매우 빠르며 동시에 병렬로 실행됩니다. 빠른 질문 SamplerAggregationSpout과 AggregationSpout의 차이점은 무엇입니까?URL 필터에서 각 도메인의 크롤링을 제한하려면 어떻게해야합니까? – superB

+1

SamplerAggregationSpout은 대규모 크롤링에 유용하며 집계 전에 결과 샘플을 가져옵니다. 더 빠르지 만 nextFetchDate를 늘려서 우선 순위를 지정하지 않습니다. > URL 필터에서 각 도메인의 크롤링을 어떻게 제한합니까? 주어진 도메인에 대한 URL 수를 ES에 쿼리하거나 이미 수행 한 방식으로 Redis를 사용하는 맞춤 URL 필터를 작성할 수 있습니다. –