Qu'est-ce que Spring pour Apache Hadoop?

Vue d'ensemble: Printemps is one of the widely used frameworks in enterprise applications development. Printemps a différents composants tels que Spring ORM, Spring JDBC etc pour soutenir différentes fonctionnalités. Spring pour Apache Hadoop est le cadre pour soutenir le renforcement de l'application avec des composants Hadoop comme HDFS, MapReduce et Hive etc. Printemps fournit des API pour travailler avec tous ces composants. Spring supporte également l'intégration de Hadoop avec d'autres projets de printemps de l'écosystème pour le développement d'applications de la vie réelle. Dans cet article, nous allons discuter de l'utilisation de Printemps pour cadres Apache Hadoop.

Présentation:
Apache Hadoop est un framework logiciel open source, qui est utilisé pour stocker et traiter des ensembles de données de grand volume. Le printemps est aussi un framework open source, qui est largement utilisé dans les applications Java / J2ee. L'injection de dépendance de printemps (DE) ou l'inversion de contrôle (IO) mécanisme est devenu une alternative populaire aux Enterprise Java Beans (ou EJB) modèle. Ressort a l'avantage d'être suffisamment flexibles pour être facilement bouché par tout autre structure de développement. En utilisant cet avantage du printemps, nous pouvons brancher avec Apache Hadoop pour nous aider à obtenir le maximum d'avantages de chacun de ces deux cadres.

Commencer:
Dans cette section, nous allons parler de la façon de créer un emploi Hadoop MapReduce avec Spring. Ceci implique les étapes suivantes: -

  • Step 1 - Obtenir les dépendances requises en utilisant Maven - Comme nous le savons maven est fortement dépendante du fichier pom.xml, nous faisons les entrées suivantes dans notre fichier pom.xml. Ces entrées de dépendance sont pour Hadoop noyau et framework Spring.

Listing1: entrées de configuration d'exemples dans le fichier pom.xml

[Code]

< !– Les données Spring Hadoop — >
< dépendance >
< groupId > org.springframework.data </ groupId >
< artifactId > printemps-data-hadoop </ artifactId >
< version > 1.0.0.LIBÉRATION </ version >
< /dépendance >
< !– Apache Hadoop de base -- >
< dépendance >
< groupId > org.apache.hadoop </ groupId >
< artifactId > hadoop-core </ artifactId >
< version > 1.0.3 </version >
</dépendance>

[/ Code]

  • Step 2 - Créer le composant mappeur - Comme nous le savons un composant mappeur est utilisée pour briser le problème réel en éléments plus petits. Ces petits composants deviennent alors plus faciles à résoudre. Nous pouvons avoir notre propre composant mappeur personnalisé en étendant la carte Apache réduire classe Mapper. Nous devons remplacer la méthode de cette classe de carte. La classe mappeur attend les quatre paramètres suivants -

Pour l'entrée: Les paramètres suivants sont pour la clé d'entrée et de la valeur

  • ALORS - Ce paramètre décrit le type de clé qui est fournie en tant qu'entrée à la composante mappeur.
  • VALUEIN - Ce paramètre décrit le type de la valeur qui est fournie en tant qu'entrée à la composante mappeur.

Pour la sortie: Les paramètres suivants sont pour la clé de sortie et de la valeur

  • KeyOut - Ce paramètre décrit le type de la mettre hors paramètre clé de la composante mappeur.
  • VALUEOUT - Ce paramètre décrit le type de la valeur de sortie du composant de mappeur.

Chacun de ces paramètres doit mettre en œuvre la inscriptible interface. Dans l'exemple donné, nous avons utilisé notre mappeur pour lire le contenu d'un fichier d'une ligne à la fois et de préparer des paires clé-valeur de chaque ligne. Notre mise en oeuvre de la méthode de la carte exécute les tâches suivantes: -

  • First, diviser chaque ligne unique en mots
  • Second, itérer sur chaque mot et sortir ni tous les caractères Unicode qui ne sont ni lettres ni caractères.
  • Troisième, la construction d'une paire clé-valeur en utilisant la méthode d'écriture de la Le contexte classe qui est compatible avec la paire clé-valeur sortie attendue.

Listing2: Exemple de classe Mapper personnalisée

[Code]

MyWordMapper public class Mapper<LongWritable, Texte, Texte, IntWritable> {
privé myWord texte = new texte();

@ Override
carte protected void(clé LongWritable, Valeur texte, contexte Contexte) throws IOException, InterruptedException {
String line = value.toString();
StringTokenizer lineTokenz = new StringTokenizer(line);
while (lineTokenz.hasMoreTokens()) {
Chaîne cleaned_data = removeNonLettersNonNumbers(lineTokenz.nextToken());
myword.set(cleaned_data);
context.write(myWord, nouveau IntWritable(1));
}
}

/**
* Remplacer tous les caractères Unicode qui ne sont ni des nombres ni lettres avec une chaîne vide.
* @param originale, Il est la chaîne d'origine
* @return un objet chaîne qui ne contient que des lettres et des chiffres
*/
removeNonLettersNonNumbers String privé (Chaîne d'origine) {
retour original.replaceAll(“[^ \ P{L}\\p{N}]”, “”);
}
}

[/Code]

Step 3 - Créez la Réducteur Composant - Un réducteur est un composant qui supprime les valeurs intermédiaires non désirées et transmet uniquement les paires de valeurs clés qui sont pertinentes. Pour avoir notre réducteur personnalisé, notre classe doit étendre la Réducteur classe et sur Ride la méthode de réduire. La classe réducteur attend les quatre paramètres suivants.

Pour l'entrée: Les paramètres suivants sont pour la clé d'entrée et de la valeur

  • ALORS - Ce paramètre décrit le type de clé qui est fournie en tant qu'entrée à la composante mappeur.
  • VALUEIN - Ce paramètre décrit le type de la valeur qui est fournie en tant qu'entrée à la composante mappeur.

Pour la sortie: Les paramètres suivants sont pour la clé de sortie et de la valeur

  • KeyOut - Ce paramètre décrit le type de la mettre hors paramètre clé de la composante mappeur
  • VALUEOUT - Ce paramètre décrit le type de la valeur de sortie du composant de mappeur.

Alors que la mise en œuvre, nous devons nous assurer que le type de données des paramètres et 'Keyin' 'KeyOut' sont les mêmes. Aussi les paramètres valueout '' valuein 'et doivent être de même type. Notre mise en œuvre de la méthode de réduire effectue les étapes suivantes -

  • First, vérifier que la clé d'entrée contient le mot recherché.
  • Second, si l'étape ci-dessus est vrai, obtenir le nombre d'occurrences du mot.
  • Troisième, construire une nouvelle paire clé-valeur en appelant la méthode d'écriture de la classe de réducteur.

Listing3: Exemple de classe Réducteur personnalisée

[Code]

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

MyWordReducer public class Réducteur<Texte, IntWritable, Texte, IntWritable> {
protégée finale MY_TARGET_TEXT static String = “Hadoop”;

@ Override
protected void réduire(keyTxt texte, Iterable<IntWritable> values, contexte Contexte) throws IOException, InterruptedException {
si (containsTargetWord(keyTxt)) {
int wCount = 0;
pour (valeur IntWritable: values) {
wCount = value.get();
}
context.write(key, nouveau IntWritable(wCount));
}
}
containsTargetWord booléen privé(keyTxt texte) {
retour keyTxt.toString().équivaut à(MY_TARGET_TEXT);
}
}

[/Code]

  • Step 4 - Créer le contexte d'application - La prochaine étape est de créer le contexte d'application en utilisant XML. Nous pouvons configurer le contexte d'application de notre application en utilisant les étapes suivantes -
    • Créer un fichier de propriétés qui contient la valeur des propriétés de configuration. Un exemple de fichier de propriétés d'application est illustré ci-dessous -

[Code]
fs.default.name = hdfs://localhost:9000
mapred.job.tracker = localhost:9001
input.path = / path / to / input / fichier /
output.path = / path / to / sortie / fichier
[/Code]

  • Configurer un porte-propriété endroit qui est utilisé pour récupérer les valeurs des propriétés de configuration à partir du fichier de propriétés créé. Cela peut être fait en ajoutant ce qui suit dans notre fichier contexte XML d'application -

[Code]
<le contexte:emplacement des biens-espace réservé =”classpath:application.properties” />

[/Code]

  • Configurer Apache Hadoop et son travail - Nous pouvons configurer le système de fichiers par défaut et son job tracker en ajoutant ce qui suit dans notre fichier de contexte d'application

[Code]

<hdp:configuration>
fs.default.name = ${fs.default.name}
mapred.job.tracker = ${mapred.job.tracker}
</hdp:configuration>

[/Code]

Nous devrions ajouter ce qui suit dans notre fichier contexte XML d'application pour définir le tracker d'emploi -

[Code]
<hdp:emploi id =”wordCountJobId”
entrée-path =”${input.path}”
sortie path =”${output.path}”
jar-by-class =”net.qs.spring.data.apachehadoop.Main”
mappeur =”net.qs.spring.data.apachehadoop.MyWordMapper”
réducteur =”net.qs.spring.data.apachehadoop.MyWordReducer”/>

[/Code]

  • Configurer le coureur de travail qui exécute le travail de hadoop créé. Le coureur de l'emploi peut être configuré en ajoutant ce qui suit dans notre fichier contexte XML d'application

[Code]
<hdp:job-coureur id =”wordCountJobRunner” ref-emploi =”wordCountJobId” run-au-démarrage =”vrai”/>
[/Code]

  • Step 5 – Chargement du contexte de l'application au démarrage - Nous pouvons maintenant exécuter la tâche Hadoop créé en chargeant le contexte de l'application lorsque l'application démarre. Nous pouvons le faire en créant l'instance de l'objet ClassPathXmlApplicationContext qui accepte le nom de notre fichier de contexte d'application en tant que paramètre d'entrée au constructeur. Cela peut être fait en tant que sous -

Listing4: Exemple montrant le chargement du contexte d'application

[Code]
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class principal {
public static void main(Chaîne[] arguments) {
ApplicationContext ctx = new ClassPathXmlApplicationContext(“applicationContext.xml”);
}
}

[/Code]

  • Step 6 - Exécutez le travail MapReduce - Nous pouvons commencer notre carte à réduire l'emploi en utilisant les étapes suivantes -
  • Télécharger un fichier d'entrée dans HDFS - Nous pouvons le faire en exécutant la commande suivante à l'invite de commande -

[Code]

hadoop dfs -Mettre sample.txt /input/sample.txt

[/Code]

Voici un fichier d'entrée de l'échantillon qui a été utilisé dans cet exemple. Le mot clé "cibleHadoop ' est mis en évidence dans VERT. Le mot 'Hadoop ' existe 4 fois dans l'échantillon.

Input

Contribution

Image1: fichier d'entrée échantillon

  • Vérifiez si le fichier a été téléchargé avec succès en exécutant la commande suivante. Il affiche le fichier d'entrée.

[Code]

dfs Hadoop / de l'entrée

[/Code]

  • Exécutez le travail MapReduce. Cela peut être fait en exécutant la méthode principale de notre fichier java de l'IDE. Si toutes les étapes fonctionnent comme prévu alors le suivant sera la sortie.

Sortie: Hadoop 4
Summary: Terminons ce que nous avons discuté jusqu'à présent dans les balles suivantes –

  • Tous les deux Printemps et Hadoop sont des cadres utiles de la communauté open source.
  • En combinant ceux-ci nous pouvons obtenir le bénéfice des deux cadres.
  • Création d'une carte à réduire l'emploi en utilisant ressort est un processus en six étapes comme expliqué ci-dessus.
Tagged on: ,
============================================= ============================================== Buy best TechAlpine Books on Amazon
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share