Il s'agit d'un programme Java pour créer un index inversé de mots survenant dans un large ensemble de documents extraits de pages Web à l'aide de Hadoop MapReduce et Google DataProc.
En tant qu'ensemble de données, nous utilisons un sous-ensemble de 74 fichiers à partir d'un total de 408 fichiers (texte extrait des balises HTML) dérivé du projet Stanford Webbase disponible ici. Il a été obtenu à partir d'une analyse Web réalisée en février 2007. Il s'agit de l'une des plus grandes collections totalisant plus de 100 millions de pages Web de plus de 50 000 sites Web. Cette version a déjà été nettoyée.
Dans ce projet, nous avons d'abord configuré un échantillon de cluster Hadoop à l'aide du mode local (autonome), puis implémentez le projet réel en mode entièrement distribué sur Google DataProc sur l'ensemble de données réel.
Nous devons configurer le projet sur GNU / Linux car il s'agit de la plate-forme de développement et de production prise en charge pour Hadoop. Pour obtenir une distribution Hadoop, téléchargez une version stable récente de l'un des miroirs d'Apache Download. Veuillez noter que ce projet a été déployé et testé à l'aide de hadoop-3.1.1 . Déballer la distribution Hadoop téléchargée. Dans le dossier de distribution, modifiez le fichier etc/hadoop/hadoop-env.sh pour définir les paramètres variables de l'environnement comme suit:
# add these line to the hadoop-env.sh or set them in terminal
export JAVA_HOME=/usr/java/latest
export PATH= ${JAVA_HOME} /bin: ${PATH}
export HADOOP_CLASSPATH= ${JAVA_HOME} /lib/tools.jarEssayez ensuite la commande suivante:
$ bin/hadoopCela devrait afficher la documentation d'utilisation du script Hadoop. Vous êtes maintenant prêt à démarrer votre cluster Hadoop en mode autonome.
Ce travail simple Hadoop obtient deux fichiers texte du dossier "d'entrée" comme arguments du mappeur.
# file01
5722018411 Hello World Bye World # file02
6722018415 Hello Hadoop Goodbye HadoopEt en soumettant un travail Hadoop et en appliquant une étape de réduction, il génère un index inversé comme ci-dessous:
bye 5722018411:1
goodbye 6722018415:1
hadoop 6722018415:2
hello 5722018411:1 6722018415:1
world 5722018411:2 Pour soumettre un travail Hadoop, la mise en œuvre de madreduce doit être emballée sous forme de fichier jar . Pour ce faire, copiez le fichier InvertedIndex.java de ce projet dans le dossier racine de distribution de Hadoop et pendant que vous y êtes toujours, exécutez les commandes suivantes pour compiler InvertedIndex.java et créer un fichier jar .
$ bin/hadoop com.sun.tools.javac.Main InvertedIndex.java
$ jar cf invertedindex.jar InvertedIndex * .class Copiez input/file01 et input/file02 de ce projet et placez-les dans le dossier input du dossier Hadoop Distrubution. Pendant que vous y êtes toujours, exécutez la commande suivante pour soumettre le travail, obtenez les fichiers d'entrée du dossier input , générez l'index inversé et stockez sa sortie dans le dossier output :
$ bin/hadoop jar invertedindex.jar InvertedIndex input outputEt enfin pour voir la sortie, exécutez la commande ci-dessous:
$ bin/hadoop dfs -cat output/part-r-00000 Dans cette section, nous créons un cluster avec 3 nœuds de travail sur Google Dataproc et exécutons le travail invertedindex.jar sur l'ensemble de données réel.
Nous avons d'abord besoin d'un compte sur Google Cloud Platform. Vous pouvez vous inscrire à un essai avec des crédits gratuits de 300 $ si vous n'en avez pas déjà un.
Dans la console Google Cloud, créez un nouveau projet ou sélectionnez un existant. Pour cet exercice, nous utiliserons DataProc. À l'aide de DataProc, nous pouvons rapidement créer un groupe d'instances de calcul exécutant Hadoop. L'alternative à DataProc serait de configurer individuellement chaque nœud de calcul, d'installer Hadoop dessus, de configurer HDFS, de configurer le nœud maître, etc. DataProc automatise ce processus exténuant pour nous.
Dans Google Cloud Consol, sélectionnez DataProc dans la liste de navigation à gauche. Si c'est la première fois que vous utilisez DataProc, vous devrez peut-être d'abord activer l'API DataProc. Cliquez sur «Créer un cluster» vous amènera à la section de configuration du cluster. Donnez n'importe quel nom unique à votre cluster et sélectionnez une zone souhaitée. Vous devez créer un maître et 3 nœuds de travailleurs. Sélectionnez les processeurs de configuration par défaut (N1-Standard-4 4VCPU 15 Go de mémoire) pour Master et chaque membre et réduisez le stockage à 32 Go de stockage de disques durs. Modifiez le nombre de nœuds de travail en 3. Laissez tout le reste par défaut et cliquez sur «Créer».
Maintenant que le cluster est configuré, nous devrons le configurer un peu avant de pouvoir exécuter des travaux dessus. Sélectionnez le cluster que vous venez de créer dans la liste des clusters dans la section Cloud DataProc sur votre console. Accédez à l'onglet Instances VM et cliquez sur le bouton SSH à côté de l'instance avec le rôle maître.
Cliquer sur le bouton SSH vous amènera à une interface de ligne de commande (CLI) comme un terme ou un terminal. Toutes les commandes des étapes suivantes doivent être entrées dans la CLI. Il n'y a pas de répertoire domestique sur HDFS pour l'utilisateur actuel, nous devrons le configurer avant de poursuivre. (Pour découvrir que votre nom d'utilisateur exécute whoami )
$ hadoop fs -mkdir -p /user/ < your username here > JAVA_HOME a déjà été configuré et nous n'avons pas besoin de le remettre en place.
Veuillez noter que cette étape doit être effectuée chaque fois que vous ouvrez un nouveau terminal SSH. Pour éliminer cette étape, vous pouvez également configurer cette JAVA_HOME , PATH et HADOOP_CLASSPATH dans le etc/hadoop/hadoop-env.sh .
$ export PATH= ${JAVA_HOME} /bin: ${PATH}
$ export HADOOP_CLASSPATH= ${JAVA_HOME} /lib/tools.jarMaintenant courir:
$ hadoop fs -lsS'il n'y a pas d'erreur, cela implique que votre cluster a été configuré avec succès. Si vous rencontrez une erreur, cela est probablement dû à une variable d'environnement manquante ou à un répertoire domestique utilisateur qui n'est pas configuré.
Pour vous assurer que les variables d'environnement sont définies, exécutez la commande env .
Remarque : veuillez désactiver la facturation du cluster lorsque vous ne l'utilisez pas. Le laisser courir coûtera des crédits supplémentaires.
Téléchargez l'ensemble de données à partir de ce lien et déziptez le contenu. Vous trouverez deux dossiers à l'intérieur nommés «développement» et «données complètes». Les données du «développement» peuvent être utilisées à des fins de développement et de test.
Cliquez sur «DataProc» dans le menu de navigation gauche. Ensuite, localisez l'adresse du godet de stadification de stockage Google Cloud par défaut pour votre cluster.
Accédez à la section de stockage dans la barre de navigation de gauche et sélectionnez Bodet par défaut de votre cluster dans la liste des seaux. Cliquez sur le bouton Upload Folder et téléchargez individuellement les dossiers devdata et fulldata .
Maintenant, nous sommes prêts à soumettre un travail Hadoop pour exécuter notre implémentation MapReduce sur les données réelles. Utilisez la commande ssh ou nano / vi pour copier ou créer InvertedIndex.java sur le cluster maître.
Exécutez la commande suivante pour créer le fichier jar :
$ hadoop com.sun.tools.javac.Main InvertedIndex.java
$ jar cf invertedindex.jar InvertedIndex * .classVous avez maintenant un fichier JAR pour votre travail. Vous devez placer ce fichier JAR dans le godet cloud par défaut de votre cluster. Créez simplement un dossier appelé pot sur votre seau et téléchargez-le dans ce dossier. Si vous avez créé votre fichier JAR sur le nœud maître du cluster lui-même, utilisez les commandes suivantes pour la copier dans le dossier JAR.
$ hadoop fs -copyFromLocal ./invertedindex.jar
$ hadoop fs -cp ./invertedindex.jar gs://dataproc-69070.../JAR La gs://dataproc-69070... La pièce est le seau par défaut de votre cluster. Il doit être apparenté par le GS: // pour dire à l'environnement Hadoop qu'il s'agit d'un seau et non d'un emplacement régulier sur le système de fichiers.
Accédez à la section «Jobs» dans la barre de navigation de gauche de la page DataProc et cliquez sur «Soumettre le travail». Remplissez les paramètres du travail comme suit:
gs:///dataproc-69070.../JAR/invertedindex.jar .gs:///dataproc-69070.../fulldata .gs:///dataproc-69070.../fulloutput . Le dossier est créé lors de l'exécution. Vous obtiendrez une erreur si vous donnez le nom d'un dossier existant.Soumettez maintenant le travail. Vous pouvez voir le journal pendant qu'il s'exécute.
Remarque : Si vous rencontrez une Java.lang.Interrupted Exception vous pouvez l'ignorer en toute sécurité. Votre travail sera toujours exécuté.
Les fichiers de sortie seront stockés dans le dossier de sortie du seau. Si vous ouvrez ce dossier, vous remarquerez que l'index inversé se trouve dans plusieurs segments. (Supprimez le fichier _Success dans le dossier avant de fusionner tous les fichiers de sortie). Pour fusionner les fichiers et créer une sortie de texte finale, exécutez les commandes suivantes:
$ hadoop fs -getmerge gs://dataproc-69070.../fulloutput ./output.txt
$ hadoop fs -copyFromLocal ./output.txt
$ hadoop fs -cp ./output.txt gs://dataproc-69070.../output.txt Vous avez maintenant créé avec succès un index inversé de l'ensemble des données. Vous pouvez utiliser grep pour voir les entrées d'index pour n'importe quel mot apécifique:
$ grep -w ' ^peace ' output.txt Si vous souhaitez recompiler et soumettre à nouveau un nouvel emploi, vous pouvez supprimer les fichiers .jar , .class , .java et hadoop en utilisant la commande ci-dessous en conséquence.
$ hadoop fs -rm ./wordcount.jar ./output.txt WordCount * .class
$ hadoop fs -rm gs://dataproc-69070.../JAR/wordcount.jar ; gs://dataproc-69070.../output.txt
$ hadoop fs -rm gs://dataproc-69070.../fulloutput/ *
$ hadoop fs -rmdir gs://dataproc-69070.../fulloutput
Ce travail est concédé sous licence Creative Commons Attribution 4.0 International.