Anwendung von Hadoop-Zählern und Datenbereinigung

Anwendung von Hadoop-Zählern und Datenbereinigung

Datenbereinigung (ETL)

Vor dem Ausführen des MapReduce-Kernprogramms des Unternehmens müssen häufig zunächst die Daten bereinigt werden, um Daten zu entfernen, die nicht den Benutzeranforderungen entsprechen. Für den Bereinigungsvorgang ist häufig nur die Ausführung des Mapper-Programms und nicht des Reduce-Programms erforderlich.

1. brauchen

Entfernen Sie die Protokolle, deren Feldlänge kleiner oder gleich 11 ist.

(1) Eingabedaten

web.log

(2) Erwartete Produktionsdaten

Die Länge jedes Zeilenfeldes ist größer als 11

2. Bedarfsanalyse

Die Eingabedaten müssen gemäß den Regeln in der Map-Phase gefiltert und bereinigt werden.

3. Implementierungscode

(1) Schreiben Sie die LogMapper-Klasse

Paket com.atguigu.mapreduce.weblog;
importiere java.io.IOException;
importiere org.apache.hadoop.io.LongWritable;
importiere org.apache.hadoop.io.NullWritable;
importiere org.apache.hadoop.io.Text;
importiere org.apache.hadoop.mapreduce.Mapper;
öffentliche Klasse LogMapper erweitert Mapper<LongWritable, Text, Text, NullWritable>{
  Text k = neuer Text();
  @Überschreiben
  geschützte void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
   // 1 1 Datenzeile abrufen String line = value.toString();
   // 2 Protokoll analysieren boolesches Ergebnis = parseLog(Zeile,Kontext);
   // 3 Das Log ist unzulässig und wird beendet, wenn (!result) {
     zurückkehren;
   }
   // 4 Taste setzen
   k.set(Zeile);
   // 5 Daten schreiben context.write(k, NullWritable.get());
  }
  // 2 Protokoll analysieren private boolean parseLog(String line, Context context) {
   // 1 Achsenabschnitt String[] Felder = line.split(" ");
   // 2 Protokolle mit einer Länge von mehr als 11 sind zulässig, wenn (Felder.Länge > 11) {
     // Systemzähler context.getCounter("map", "true").increment(1);
     gibt true zurück;
   }anders {
     Kontext.getCounter("map", "false").Inkrement(1);
     gibt false zurück;
   }
  }
}

(2) Schreiben Sie die LogDriver-Klasse

Paket com.atguigu.mapreduce.weblog;
importiere org.apache.hadoop.conf.Configuration;
importiere org.apache.hadoop.fs.Path;
importiere org.apache.hadoop.io.NullWritable;
importiere org.apache.hadoop.io.Text;
importiere org.apache.hadoop.mapreduce.Job;
importiere org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
importiere org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
öffentliche Klasse LogDriver {
  öffentliche statische void main(String[] args) wirft Exception {
// Die Eingabe- und Ausgabepfade müssen entsprechend den tatsächlichen Eingabe- und Ausgabepfaden auf Ihrem Computer eingestellt werden. args = new String[] { "e:/input/inputlog", "e:/output1" };
   // 1 Jobinformationen abrufen Configuration conf = new Configuration();
   Job job = Job.getInstance(conf);
   // 2 Laden Sie das JAR-Paket job.setJarByClass(LogDriver.class);
   // 3 zugehörige Karten
   job.setMapperClass(LogMapper.class);
   // 4 Legen Sie den endgültigen Ausgabetyp fest job.setOutputKeyClass(Text.class);
   : job.setOutputValueClass(NullWritable.class);
   // Setze die Anzahl der Reducetasks auf 0
   : Job.setNumReduceTasks(0);
   // 5 Eingabe- und Ausgabepfade festlegen FileInputFormat.setInputPaths(job, new Path(args[0]));
   FileOutputFormat.setOutputPath(job, neuer Pfad(args[1]));
   // 6 Job übermitteln.waitForCompletion(true);
  }
}

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • Hadoop NameNode-Föderation
  • Erläuterung der neuen Funktion von Hadoop 2.X, der Papierkorbfunktion
  • Ein praktisches Tutorial zum Erstellen einer vollständig verteilten Hadoop-Umgebung unter Ubuntu 16.4
  • Hadoop 2.x vs. 3.x 22-Punkte-Vergleich, Hadoop 3.x Verbesserungen gegenüber 2.x
  • So erstellen Sie eine Hadoop-Clusterumgebung mit Ubuntu Docker
  • Detaillierte Schritte zum Erstellen von Hadoop in CentOS
  • Beispielcode für die Wortzählung in Hadoop
  • Java/Web ruft Hadoop für MapReduce-Beispielcode auf
  • Erläuterung des Arbeitsmechanismus von Namenode und SecondaryNameNode in Hadoop

<<:  Beispiel für die Verwendung von JSX zur Entwicklung einer Markup-Komponente (Front-End-Komponentenbildung)

>>:  Detaillierte Erklärung zur Formatierung von Zahlen in MySQL

Artikel empfehlen

Native JavaScript-Karussell-Implementierungsmethode

In diesem Artikel wird die Implementierungsmethod...

Zusammenfassung der Namenskonventionen für HTML und CSS

CSS-Benennungsregeln Header: Header Inhalt: Inhalt...

Lösung für das Vue-Datenzuweisungsproblem

Lassen Sie mich ein Problem zusammenfassen, mit d...

Natives JS zum Erzielen eines nahtlosen Karusselleffekts

Native js realisiert den Karusselleffekt (nahtlos...

Detaillierte Erklärung des Unterschieds zwischen Vue-Lebenszyklus

Lebenszyklusklassifizierung Jede Komponente von V...

Erkennen Sie den CSS-Ladeeffekt nach dem Klicken auf die Schaltfläche

Da es in dem Produkt meiner Firma eine Schaltfläc...

UTF-8- und GB2312-Webkodierung

In letzter Zeit haben mich viele Studenten zur Ko...

So verwenden Sie den Fuser-Befehl im Linux-System

Was ist Fuser Command? Der Befehl fuser ist ein s...

Der praktische Prozess des Login-Status-Managements im vuex-Projekt

Inhaltsverzeichnis Werkzeug: Anmeldeszenario: übe...

CSS3-Animation – Erläuterung der Funktion „Steps“

Als ich mir in letzter Zeit einige CSS3-Animation...

CSS Sticky Footer-Implementierungscode

Dieser Artikel stellt den Implementierungscode fü...

So verweisen Sie direkt auf Vue und Element-UI in HTML

Der Code sieht folgendermaßen aus: <!DOCTYPE h...