Escolar Documentos
Profissional Documentos
Cultura Documentos
Trabalho apresentado na
1 Introdução 3
3 O Nutch 16
3.1 Arquitetura do Nutch . . . . . . . . . . . . . . . . . . . . . . . 17
3.1.1 Banco de dados . . . . . . . . . . . . . . . . . . . . . . 19
3.1.2 Aranha . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2 Alterações realizadas . . . . . . . . . . . . . . . . . . . . . . . 23
3.3 Testes realizados com o Nutch . . . . . . . . . . . . . . . . . . 24
3.3.1 Testes realizados na máquina ]1 . . . . . . . . . . . . . 24
1
3.3.2 Testes realizados na máquina ]2 . . . . . . . . . . . . . 25
3.3.3 Testes realizados na máquina ]3 . . . . . . . . . . . . . 27
6 Conclusão 45
2
Capı́tulo 1
Introdução
3
partes distintas: o aranha (spider/crawler) que acessa e percorre os sites
seguindo os links encontrados nas páginas, o indexador (indexer) que processa
as páginas obtidas pelo aranha, o banco de dados (database) que armazena as
páginas processadas pelo indexador e a interface de pesquisa (result engine)
que estabelece o canal de comunicação entre o usuário e o motor de busca.
Este trabalho tem como objetivo oferecer uma nova alternativa para im-
plementação do aranha. Dado que o funcionamento do aranha é bastante
custoso pois necessita percorrer página por página na web, a nova alternativa,
chamada Crab, propõe que o aranha seja distribuı́do pela web e permaneça
localizado junto aos servidores web, tirando proveito do acesso a disco e pro-
cessamento local e eliminando assim o alto custo dos aranhas tradicionais.
O Crab não percorre links. Sua tarefa é analisar e compactar toda a base do
servidor web e aguardar para transferi-la quando o for solicitado.
O restante do trabalho está organizado da seguinte maneira: o capı́tulo 2
faz uma breve introdução a arquitetura dos motores de busca web, o capı́tulo
3 apresenta o Nutch [13], um motor de busca web open source, o capı́tulo
4 apresenta o Crab, o capı́tulo 5 apresenta testes e comparações realizados
entre o Crab e o aranha do Nutch e finalmente o capı́tulo 6 conclui este
trabalho.
4
Capı́tulo 2
5
2.1 Aranha
6
Figura 2.1: Representação do funcionamento do aranha
7
web pelo método POST [5]. São chamadas de páginas dinâmicas e escritas
em linguagens de programação como: PHP, Java, ASP, etc. Torna-se então
necessário alguns aranhas especializados para acessar e processar tais páginas
web, visto que os aranhas comuns não são hábeis para essa tarefa pois pode
não haver links apontando para elas.
2.2 Indexador
8
e isso é feito para todas as URLs encontradas (linha 1). As linhas 3 a 7
verificam se o termo em questão pertence a lista de termos distintos, se
sim, então não há a necessidade de adiciona-lo novamente na lista, portanto
adiciona-se somente a URL na lista de URLs do termo. Caso contrário é
necessário criar um novo campo nas respectivas listas para adicionar o novo
termo e a nova URL.
9
termos / lista de
urls
index X Y
search W Z K
engine W Z
inverted X Y Z
10
2.4 Interface de pesquisa
11
de imagens, notı́cias e blogs. As SERPs para estas buscas especializadas
oferecem resultados especı́ficos.
A interface de pesquisa também pode ser responsável pelo ranqueamento
das páginas. Ela determina as melhoras páginas que “casam”com a busca
feita pelo usuário e em que ordem elas devem ser listadas. Isto será realizado
de acordo com o algoritmo de ranqueamento que o motor de busca utiliza.
12
O PageRank também considera que quanto mais alto for a colocação do
documento web no Ranking, maior o valor do seu voto.
Outros exemplos de otimização de motor de busca são aqueles especi-
alizados em pesquisa de imagens, em pesquisa local (evolução das páginas
amarelas para a Internet) e pesquisa vertical (motores de busca focalizados
em determinado assunto).
13
estar localizados em qualquer lugar da Internet (peers). Isso gera novas
dificuldades que afetam diretamente o desempenho do motor de busca. As
principais dificuldades encontradas são:
14
2.6.1 Peer-to-peer
15
Capı́tulo 3
O Nutch
16
cionar os resultados baseados mais em pagamentos do que nos méritos deles
mesmos.
17
Figura 3.1: Arquitetura do Nutch
18
3.1.1 Banco de dados
3.1.2 Aranha
19
A webDB armazena dois tipos de entidades: páginas e links. Uma página
representa uma página na web, e é indexada por sua URL e o hash MD5
de seu conteúdo. Outras informações pertinentes também são armazenadas,
são elas: o número de links na página (também chamados de outlinks); in-
formações de busca (tal como quando a página deve ser buscada novamente);
e o score da página, que é uma medida de quanto a página é importante (por
exemplo, uma medida de importância pontua com alto score páginas que são
ligadas de muitas outras páginas). Um link representa uma ligação de uma
página web (a fonte) para outra (o destino). No grafo da webDB, os nodos
são páginas e as arestas são links.
Um segmento é uma coleção de páginas buscadas e indexadas pelo aranha
em uma simples execução. A lista de busca para um segmento é uma lista
de URLs para o aranha buscar, e é gerada a partir da webDB. A saı́da do
buscador é o dado recuperado a partir das páginas na lista de busca. A saı́da
do buscador para o segmento é indexado e o ı́ndice é armazenado no seg-
mento. Qualquer segmento tem um ciclo de vida limitado, pois suas páginas
são buscadas novamente dentro de um intervalo de tempo. O intervalo de
tempo padrão para refazer uma busca é de 30 dias, portanto os segmentos
mais antigos do que isto devem ser apagados, particularmente porque eles
ocupam muito espaço em disco. Os segmentos são nomeados pela data e
hora em que eles foram criados, por isso é fácil ver o quanto eles são antigos.
O ı́ndice é o ı́ndice invertido de todas as páginas que o sistema recuperou
e é criado pela mesclagem de todos os ı́ndices dos segmentos individualmente.
O Nutch usa o lucene[11] em seu sistema de indexação, portanto todas as
ferramentas e APIs (Application Programming Interfaces) estão disponı́veis
20
para interagir com o ı́ndice gerado.
Funcionamento do Aranha
21
3. Gerar uma lista de busca a partir da webDB em um novo segmento
(generate).
22
coexistir (visto que ainda não foi apagada). Esta situação não pode aparecer
durante uma simples execução do aranha, mas sim durante a repetição de
buscas, por isso a ferramenta dedup garante que URLs duplicadas sejam
removidas.
O aranha é um meio de iniciar a varredura de sites na web, porém será
necessário utilizar as ferramentas de baixo nı́vel para repetir buscas e outros
tipos de manutenção nas estruturas de dados construı́das durante a varredura
inicial.
23
onde se encontra as URLs para injetar nas listas de busca da base, o número
de threads e o valor para o número de links por nı́vel de profundidade. O
valor padrão para profundidade foi fixado em 10 para a realização dos testes.
Após o término das tarefas do Nutch, através de algumas funções, o script
calcula algumas estatı́sticas, como o total de páginas obtidas, total de páginas
indexadas, total de download, total de upload, tempo de processo, tempo de
indexação, entre outros.
• RAM 4090852KB
24
Figura 3.2: Testes realizados na máquina ]1 para 2541 páginas
• Intel(R) Xeon(TM)
25
• Clock 3591.270 MHz
• RAM 4151660KB
26
Figura 3.4: Testes realizados na máquina ]2 para 2541 páginas
27
• Clock 2327.606 MHz
• RAM 12460760KB
Para este conjunto de testes utilizamos valores entre 800 e 1100 para o
número de threads. Os resultados estão representados na tabela da figura 3.6.
Novamente o número de threads foi variado em 100, porém foram utilizados
valores maiores para que o tempo diminuı́sse de forma considerável. O tempo
neste caso diminuiu em média 7 minutos, e novamente uma variação muito
pequena no tempo foi constatada, assim como mostra o gráfico da figura 3.7.
28
Figura 3.6: Testes realizados na máquina ]3 para 2541 páginas
29
Capı́tulo 4
30
se em uma das seguinte situações: ou é o primeiro contato que ele estabelece
com o servidor web, ou já conhece o mesmo. No primeiro caso, o motor de
busca receberá todas as páginas disponı́veis pelo servidor web. No segundo
caso, receberá apenas as páginas que foram atualizadas desde o último con-
tato.
Visando a diminuição do tamanho das páginas web a serem transferidas, o
Crab pode tirar proveito do processamento local e compactar toda a base do
servidor web, otimizando assim, a transferência das páginas web ao motor de
busca. Estatistı́camente, ao ser compactado, um arquivo de texto é reduzido
em até 80% [22]. Esta redução do tamanho dos arquivos reduz a taxa de
tranferência e faz com que o tempo também diminua.
A figura 4.1 ilustra um modelo da arquitetura do Crab. Nesta figura estão
representados o motor de busca, o servidor web e os tipos de mensagens de
requisição e respostas existente entre eles.
31
Figura 4.1: Arquitetura do Crab.
32
formato genérico definido na RFC 822 [14], que é um padrão para formato
de mensagens de texto e que era o protocolo utilizado para e-mails (antes de
2001) e também é um dos protocolos utilizados pelo HTTP.
CLIENTE cliente_crab\r\n
CONTATO tipo_de_contato\r\n
FORMATO tipo_formato\r\n
[DATA data_ultimo_contato]\r\n
\r\n
33
tipo formato: Especifica se as páginas web serão transmitidas em formato
de texto puro (TEXTO) ou se serão transmitidas compactadas (ZIP).
data ultimo contato: Especifica a data do último contato estabelecido
pelo cliente com o servidor crab. Esta linha é opcional.
Ao enviar uma mensagem de requisição, o cliente Crab encontra-se em
uma das seguintes situações:
CLIENTE nutch\r\n
CONTATO PRIMEIRO\r\n
FORMATO TEXTO
\r\n
O cliente, ao enviar uma linha nula (dupla sequência de \r\n) indica que
acabou de transmitir o cabeçalho, e neste caso, como se trata de um primeiro
contato, significa que terminou de transmitir e agora espera a resposta do
servidor.
Na segunda situação, o cliente já possui conhecimento das páginas web
que encontram-se no servidor. Buscando otimizar, o cliente pode passar ao
servidor algumas informações das páginas que já estão armazenadas em sua
34
base de dados. Passando o nome, a data e a hora em que a página foi obtida,
o cliente receberá somente as páginas que possuem atualização mais recente
que a data passada. Neste caso o a mensagem poderia ser da seguinte forma:
CLIENTE nutch\r\n
CONTATO ATUALIZACAO\r\n
FORMATO ZIP\r\n
DATA <2008/03/10>
\r\n
www.youse.com.br <2008/03/03><13:10>\r\n
www.youse.com.br/contatos.html <2008/03/05><15:57>\r\n
www.youse.com.br/empresa.html <2008/03/04><17:21>\r\n
.*
\r\n
35
o cliente se identifica, avisa que é o primeiro contato e especifica o formato
do corpo da resposta. O Crab então deve transmitir ao cliente todos os sites
que possui no momento, com exceção das páginas identificadas nos arquivos
robots.txt de cada site.
Na mensagem atualização de conteúdo, o cliente se identifica, avisa que
quer atualizar a sua base, especifica o formato do corpo da resposta e passa
uma lista das páginas conhecidas junto com a data e a hora em que recebeu
cada arquivo. O Crab então deve transmitir ao cliente apenas as páginas
que tiverem data de atualização mais recente do que a data passada pelo
cliente e as páginas com data de criação mais recente do que a da última
comunicação.
O formato do cabeçalho da resposta é igual para os dois tipos de mensa-
gens de resposta.
HI cliente_crab\r\n
SITES total_sites\r\n
PAGINAS total_paginas\r\n
TAMANHO total_bytes\r\n
\r\n
36
HOST endereco_host\r\n
HREF: pagina_html\r\n
TAMANHO: tamanho_pagina\r\n
conteudo_da_pagina_no_formato_escolhido\r\n
{repete a estrutura de transmiss~
ao da página até acabar as
páginas}
\r\n
Ao enviar uma linha nula, que esteja fora do conteúdo das páginas, o
servidor Crab indica que acabou de transmitir. O cliente saberá quando isso
vai ocorrer, pois lhe foi informado no cabeçalho da resposta o total de sites,
páginas e o total de bytes. Ao finalizar o corpo da mensagem a conexão é
encerrada.
37
Capı́tulo 5
Implementação e Resultados
Experimentais
5.1 Implementação
38
Sendo um módulo do Apache, o módulo Crab possui acesso as confi-
gurações locais e livre navegação pelos diretórios onde estão contidas as
páginas web do servidor Apache. Com isso, o módulo Crab tem a informação
necessária para a montar o protocolo de comunicação. É importante salien-
tar que o módulo Crab, ao menos nesta primeira implementação, somente
transfere as páginas web estáticas.
Para o motor de busca, desenvolvemos um módulo para o Nutch que
implementa o protocolo de comunicação do Crab. Este módulo é executado
de maneira similar ao aranha do Nutch, porém deve-se especificar o endereço
de um servidor web, ao invés de uma lista de URLs.
5.1.1 Ambiente
39
Sites f2a10 f3a7 f3a8 f4a6 f5a5 f6a5
NoL̇inks 2 3 3 4 5 6
Altura 10 7 8 6 5 5
Mı́nimo 4kb 4kb 4kb 4kb 4kb 4kb
Máximo 30kb 30kb 30kb 30kb 30kb 30kb
Total 2047 3280 9841 5461 3906 9331
páginas.
Total de páginas no servidor Apache: 33866
Tamanho total das páginas: 589MB
40
• 512 MB RAM
• HD SEAGATE 5400RPM
• 2 GB RAM
• HD 5400RPM
41
Execução 1 2
Tempo Real 19:27.96 40:05.46
Tempo Usuário 1003.41 s 2309.44 s
Tempo Sistema 192.76 s 430.07 s
Tempo Processo 1167.96 s 2405.46 s
Porcentagem de CPU 102% 113%
Total Download 562MB 620MB
Total indexadas 32842 32842
Total páginas 32842 36264
Tempo para buscar 642 seg 1283 seg
Tempo para indexar 488 seg 1042 seg
Tempo para dedup 8 seg 11 seg
Tempo para merge 15 seg 30 seg
*Medidas em tempo real.
5.3 Comparação
42
Execução 1 2 3
Tempo Real 6:05.70 6:08.02 5:32.36
Tempo Usuário 111.38 s 111.41 s 111.45 s
Tempo Sistema 24.47 s 24.84 s 25.25 s
Troca de Contexto Invo- 33299 48389 34550
luntária
Troca de Contexto Vo- 50410 49487 49678
luntária
Tempo Processo 365.70 s 368.02 s 332.36 s
Porcentagem de CPU 37% 37% 41%
Total Download 567,98MB 567,98MB 567,98MB
Total Páginas 33866 33866 33866
Execução 1 2 3
Tempo Real 8:04.30 7:34.87 7:34.55
Tempo Usuário 47.82 s 79.74 s 78.98 s
Tempo Sistema 22.16 s 19.63 s 19.02 s
Troca de Contexto Invo- 24382 9065 16222
luntária
Troca de Contexto Vo- 49473 90657 90424
luntária
Tempo Processo 484.76 s 454.87 s 454.55 s
Porcentagem de CPU 8% 21% 21%
Total Download 229,75MB 229,75MB 229,75MB
Total Páginas 33866 33866 33866
43
No melhor caso de teste obtido com o aranha tradicional, o tempo de
usuário foi 9 vezes e o tempo de sistema foi 7,87 vezes maior se comparado
ao pior caso de teste obtido com o Crab sem compressão das páginas.
Podemos observar ainda que, utilizando o Crab com compressão, conse-
guimos reduzir ainda mais os tempos de usuário e de sistema e a quantidade
de bytes transferidos foi reduzida em 60%.
44
Capı́tulo 6
Conclusão
Vimos neste trabalho que os motores de busca web são de extrema im-
portância atualmente, pois sem eles, dificilmente encontrarı́amos alguma in-
formação relevante na web. Vimos também que apesar dos motores de busca
prover a recuperação da informação eficientemente, há vários desafios a serem
enfrentados.
O aranha, que é uma parte do motor de busca, tem a função de percorrer
página por página contida na web, afim de acessa-las a procura de links e
obter seu conteúdo. Vimos que esse processo é bastante custoso, pois para
o aranha conseguir percorrer toda a web, levaria algumas centenas de anos.
Por isso o aranha precisa priorizar as URLs que serão acessadas, utilizando
métricas como qualidade e populariedade em termos de visitas para as URLs.
Foi proposto então o Crab, sugerindo uma nova alternativa para o aranha.
O Crab tem a proposta de funcionamento completamente diferente dos
aranhas comuns. Este descentraliza o trabalho do aranha, dividindo-o entre
o motor de busca e o servidor web. Sua arquitetura é cliente-servidor, onde
45
o servidor são os servidores web e os clientes, os motores de busca. Possui
protocolo de comunicação próprio e, na implementação realizada ficou limi-
tado a transferir somente as páginas web estáticas. Páginas dinâmicas, pdf,
arquivos de audio e video ainda não são suportados. Além de suportar estes
formatos, como um trabalho futuro, podemos sugerir que o o Crab classifi-
que as páginas do servidor Web pelo número de visitas que recebe, auxiliando
assim o ranqueamento de páginas.
Foram executados testes em ambiente fechado que mostraram a eficiência
do Crab perante aos aranhas tradicionais. Em alguns casos o Crab chegou
a ser 9 vezes mais eficiente que um motor de busca tradicional. Outro dife-
rencial é a possı́vel diminuição da quantidade de bytes transferidos. O Crab
com transferência em modo ZIP, reduziu em 60% a quantidade de bytes
transferidos.
Embora nos motores de buscas modernos, os aranhas sejam extrema-
mente otimizados e executados em clusters cada vez maiores, acreditamos
que o modelo do Crab proporcionaria vantagens aos motores de buscas, como
a indexação de mais sites, redução de carga nos servidores web e consequen-
temente redução na transferência de bytes.
46
Apêndice A
47
Figura A.2: Alterações realizadas no arquivo HttpResponse.java do plugin
HttpClient
48
Figura A.3: Alterações no arquivo de configurações do Nutch.
49
Referências Bibliográficas
[1] Ian Foster and Carl Kesselman (eds), The Grid: Blueprint for a New
Computing Infrastructure, Morgan Kaufmann, July 1998. ISBN 1-55860-
475-8.
50
[8] How much data does Google store?,
http://googlesystem.blogspot.com/2006/09/how-much-data-does-
google-store.html
[12] http://today.java.net/pub/a/today/2006/01/10/introduction-to-nutch-
1.html
[13] http://lucene.apache.org/nutch/
51
[18] YaCy http://yacy.net/
52