Cours Java pour débuter avec le Framework Apache Nutch [Eng]
Cours Java pour débuter avec le Framework Apache Nutch [Eng]
Projet Apache Nutch
Fondée en 2003 par Doug Cutting, le créateur de Lucene, et Mike Cafarella
Projet Apache depuis 2004 (sous-projet de Lucene)
Spin-offs:
- Réduire la carte et FS distribué → Hadoop
- Détection et analyse du type de contenu → Tika
De nombreuses installations en fonctionnement, principalement la recherche verticale
Collections typiquement 1 million - 200 millions de documents
Web sous forme de graphe dirigé
Nodes (vertices): URL-s en tant qu'identificateurs uniques
Bords (liens): liens hypertexte tels que <a href="targetUrl"/>
Etiquettes de bord: <a href=".."> texte d'ancrage </a>
Souvent représenté sous forme de listes de contiguïté
Traversée: suivez les bords, largeur d'abord, profondeur d'abord, aléatoire
Nutch caractéristiques en un coup d'oeil
Base de données de pages et base de données de liens (graphique Web)
À base de plugins, hautement modulaire:
- La plupart des comportements peuvent être modifiés via des plugins
Analyseur distribué multiprotocole, multithread
Traitement de contenu à base de plugin (analyse, filtrage)
Contrôles frontaliers rampants robustes
Infrastructure de traitement de données évolutive
- Traitement de carte-réduction
Indexeur de texte intégral et moteur de recherche
- Utiliser Lucene ou Solr
- Prise en charge de la recherche distribuée
API robuste et options d'intégration
Fondation Hadoop
Abstraction du système de fichiers
- FS locale ou
- FS distribué
- également Amazon S3, Kosmos et d’autres implémentations FS.
Traitement de réduction de carte
- Actuellement au cœur des algorithmes de Nutch
- Les tâches de traitement sont exécutées sous la forme d'une ou plusieurs tâches mapreduce
- Données gérées sous Hadoop MapFile-s / SequenceFile-s
- Mises à jour massives très efficaces
- Petites mises à jour coûteuses
- Les données Hadoop sont immuables, une fois créées
- Les mises à jour sont vraiment fusionnées et remplacées
…… …
Tessons de Nutch (a.k.a. «segments»)
Unité de travail (batch) - traitement plus facile des jeux de données volumineux
Espace réservé de commodité, utilisant des noms de répertoire prédéfinis
Unité de déploiement sur l'infrastructure de recherche
Peut inclure des index Lucene par partage
Une fois terminés, ils ne sont pratiquement pas modifiables
- Pas de mises à jour en place du contenu, ni de remplacement de contenu obsolète
Périodiquement éliminé
……
Cycle de vie et fragments d'URL
injecté /
découvert
prévu
pour aller chercher
S1
cherché /
à jour
prévu
pour aller chercher
cherché /
à jour
Une vision accélérée de la réalité
Buts:
- Nouvel index → synchro avec le taux de changement réel
- Minimiser la relecture → ne pas extraire les pages non modifiées
Chaque page peut nécessiter son propre calendrier d’exploration. Gestion des fragments:
- La page peut être présente dans de nombreux fragments, mais seul l'enregistrement le plus récent est valide.
- Inconvénient de mettre à jour sur place, il suffit de marquer comme supprimé
- Éliminer les vieux fragments et forcer la récupération des pages restantes
Rampant frontière
Aucun catalogue de pages Web faisant autorité
Les moteurs de recherche découvrent leur vision de l'univers Web
- Commencez à partir de “liste de semences”
- Suivre (marcher) des liens externes (utiles? Intéressants?)
Beaucoup de dangers de simplement errer
- explosion ou effondrement de la frontière
- collecte de contenu indésirable (spam, courrier indésirable, offensant)
Contrôler la frontière rampante
Plugins de filtrage d'URL
- Liste blanche, liste noire, regex
- Peut utiliser des ressources externes
(DB-s, services ...)
Plugins normalisateur d'URL
- Résolution des éléments de chemin relatif
- URL «équivalentes»
Contrôles supplémentaires utilisant des plugins de scoring
- priorité, sélection / blocage des métadonnées
Pièges à chenilles - difficile!
- Semence de statistiques de domaine / hôte / chemin
Large vs crawling ciblé
Différences:
- Peu de différence technique dans la configuration
- Grande différence dans les opérations, la maintenance et la qualité
Large rampant:
- Frontière rampante (presque) illimitée
- Risque élevé de spam et de contenu indésirable
- La «politesse» est un facteur limitant très important
- Considérations sur la bande passante et le DNS
Analyse ciblée (verticale ou entreprise):
- frontière rampante limitée
- La bande passante ou la politesse ne sont souvent pas un problème
- Faible risque de spam et de contenu indésirable
Recherche verticale et entreprise
Recherche verticale
- Gamme de sites "de référence" sélectionnés
- Contrôle robuste de la frontière rampante
- post-traitement de contenu étendu
- décisions de classement prises par les entreprises
Recherche d'entreprise
- Variété de sources de données et de formats de données
- Frontière rampante bien définie et limitée
- Intégration avec des sources de données internes
- peu de danger de spam
- Le score de type PageRank fonctionne généralement mal
…
Installation simple et en cours d'exécution
Vous avez déjà Java 5+, non?
Obtenez une version 1.0 ou une version nocturne (assez stable)
La configuration de recherche simple utilise l'application Web Tomcat pour la recherche
Script bash en ligne de commande: bin / nutch
- Utilisateurs Windows: obtenez Cygwin
- Première version d’une console d’interface utilisateur Web
- Surveillance Web Hadoop
Configuration: fichiers
Modifier la configuration dans conf / nutch-site.xml
- Recherchez les valeurs par défaut et les documents dans nutch-default.xml.
- Vous DEVEZ au moins renseigner le nom de votre agent
Configuration active des plugins
Propriétés par plugin
Fichiers de configuration externes
- regex-urlfilter.xml
- regex-normalize.xml
- parse-plugins.xml: mappage du type MIME au plugin
Plugins Nutch
Extensions basées sur des plugins pour:
- Planification de l'exploration
- Filtrage et normalisation d'URL
- Protocole pour obtenir le contenu
- analyse du contenu
- Analyse de texte (tokenization)
- Signature de page (pour détecter les quasi-doublons)
- Filtres d'indexation (champs d'indexation et métadonnées)
- génération et mise en évidence d’extraits de code
- Scoring et classement
- Traduction et extension de requêtes (utilisateur → Lucene)
Flux de travail principal de Nutch
Injecter: création initiale de CrawlDB
- Insérer des URL de départ
- Initial LinkDB est vide
Générer la liste de lecture d'un nouveau fragment
Récupérer le contenu brut
Analyser le contenu (découverte des liens externes)
Mettre à jour CrawlDB à partir de fragments
Mettre à jour LinkDB à partir de fragments
Fragments d'index
……
Workflow: générer des listes d'extraction
Que chercher ensuite?
- La largeur d'abord - important en raison des limites de «politesse»
- Expiré (plus long que fetchTime + fetchInterval)
- Hautement classé (PageRank)
- Nouvellement ajouté
Fetchlist génération:
- “topN” - sélectionne les meilleurs candidats
- Priorité basée sur de nombreux facteurs, connectable
Calendrier de récupération adaptatif
- Détecter le taux de changement et le moment du changement
- Détecter le contenu non modifié
- Hmm, et comment reconnaître ça? → signatures de pages approximatives (détection presque en double)
Flux de travail: aller chercher
Multi-protocole: HTTP (s), FTP, fichier: //, etc ...
Coordonne plusieurs threads accédant au même hôte
- problèmes de «politesse» contre efficacité de l'exploration
- Hôte: un nom IP ou DNS?
- Redirections: devrait suivre immédiatement? Quel genre?
Autres problèmes de netiquette:
- robots.txt: chemins non autorisés, délai d'analyse
Préparation à l'analyse:
- Problèmes de détection du type de contenu
- L’analyse est généralement exécutée séparément (ressources avides et parfois instables)
…
Workflow: traitement du contenu
Les plugins de protocole récupèrent le contenu sous forme d'octets simples + métadonnées au niveau du protocole (par exemple, en-têtes HTTP)
Plugins Parse
- Le contenu est analysé par des analyseurs spécifiques au type MIME.
- Le contenu est analysé dans parseData (titre, liens externes, autres métadonnées) et parseText (contenu en texte brut).
Nutch supporte de nombreux formats de fichiers populaires
…
Flux de travail: inversion de lien
Les pages ont des liens sortants (outlinks)
… Je sais où je veux en venir
Question: qui pointe vers moi?
… Je ne sais pas, il n'y a pas de catalogue de pages
… PERSONNE le sait avec certitude non plus!
En degré indique l'importance de la page
Le texte d'ancrage fournit des informations sémantiques importantes
Réponse partielle: inversez les liens sortants que je connais et groupe par cible…
Flux de travail: déduplication
La même page peut être présente dans de nombreux fragments
- Les versions obsolètes dans les anciens fragments
- Pages en miroir ou équivalentes (a.com → www.a.com)
Beaucoup d'autres pages sont presque identiques
- Différences liées aux modèles (bannières, date du jour)
- Changements de police / mise en page, reformulation mineure
Hmm… qu'est-ce qu'un changement significatif ???
- Problème délicat! Indice: quel est le contenu de la page?
Détection et suppression presque en double
- Nutch utilise des signatures de page approximatives (empreintes digitales)
- Les doublons ne sont marqués que comme supprimés
...
Configuration de recherche
La syntaxe de Nutch est limitée - exprès!
- Certaines requêtes sont coûteuses, par exemple wildcard menant, très long
- Certaines requêtes peuvent nécessiter une extension implicite (cachée)
Plugins de requête
- De la requête utilisateur à la requête Lucene / Solr
Requête de l'utilisateur: recherche sur le Web
+ (url: web ^ 4.0 ancre: web ^ 2.0 contenu: titre web: web ^ 1.5 hôte: web ^ 2.0)
+ (url: search ^ 4.0 ancre: search ^ 2.0 contenu: titre de la recherche: search ^ 1.5
hôte: recherche ^ 2.0) url: "recherche sur le Web" ~ 10 ^ 4.0 ancre: "recherche sur le Web" ~ 4 ^ 2.0
contenu: "recherche sur le Web" ~ 10 titre: "recherche sur le Web" ~ 10 ^ 1.5
hôte: "recherche sur le Web" ~ 10 ^ 2.0
Configuration du serveur de recherche
- Recherche simple vs distribué
- Utiliser Nutch Searcher, Solr ou un mélange
- Actuellement, pas de calcul global IDF
...
Déploiement: serveur unique
Le déploiement le plus simple mais le plus limité
Stockage centralisé, traitement centralisé
Hadoop LocalFS et LocalJobTracker
Supprimez nutch.war dans Tomcat / webapps et pointez sur des fragments
Nutch sur un cluster Hadoop
Suppose qu'un cluster Hadoop est opérationnel
…
qui est couvert ailleurs
Construisez le pot nutch.job et utilisez-le comme d'habitude: bin / hadoop jar nutch.job <className> <args ...>
Remarque: la configuration Nutch est à l'intérieur de nutch.job
- Lorsque vous le changez, vous devez reconstruire le fichier d'emploi.
La recherche n'est pas un travail de réduction de carte - souvent sur un groupe de machines séparé
