Não vou falar sobre o uso do Maven. Existem muitos online e não houve grandes mudanças ao longo dos anos. Aqui, apenas apresentarei como construir um ambiente de desenvolvimento do Hadoop.
1. Crie um projeto primeiro
Copie o código da seguinte
2. Em seguida, adicione os pacotes de dependência do Hadoop de Hadoop-Common, Hadoop-Client, Hadoop-HDFS no arquivo pom.xml. O arquivo pom.xml adicionado é o seguinte
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>my.hadoopstudy</groupId> <artifactId>hadoopstudy</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>hadoopstudy</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.5.1</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <TRATIFACTID> HADOOP-HDFS </ArtifactId> <Versão> 2.5.1 </versão> </dependency> <pendency> <voundiD> org.apache.hadoop </groupid> <stifactId> hadaop-client </stifactId> <versão> 2.5 </versuse> </dependency> <spendence> <Versão> 3.8.1 </versão> <cope> test </cope> </dependency> </dependências> </Project>
3. Teste
3.1 Primeiro, podemos testar o desenvolvimento de HDFs. Aqui, assumimos que nós clusters no artigo anterior do Hadoop, o código de classe é o seguinte
pacote my.hadoopstudy.dfs; importar org.apache.hadoop.conf.configuration; importar org.apache.hadoop.fs.fsdataoutputStream; importar org.apache.hadoop.fs.filestatus; import.apachehachehachehs.fathe.filmySystemsysysys.filestatus; import.apachehachehachehac.s.fathystemstemsystemstem; org.apache.hadoop.io.ioutils; importar java.io.inputStream; importar java.net.uri; public class Test {public static void main (string [] args) lança exceção {string uri = "hdfs: //9.11.254.189: 9000/"; Configuração config = new Configuration (); FileSystem fs = filesystem.get (uri.create (URI), config); // Liste todos os arquivos e diretórios no diretório/user/fkong/no HDFS FileStatus [] statuss = fs.listStatus (new Path ("/user/fkong")); para (Status do FileStatus: Statuses) {System.out.println (status); } // Crie um arquivo no diretório/user/fkong de hdfs e escreva uma linha de texto fsdataOutputStream OS = fs.create (new Path ("/user/fkong/test.log")); os.Write ("Hello World!". GetBytes ()); os.flush (); os.close (); // Mostra o conteúdo do arquivo especificado em/user/fkong no hdfs inputStream is = fs.open (novo caminho ("/user/fkong/test.log"); Ioutils.copybytes (IS, System.out, 1024, verdadeiro); }} 3.2 Testes MapReduce Jobs
O código de teste é relativamente simples, como segue:
pacote my.hadoopstudy.mapreduce; importar org.apache.hadoop.conf.configuration; importar org.apache.hadoop.fs.path; importar org.apache.hadoop.io.intwritable; importação org.apache.hadoop.text; importar.apache.hadoop.mapred.mapDered.hadoop.text; importar.apache.hadoop.map.map.mappheruns; org.apache.hadoop.mapreduce.mapper; importar org.apache.hadoop.mapreduce.rededer; importar org.apache.hadoop.mapreduce.lib.input.fileInputFormat; importação orgache.hadoop.mapreduce.lib.Lib.FileOutformat; org.apache.hadoop.util.genericOptionsParser; importar java.io.ioException; public class EventCount {classe estática pública mymapper estende mapeador <objeto, texto, texto, intwekty> {private final estático intwek One = new intWritable (1); Evento de texto privado = novo texto (); Public void mapa (chave do objeto, valor de texto, contexto de contexto) lança a ioexception, interruptedException {int idx = value.toString (). indexOf (""); if (idx> 0) {string e = value.toString (). Substring (0, idx); event.set (e); context.write (evento, um); }}} classe estática pública MyReduces estende o redutor <text, IntWritable, texto, IntWritable> {Private Intwrity Result = new IntWritable (); public void Reduce (tecla de texto, valores iterable <intwitrity>, contexto de contexto) lança a ioException, interruptedException {int sum = 0; for (intwitrity val: valores) {sum += val.get (); } resultado.set (soma); context.write (chave, resultado); }} public static void main (string [] args) lança Exceção {Configuration conf = new Configuration (); String [] outrosargs = new GenericOptionsParser (conf, args) .getRemAllAldArgs (); if (outrosargs.length <2) {System.err.println ("Uso: EventCount <Int> <A out>"); System.Exit (2); } Job job = job.getInstance (conf, "contagem de eventos"); Job.setJarbyClass (EventCount.class); job.setMapPerClass (mymapper.class); Job.SetCombinerclass (MyReducer.class); Job.SetReducClass (MyReducer.class); job.setOutputKeyClass (text.class); job.setOutputValuEclass (intwritable.class); FileInputFormat.addinputPath (Job, novo caminho (outrosargs [0])); FileOutputFormat.setOutputPath (Job, novo caminho (outrosargs [1])); System.Exit (Job.WaitForCompletion (true)? 0: 1); }}Execute o comando "MVN Package" para gerar o pacote JAR HadoopStudy-1.0-Snapshot.jar e copie o arquivo JAR para o diretório de instalação do Hadoop.
Aqui assumimos que precisamos analisar as informações do evento em vários arquivos de log para contar o número de eventos, então crie um diretório e arquivo
/tmp/input/event.log.1
/tmp/input/event.log.2
/tmp/input/event.log.3
Como precisamos apenas fazer uma coluna aqui, o conteúdo de cada arquivo pode ser o mesmo, se o conteúdo for o seguinte
JOB_NEW ...
JOB_NEW ...
Job_finish ...
JOB_NEW ...
Job_finish ...
Em seguida, copie esses arquivos para HDFS
A cópia de código é a seguinte: $ bin/hdfs dfs -put/tmp/input/user/fkong/input
Execute o MapReduce Job
Copie o código da seguinte forma: $ bin/hadoop jar hadoopstudy-1.0-snapshot.jar my.hadoopstudy.mapreduce.eventCount/user/fkong/input/user/fkong/output
Exibir resultados de execução
A cópia do código é a seguinte: $ bin/hdfs dfs -cat/user/fkong/output/Part-r-00000
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.