2012-06-18 10 views
6

Mi dispiace se questa è una domanda sciocca, ma non sono riuscito a trovare una risposta con una ricerca su Google. Come posso capire il tipo LongWritable? Che cos'è? Qualcuno può collegarsi a uno schema o altra pagina utile.Understanding LongWritable

+3

[Questo] (http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/io/LongWritable.html) e [questo] (http://www.google. co.in/#hl=en&sclient=psy-ab&q=understanding+longwritable+hadoop+example&oq=understanding+longwritable+hadoop+example&aq=f&aqi=&aql=&gs_l=serp.3...3375.6585.0.7061.18.17.1.0.0.12 .309.3777.0j4j12j1.17.0 ... 0.0.EABizvklF9A & pbx = 1 & bav = on.2, o.r_gc.r_pw.r_qf., Cf.osb & fp = 1183525b389c0f4f & biw = 1366 & bih = 704) dovrebbe essere sufficiente? –

+0

Oh, grazie, aiuto libro "Hadoop in azione". Quindi, questo è solo il tipo Long per hadoop :) – Mijatovic

risposta

16

Hadoop deve essere in grado di serializzare i dati dentro e fuori i tipi Java tramite gli oggetti DataInput e DataOutput (I flussi di IO in genere). Le classi scrivibili lo fanno implementando due metodi `write (DataOut) e readField (DataInput).

In particolare LongWritable è una classe Writable che avvolge un java lungo.

La maggior parte delle volte (in particolare solo all'inizio) è possibile sostituire mentalmente LongWritable ->Long, ovvero è solo un numero. Se si arriva a definire i propri tipi di dati si inizierà a diventare ogni familiarità con l'implementazione dell'interfaccia scrivibile:

che sembra qualche cosa come:

public interface Writable { 

     public void write(DataOutput out) throws IOException; 

     public void readFields(DataInput in) throws IOException; 
} 
3

La classe Mapper è un tipo generico, con quattro di tipo formale parametri che specificano la chiave di input, il valore di input, la chiave di output e i tipi di valore di output della funzione mappa.

public class MaxTemperatureMapper 
    extends Mapper<LongWritable, Text, Text, IntWritable> { 
    @Override 
    public void map(LongWritable key, Text value, Context context) 
           throws IOException, InterruptedException { 

    } 
    @Override 
    public void reduce(Text key, Iterable<IntWritable> values, Context context) 
    throws IOException, InterruptedException 
    { 
    } 

} 

Per l'esempio di codice, la chiave di ingresso è un offset intero lungo, il valore di ingresso è una riga di testo. la chiave di uscita è intera e il valore di uscita è un numero intero. Anziché utilizzare i tipi Java predefiniti, Hadoop fornisce il proprio set di tipi di base ottimizzati per la serializzazione di rete. Questi si trovano nel pacchetto org.apache.hadoop.io.

Qui viene utilizzato LongWritable, che corrisponde a Java Long, Text (come Java String) e IntWritable (come Java Integer).

0

Da Apache documentazione page,

Writable è descritto come:

oggetto serializzabile che implementa una semplice, efficiente, protocollo serializzazione, basato su DataInput e DataOutput.

LongWritable è A WritableComparable per i lunghi.

Need for Writables:

In Hadoop, comunicazione tra processi è stato costruito con le chiamate di procedura remota (RPC). Il protocollo RPC usa la serializzazione per rendere il messaggio in un flusso binario al mittente e verrà deserializzato nel messaggio originale dal flusso binario al ricevitore.

La serializzazione Java presenta molti svantaggi in termini di prestazioni ed efficienza. La serializzazione Java è molto più lenta dell'utilizzo negli archivi di memoria e tende ad espandere significativamente le dimensioni dell'oggetto. Anche la serializzazione Java crea molta spazzatura.

riferiscono a queste due post:

dzone articolo

https://softwareengineering.stackexchange.com/questions/191269/java-serialization-advantages-and-disadvantages-use-or-avoid

Per efficacia Hadoop, il processo di serializzazione/de-serializzazione Occorre ottimizzare perché enorme numero di chiamate remote accadere tra i nodi nel cluster. So the serialization format should be fast, compact, extensible and interoperable. Per questo motivo, il framework Hadoop ha creato proprie classi IO per sostituire i tipi di dati primitivi java. per esempio. IntWritbale per int, LongWritable per long, Text per String ecc

È possibile ottenere ulteriori informazioni se si fa riferimento a "Hadoop la guida definitiva" quarta edizione.

Problemi correlati