Was sind die Eingabe- und Ausgabedatenformate von MapReduce? Bitte geben Sie ein Beispiel.

Was sind die Eingabe- und Ausgabedatenformate von MapReduce? Bitte geben Sie ein Beispiel.

Die Eingabe- und Ausgabedatenformate von MapReduce werden in Hadoop normalerweise in Form von Schlüssel-Wert-Paaren ausgedrückt. Ein Schlüssel-Wert-Paar ist eine allgemeine Datenstruktur, die aus einem Schlüssel und einem entsprechenden Wert besteht. In MapReduce werden die Eingabedaten in mehrere Schlüssel-Wert-Paare unterteilt, und nach der Verarbeitung in der Map-Phase besteht die Ausgabe ebenfalls aus einer Reihe von Schlüssel-Wert-Paaren.

Hadoop bietet eine Vielzahl von Eingabe- und Ausgabedatenformaten. Im Folgenden werden einige häufig verwendete Formate vorgestellt und entsprechende Codebeispiele angegeben.

  1. TextInputFormat und TextOutputFormat: Dies sind die am häufigsten verwendeten Eingabe- und Ausgabeformate in Hadoop. TextInputFormat unterteilt die Eingabedatei für jede Zeile in ein Schlüssel-Wert-Paar, wobei der Schlüssel der Offset der Zeile und der Wert der Inhalt der Zeile ist. TextOutputFormat gibt Schlüssel-Wert-Paare im Textformat in eine Datei aus.

Hier ist ein Beispielcode mit TextInputFormat und TextOutputFormat:

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class TextInputOutputExample {
    
    

    public static void main(String[] args) throws Exception {
    
    
        // 创建一个新的MapReduce作业
        Job job = Job.getInstance();
        job.setJarByClass(TextInputOutputExample.class);
        job.setJobName("TextInputOutputExample");

        // 设置输入文件路径和输入格式
        FileInputFormat.addInputPath(job, new Path(args[0]));
        job.setInputFormatClass(TextInputFormat.class);

        // 设置输出文件路径和输出格式
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        job.setOutputFormatClass(TextOutputFormat.class);

        // 设置Mapper类和Reducer类
        job.setMapperClass(MapperClass.class);
        job.setReducerClass(ReducerClass.class);

        // 设置输出键值对类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(LongWritable.class);

        // 提交作业并等待完成
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

Im obigen Code erstellen wir einen neuen MapReduce-Job und legen den Namen und die Hauptklasse des Jobs fest. Anschließend legen wir den Pfad der Eingabedatei mit der Methode addInputPath der Klasse FileInputFormat fest und verwenden die Klasse TextInputFormat als Eingabeformat. Verwenden Sie die setOutputPath-Methode der FileOutputFormat-Klasse, um den Ausgabedateipfad festzulegen, und verwenden Sie die TextOutputFormat-Klasse als Ausgabeformat.

  1. KeyValueTextInputFormat und KeyValueTextOutputFormat: Diese beiden Formate ähneln TextInputFormat und TextOutputFormat, Schlüssel und Werte werden jedoch durch Tabulatoren oder Leerzeichen getrennt. Schlüssel und Werte können Zeichenfolgen beliebiger Art sein.

Hier ist ein Beispielcode mit KeyValueTextInputFormat und KeyValueTextOutputFormat:

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.input.KeyValueTextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.KeyValueTextOutputFormat;

public class KeyValueTextInputOutputExample {
    
    

    public static void main(String[] args) throws Exception {
    
    
        // 创建一个新的MapReduce作业
        Job job = Job.getInstance();
        job.setJarByClass(KeyValueTextInputOutputExample.class);
        job.setJobName("KeyValueTextInputOutputExample");

        // 设置输入文件路径和输入格式
        FileInputFormat.addInputPath(job, new Path(args[0]));
        job.setInputFormatClass(KeyValueTextInputFormat.class);

        // 设置输出文件路径和输出格式
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        job.setOutputFormatClass(KeyValueTextOutputFormat.class);

        // 设置Mapper类和Reducer类
        job.setMapperClass(MapperClass.class);
        job.setReducerClass(ReducerClass.class);

        // 设置输出键值对类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);

        // 提交作业并等待完成
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

Im obigen Code verwenden wir die Klasse KeyValueTextInputFormat als Eingabeformat und die Klasse KeyValueTextOutputFormat als Ausgabeformat.

Zusätzlich zu den in den obigen Beispielen genannten Eingabe- und Ausgabeformaten bietet Hadoop auch einige andere häufig verwendete Formate an, z. B. SequenceFileInputFormat und SequenceFileOutputFormat, AvroKeyInputFormat und AvroKeyOutputFormat usw. Je nach spezifischem Bedarf und Datentyp können geeignete Ein- und Ausgabeformate ausgewählt werden.

Durch die Verwendung unterschiedlicher Ein- und Ausgabeformate kann MapReduce unterschiedliche Datentypen verarbeiten und die Ergebnisse im passenden Format ausgeben. Dies macht MapReduce flexibler und effizienter bei der Verarbeitung großer Datenmengen.

おすすめ

転載: blog.csdn.net/qq_51447496/article/details/132747622