Je ne parlerai pas de l'utilisation de Maven. Il y a beaucoup en ligne et il n'y a pas eu de grands changements au fil des ans. Ici, je ne présenterai que comment construire un environnement de développement Hadoop.
1. Créez d'abord un projet
Copiez le code comme suit: Mvn Archetype: generate -dgroupId = my.hadoopstudy -dartifActid = hadoopstudy -darchetypeArtifActid = maven-archetype-quickstart -dinterAntiveMode = false
2. Ensuite, ajoutez les packages de dépendance Hadoop de Hadoop-Common, Hadoop-Client, Hadoop-HDFS dans le fichier pom.xml. Le fichier pom.xml ajouté est le suivant
<Project Xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://maven.apache.org/pom/4.0.0" xsi: schemalation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd "> <ModelVersion> 4.0.0 </ ModelVersion> <ProupId> My.HadoopStudy </prôdId> <ArtifActid> HadoopStudy <name> hadoopstudy </name> <url> http://maven.apache.org </url> <dépendances> <dependency> <proupId> org.apache.hadoop </prouvenid> <prifactive> hadoop-Common </ artifactid> </ version> 2,1 </ version> </pedimency> <petendency> <ArtefactId> Hadoop-HDFS </ artifactId> <Dersion> 2.5.1 </DERNIFRIENT> </DENDENCENCE> <DENSEDENCY> <ProupID> org.apache.hadoop </rom grouped> <prefactive> Hadoop-Client </retifactid> <version> 2.5.1 </ version> </Dedency> <Dedency> <ProupId> Junit </prouverID> <ArtefactId> JUnit </ artifactid> <version> 3.8.1 </ version> <ccope> Test </ccope> </dependency> </dEpendence> </randing>
3. Test
3.1 Nous pouvons d'abord tester le développement de HDF. Ici, nous supposons que nous avons des grappes Havedoop dans l'article précédent Hadoop, le code de classe est le suivant
package my.hadoopstudy.dfs; import org.apache.hadoop.conf.configuration; import org.apache.hadoop.fs.fsdataoututstream; import org.apache.hadoop.fs.filestatus; import org.apache.hadoop.fs.filesystem; import org.apache.hadoop.fs.path; org.apache.hadoop.io.ioutils; import java.io.inputStream; import java.net.uri; public class test {public static void main (String [] args) lève une exception {chaîne uri = "hdfs: //9.111.254.189: 9000 /"; Configuration config = new Configuration (); FileSystem fs = filesystem.get (uri.create (uri), config); // répertorie tous les fichiers et répertoires sous le répertoire / user / fkong / sur hdfs filestatus [] status = fs.listStatus (nouveau chemin ("/ user / fkong")); pour (FileStatus Status: Status) {System.out.println (statut); } // Créez un fichier dans le répertoire / user / fkong de HDFS et écrivez une ligne de texte fsdataOutputStream os = fs.create (new Path ("/ user / fkong / test.log")); OS.Write ("Hello World!". GetBytes ()); os.flush (); os.close (); // affiche le contenu du fichier spécifié sous / user / fkong dans hdfs inputStream est = fs.open (new Path ("/ user / fkong / test.log")); Ioutils.copyBytes (IS, System.out, 1024, true); }} 3.2 Tester les travaux de MapReduce
Le code de test est relativement simple, comme suit:
package my.hadoopstudy.mapreduce; import org.apache.hadoop.conf.configuration; import org.apache.hadoop.fs.path; import org.apache.hadoop.io.intwitable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.job; importation; import; org.apache.hadoop.mapreduce.mapper; import org.apache.hadoop.mapreduce.reducer; import org.apache.hadoop.mapreduce.lib.input.fileinputt org.apache.hadoop.util.genericOptionsParser; import java.io.ioException; public class eventCount {public static class myMapper étend le mappeur <objet, text, texte, intrwitable> {private final static intwitable one = new intrwitable (1); Événement de texte privé = nouveau texte (); MAP public void (clé d'objet, valeur du texte, contexte de contexte) lève IOException, InterruptedException {int idx = value.toString (). indexof (""); if (idx> 0) {String e = value.toString (). substring (0, idx); event.set (e); context.write (événement, un); }}} classe statique publique MyReducer étend le réducteur <texte, intrwitable, texte, intrwitable> {private intwitable result = new intwitable (); public void réduction (clé de texte, valeurs iTable <ntwitable>, contexte de contexte) lève IOException, InterruptedException {int sum = 0; for (intwitable val: valeurs) {sum + = val.get (); } result.set (sum); context.write (clé, résultat); }} public static void main (String [] args) lève une exception {configuration conf = new Configuration (); String [] AUTHARGS = new GenericOptionsParser (conf, args) .getReMingingArgs (); if (otherArgs.Length <2) {System.err.println ("USAGE: EventCount <in> <out>"); System.exit (2); } Job Job = Job.getInstance (conf, "Event Count"); job.setjarbyclass (eventCount.class); job.setMapperClass (myMapper.class); job.setcombinerclass (myreducer.class); job.setReducerclass (myreducer.class); job.setOutputKeyClass (text.class); job.setOutputValuClass (intwitable.class); FileInputFormat.AddinputPath (Job, New Path (OtherArgs [0])); FileOutputFormat.SetOutputPath (travail, nouveau chemin (OtherArgs [1])); System.exit (Job.WaitForCompletion (true)? 0: 1); }}Exécutez la commande "Package MVN" pour générer le package JAR HadoopStudy-1.0-Snapshot.jar, et copiez le fichier JAR dans le répertoire d'installation Hadoop.
Ici, nous supposons que nous devons analyser les informations de l'événement dans plusieurs fichiers journaux pour compter le nombre d'événements, alors créez un répertoire et un fichier
/tmp/input/event.log.1
/tmp/input/event.log.2
/tmp/input/event.log.3
Parce que nous avons juste besoin de créer une colonne ici, le contenu de chaque fichier peut être le même, si le contenu est le suivant
Job_new ...
Job_new ...
Job_finish ...
Job_new ...
Job_finish ...
Puis copiez ces fichiers sur HDFS
La copie de code est la suivante: $ bin / hdfs dfs -put / tmp / input / user / fkong / entrée
Exécutez le travail MapReduce
Copiez le code comme suit: $ bin / hadoop jar hadoopstudy-1.0-snapshot.jar my.hadoopstudy.mapreduce.eventcount / user / fkong / input / user / fkong / oute
Afficher les résultats de l'exécution
La copie de code est la suivante: $ bin / hdfs dfs -cat / user / fkong / output / part-r-00000
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.