Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Saiba como usar o Apache Maven para criar um aplicativo MapReduce baseado em Java e executá-lo com o Apache Hadoop no Azure HDInsight.
Pré-requisitos
Apache Maven instalado corretamente de acordo com o Apache. Maven é um sistema de construção de projetos para projetos Java.
Configurar o ambiente de desenvolvimento
O ambiente usado para este artigo foi um computador executando o Windows 10. Os comandos foram executados em um prompt de comando, e os vários arquivos foram editados com o bloco de notas. Modifique de acordo com o seu ambiente.
Em um prompt de comando, digite os comandos abaixo para criar um ambiente de trabalho:
IF NOT EXIST C:\HDI MKDIR C:\HDI
cd C:\HDI
Criar um projeto Maven
Digite o seguinte comando para criar um projeto Maven chamado wordcountjava:
mvn archetype:generate -DgroupId=org.apache.hadoop.examples -DartifactId=wordcountjava -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=falseEste comando cria um diretório com o nome especificado pelo
artifactIDparâmetro (wordcountjava neste exemplo.) Este diretório contém os seguintes itens:-
pom.xml- O Project Object Model (POM) que contém informações e detalhes de configuração usados para construir o projeto. - src\main\java\org\apache\hadoop\examples: contém o código do aplicativo.
- src\test\java\org\apache\hadoop\examples: contém testes para seu aplicativo.
-
Remova o código de exemplo gerado. Exclua os arquivos
AppTest.javade teste e aplicativo gerados eApp.javadigitando os comandos abaixo:cd wordcountjava DEL src\main\java\org\apache\hadoop\examples\App.java DEL src\test\java\org\apache\hadoop\examples\AppTest.java
Atualizar o modelo de objeto do projeto
Para obter uma referência completa do arquivo pom.xml, consulte https://maven.apache.org/pom.html. Abra pom.xml digitando o comando abaixo:
notepad pom.xml
Adicionar dependências
Em pom.xml, adicione o seguinte texto na <dependencies> seção:
<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>
Isso define as bibliotecas necessárias (listadas dentro do <artifactId>) com uma versão específica (listada dentro da <versão>). Em tempo de compilação, essas dependências são baixadas do repositório Maven padrão. Você pode usar a pesquisa do repositório Maven para ver mais.
O <scope>provided</scope> informa ao Maven que essas dependências não devem ser empacotadas com o aplicativo, pois são fornecidas pelo cluster HDInsight em tempo de execução.
Importante
A versão usada deve corresponder à versão do Hadoop presente no cluster. Para obter mais informações sobre versões, consulte o documento de controle de versão do componente HDInsight .
Configuração de compilação
Os plug-ins do Maven permitem que você personalize os estágios de construção do projeto. Esta seção é usada para adicionar plug-ins, recursos e outras opções de configuração de compilação.
Adicione o seguinte código ao pom.xml ficheiro e, em seguida, guarde e feche o ficheiro. Esse texto deve estar dentro das <project>...</project> tags no arquivo, por exemplo, entre </dependencies> e </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>
Esta seção configura o Apache Maven Compiler Plugin e o Apache Maven Shade Plugin. O plug-in do compilador é usado para compilar a topologia. O plug-in de sombra é usado para evitar a duplicação de licenças no pacote JAR criado pelo Maven. Este plug-in é usado para evitar um erro de "arquivos de licença duplicados" em tempo de execução no cluster HDInsight. Usar maven-shade-plugin com a ApacheLicenseResourceTransformer implementação evita o erro.
O maven-shade-plugin também produz um uber jar que contém todas as dependências exigidas pelo aplicativo.
Guarde o ficheiro pom.xml.
Criar o aplicativo MapReduce
Digite o comando abaixo para criar e abrir um novo arquivo
WordCount.java. Selecione Sim no prompt para criar um novo arquivo.notepad src\main\java\org\apache\hadoop\examples\WordCount.javaEm seguida, copie e cole o código Java abaixo no novo arquivo. Em seguida, feche o arquivo.
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); } }Observe que o nome do pacote é
org.apache.hadoop.examplese o nome da classe éWordCount. Você usa esses nomes ao enviar o trabalho MapReduce.
Compilar e empacotar o aplicativo
wordcountjava No diretório, use o seguinte comando para criar um arquivo JAR que contenha o aplicativo:
mvn clean package
Este comando limpa todos os artefatos de compilação anteriores, baixa todas as dependências que ainda não foram instaladas e, em seguida, cria e empacota o aplicativo.
Quando o comando terminar, o wordcountjava/target diretório contém um arquivo chamado wordcountjava-1.0-SNAPSHOT.jar.
Observação
O wordcountjava-1.0-SNAPSHOT.jar arquivo é um uberjar, que contém não apenas o trabalho WordCount, mas também as dependências que o trabalho necessita durante a execução.
Carregue o JAR e execute trabalhos (SSH)
Os passos seguintes utilizam scp para copiar o JAR para o nó principal do seu Apache HBase no cluster HDInsight. O ssh comando é então usado para se conectar ao cluster e executar o exemplo diretamente no nó principal.
Carregue o ficheiro jar para o cluster. Substitua
CLUSTERNAMEpelo nome do cluster HDInsight e digite o seguinte comando:scp target/wordcountjava-1.0-SNAPSHOT.jar sshuser@CLUSTERNAME-ssh.azurehdinsight.net:Conecte-se ao cluster. Substitua
CLUSTERNAMEpelo nome do cluster HDInsight e digite o seguinte comando:ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.netNa sessão SSH, use o seguinte comando para executar o aplicativo MapReduce:
yarn jar wordcountjava-1.0-SNAPSHOT.jar org.apache.hadoop.examples.WordCount /example/data/gutenberg/davinci.txt /example/data/wordcountoutEste comando inicia o aplicativo WordCount MapReduce. O arquivo de entrada é
/example/data/gutenberg/davinci.txt, e o diretório de saída é/example/data/wordcountout. O arquivo de entrada e a saída são armazenados no armazenamento padrão do cluster.Quando o trabalho for concluído, use o seguinte comando para exibir os resultados:
hdfs dfs -cat /example/data/wordcountout/*Você deve receber uma lista de palavras e contagens, com valores semelhantes ao seguinte texto:
zeal 1 zelus 1 zenith 2
Próximos passos
Neste documento, você aprendeu como desenvolver um trabalho Java MapReduce. Consulte os documentos a seguir para obter outras maneiras de trabalhar com o HDInsight.