Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Zjistěte, jak pomocí Apache Mavenu vytvořit aplikaci MapReduce založenou na Javě a pak ji spustit pomocí Apache Hadoopu ve službě Azure HDInsight.
Požadavky
Apache Maven je správně nainstalovaný podle Apache. Maven je systém sestavení projektu pro projekty Java.
Konfigurace vývojového prostředí
Prostředí použité pro tento článek bylo počítač s Windows 10. Příkazy se spustily na příkazovém řádku a různé soubory byly upraveny pomocí Poznámkového bloku. Odpovídajícím způsobem upravte své prostředí.
Na příkazovém řádku zadejte následující příkazy a vytvořte pracovní prostředí:
IF NOT EXIST C:\HDI MKDIR C:\HDI
cd C:\HDI
Vytvoření projektu Maven
Zadáním následujícího příkazu vytvořte projekt Maven s názvem wordcountjava:
mvn archetype:generate -DgroupId=org.apache.hadoop.examples -DartifactId=wordcountjava -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=falseTento příkaz vytvoří adresář s názvem zadaným
artifactIDparametrem (wordcountjava v tomto příkladu.) Tento adresář obsahuje následující položky:-
pom.xml– Projektový objektový model (POM), který obsahuje informace a podrobnosti konfigurace použité k sestavení projektu. - src\main\java\org\apache\hadoop\examples: Obsahuje kód aplikace.
- src\test\java\org\apache\hadoop\examples: Obsahuje testy pro vaši aplikaci.
-
Odeberte vygenerovaný ukázkový kód. Odstraňte vygenerované soubory
AppTest.javatestů a aplikací aApp.javazadáním následujících příkazů:cd wordcountjava DEL src\main\java\org\apache\hadoop\examples\App.java DEL src\test\java\org\apache\hadoop\examples\AppTest.java
Aktualizace objektového modelu projektu
Úplný odkaz na soubor pom.xml viz https://maven.apache.org/pom.html. Otevřete pom.xml zadáním následujícího příkazu:
notepad pom.xml
Přidejte závislosti
Do pom.xmloddílu <dependencies> přidejte následující text:
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-examples</artifactId>
<version>2.7.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-common</artifactId>
<version>2.7.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.3</version>
<scope>provided</scope>
</dependency>
Tím se definují požadované knihovny (uvedené v id <artefaktu>) s konkrétní verzí (uvedenou ve <verzi>). V době kompilace se tyto závislosti stáhnou z výchozího úložiště Maven. K zobrazení dalších informací můžete použít vyhledávání úložiště Maven .
<scope>provided</scope> říká Mavenu, že tyto závislosti by se neměly balit s aplikací, protože jsou poskytovány clusterem HDInsight během běhu.
Důležité
Použitá verze by měla odpovídat verzi Hadoopu, která je v clusteru. Další informace o verzích najdete v dokumentu verzování komponent HDInsight.
Konfigurace sestavení
Moduly plug-in Maven umožňují přizpůsobit fáze sestavení projektu. Tato část slouží k přidání pluginů, zdrojů a dalších možností konfigurace sestavení.
Do souboru přidejte následující kód pom.xml a pak soubor uložte a zavřete. Tento text musí být uvnitř <project>...</project> značek v souboru, například mezi </dependencies> a </project>.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer">
</transformer>
</transformers>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
Tato část konfiguruje plug-in Apache Maven Compiler a plug-in Apache Maven Shade. Modul plug-in kompilátoru slouží ke kompilaci topologie. Modul plug-in shade slouží k zabránění duplikování licencí v balíčku JAR vytvořeném mavenem. Tento modul plug-in slouží k zabránění chybě duplicitních licenčních souborů během běhu v clusteru HDInsight. Použití pluginu maven-shade-plugin s ApacheLicenseResourceTransformer implementací zabraňuje chybě.
Modul plug-in maven-shade také vytvoří soubor uber jar, který obsahuje všechny závislosti vyžadované aplikací.
Uložte soubor pom.xml.
Vytvoření aplikace MapReduce
Zadáním následujícího příkazu vytvořte a otevřete nový soubor
WordCount.java. Výběrem možnosti Ano na příkazovém řádku vytvořte nový soubor.notepad src\main\java\org\apache\hadoop\examples\WordCount.javaPak zkopírujte a vložte níže uvedený kód Java do nového souboru. Potom soubor zavřete.
package org.apache.hadoop.examples; import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.util.GenericOptionsParser; public class WordCount { public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{ private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Object key, Text value, Context context ) throws IOException, InterruptedException { StringTokenizer itr = new StringTokenizer(value.toString()); while (itr.hasMoreTokens()) { word.set(itr.nextToken()); context.write(word, one); } } } public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> { private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable<IntWritable> values, Context context ) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } result.set(sum); context.write(key, result); } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); if (otherArgs.length != 2) { System.err.println("Usage: wordcount <in> <out>"); System.exit(2); } Job job = new Job(conf, "word count"); job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(otherArgs[0])); FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); } }Všimněte si, že název balíčku je
org.apache.hadoop.examplesa název třídy jeWordCount. Tyto názvy použijete při odeslání úlohy MapReduce.
Sestavení a zabalení aplikace
wordcountjava Z adresáře pomocí následujícího příkazu sestavte soubor JAR, který obsahuje aplikaci:
mvn clean package
Tento příkaz vyčistí všechny předchozí artefakty sestavení, stáhne všechny závislosti, které ještě nebyly nainstalovány, a pak sestaví a zabalí aplikaci.
Po dokončení wordcountjava/target příkazu obsahuje adresář soubor s názvem wordcountjava-1.0-SNAPSHOT.jar.
Poznámka:
Soubor wordcountjava-1.0-SNAPSHOT.jar je uberjar, který obsahuje nejen úlohu WordCount, ale také závislosti, které úloha vyžaduje za běhu.
Nahrání souboru JAR a spuštění úloh (SSH)
Následující postup využívá scp k zkopírování souboru JAR do hlavního uzlu vašeho Apache HBase v clusteru HDInsight. Příkaz ssh se pak použije k připojení ke clusteru a spuštění příkladu přímo na hlavním uzlu.
Nahrajte soubor JAR do clusteru. Nahraďte
CLUSTERNAMEnázvem clusteru HDInsight a zadejte následující příkaz:scp target/wordcountjava-1.0-SNAPSHOT.jar sshuser@CLUSTERNAME-ssh.azurehdinsight.net:Připojte se ke clusteru. Nahraďte
CLUSTERNAMEnázvem clusteru HDInsight a zadejte následující příkaz:ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.netZ relace SSH spusťte aplikaci MapReduce pomocí následujícího příkazu:
yarn jar wordcountjava-1.0-SNAPSHOT.jar org.apache.hadoop.examples.WordCount /example/data/gutenberg/davinci.txt /example/data/wordcountoutTento příkaz spustí aplikaci WordCount MapReduce. Vstupní soubor je
/example/data/gutenberg/davinci.txta výstupní adresář je/example/data/wordcountout. Vstupní soubor i výstup se ukládají do výchozího úložiště clusteru.Po dokončení úlohy zobrazte výsledky pomocí následujícího příkazu:
hdfs dfs -cat /example/data/wordcountout/*Měli byste obdržet seznam slov a počtů s hodnotami podobnými následujícímu textu:
zeal 1 zelus 1 zenith 2
Další kroky
V tomto dokumentu jste se naučili, jak vyvíjet úlohu v rámci Java MapReduce. Další způsoby práce se službou HDInsight najdete v následujících dokumentech.