MapReduce - API
In questo capitolo daremo uno sguardo ravvicinato alle classi e ai loro metodi coinvolti nelle operazioni di programmazione MapReduce. Ci concentreremo principalmente su quanto segue:
- Interfaccia JobContext
- Classe di lavoro
- Classe Mapper
- Classe riduttore
Interfaccia JobContext
L'interfaccia JobContext è la super interfaccia per tutte le classi, che definisce diversi lavori in MapReduce. Offre una visualizzazione di sola lettura del lavoro fornito alle attività mentre sono in esecuzione.
Le seguenti sono le interfacce secondarie dell'interfaccia JobContext.
S.No. | Descrizione della sottointerfaccia |
---|---|
1. | MapContext<KEYIN, VALUEIN, KEYOUT, VALUEOUT> Definisce il contesto assegnato al Mapper. |
2. | ReduceContext<KEYIN, VALUEIN, KEYOUT, VALUEOUT> Definisce il contesto passato al Reducer. |
La classe Job è la classe principale che implementa l'interfaccia JobContext.
Classe di lavoro
La classe Job è la classe più importante nell'API MapReduce. Consente all'utente di configurare il lavoro, inviarlo, controllarne l'esecuzione e interrogare lo stato. I metodi set funzionano solo fino a quando il lavoro non viene inviato, dopodiché generano un'eccezione IllegalStateException.
Normalmente, l'utente crea l'applicazione, descrive i vari aspetti del lavoro, quindi invia il lavoro e ne monitora l'avanzamento.
Ecco un esempio di come inviare un lavoro:
// Create a new Job
Job job = new Job(new Configuration());
job.setJarByClass(MyJob.class);
// Specify various job-specific parameters
job.setJobName("myjob");
job.setInputPath(new Path("in"));
job.setOutputPath(new Path("out"));
job.setMapperClass(MyJob.MyMapper.class);
job.setReducerClass(MyJob.MyReducer.class);
// Submit the job, then poll for progress until the job is complete
job.waitForCompletion(true);
Costruttori
Di seguito è riportato il riepilogo del costruttore della classe di lavoro.
S.No | Riepilogo del costruttore |
---|---|
1 | Job() |
2 | Job(Configurazione conf) |
3 | Job(Configurazione conf, String jobName) |
Metodi
Alcuni dei metodi importanti della classe Job sono i seguenti:
S.No | Descrizione del metodo |
---|---|
1 | getJobName() Nome lavoro specificato dall'utente. |
2 | getJobState() Restituisce lo stato corrente del lavoro. |
3 | isComplete() Controlla se il lavoro è terminato o meno. |
4 | setInputFormatClass() Imposta InputFormat per il lavoro. |
5 | setJobName(String name) Imposta il nome del lavoro specificato dall'utente. |
6 | setOutputFormatClass() Imposta il formato di output per il lavoro. |
7 | setMapperClass(Class) Imposta il Mapper per il lavoro. |
8 | setReducerClass(Class) Imposta il riduttore per il lavoro. |
9 | setPartitionerClass(Class) Imposta il partizionatore per il lavoro. |
10 | setCombinerClass(Class) Imposta il Combiner per il lavoro. |
Classe Mapper
La classe Mapper definisce il lavoro Mappa. Mappe di input di coppie chiave-valore in un insieme di coppie chiave-valore intermedie. Le mappe sono le singole attività che trasformano i record di input in record intermedi. I record intermedi trasformati non devono essere dello stesso tipo dei record di input. Una data coppia di input può mappare a zero oa molte coppie di output.
Metodo
mapè il metodo più importante della classe Mapper. La sintassi è definita di seguito:
map(KEYIN key, VALUEIN value, org.apache.hadoop.mapreduce.Mapper.Context context)
Questo metodo viene chiamato una volta per ogni coppia chiave-valore nella suddivisione di input.
Classe riduttore
La classe Reducer definisce il lavoro Reduce in MapReduce. Riduce un insieme di valori intermedi che condividono una chiave a un insieme di valori più piccolo. Le implementazioni di Reducer possono accedere alla configurazione per un lavoro tramite il metodo JobContext.getConfiguration (). Un Riduttore ha tre fasi principali: Mescola, Ordina e Riduci.
Shuffle - Il Reducer copia l'output ordinato da ogni Mapper utilizzando HTTP attraverso la rete.
Sort- Il framework ordina gli input del Reducer in base alle chiavi (poiché diversi Mapper possono avere in output la stessa chiave). Le fasi shuffle e sort avvengono simultaneamente, ovvero, mentre gli output vengono recuperati, vengono uniti.
Reduce - In questa fase viene chiamato il metodo reduce (Object, Iterable, Context) per ogni <chiave, (raccolta di valori)> negli input ordinati.
Metodo
reduceè il metodo più importante della classe Reducer. La sintassi è definita di seguito:
reduce(KEYIN key, Iterable<VALUEIN> values, org.apache.hadoop.mapreduce.Reducer.Context context)
Questo metodo viene chiamato una volta per ogni chiave nella raccolta di coppie chiave-valore.