2016-05-25 12 views
0

Kann ich Ausgaben in mehrere Tabellen in HBase von meinem Reduzierer schreiben? Ich habe verschiedene Blog-Posts durchsucht, aber ich konnte keinen Weg finden, selbst mit MultiTableOutputFormat.Ausgabe an mehrere Tabellen von REDUCER schreiben

ich dies genannt: Write to multiple tables in HBASE

aber nicht in der Lage, die Signatur-API für context.write Anruf herauszufinden.

Reducer Code:

public class MyReducer extends TableReducer<Text, Result, Put> { 

    private static final Logger logger = Logger.getLogger(MyReducer.class); 

    @SuppressWarnings("deprecation") 
    @Override 
    protected void reduce(Text key, Iterable<Result> data, Context context) throws IOException, InterruptedException { 
     logger.info("Working on ---> " + key.toString()); 
     for (Result res : data) { 
      Put put = new Put(res.getRow()); 
      KeyValue[] raw = res.raw(); 
      for (KeyValue kv : raw) { 
       put.add(kv); 
      } 

      context.write(obj, put); 
      **// I dont know how to give table name here.** 

     } 
    } 
} 

Antwort

1

die Tabellennamen zu identifizieren, sollten Sie die Tabellennamen als Schlüssel zur context.write(key, put) Methode übergeben:

ImmutableBytesWritable key = new ImmutableBytesWritable(Bytes.toBytes("tableName")); 
context.write(key, put); 

Aber wenn Sie eine große Menge an Daten laden über MapReduce Job sofort, dann könnte es für Sie interessant sein, MultiTableHFileOutputFormat zu verwenden. Dieses Ausgabeformat erzeugt HFiles für jede HBase Tabelle, die Sie brauchen, und dann können Sie ganz einfach diese Dateien mit LoadIncrementalHFiles Tool laden:

hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /tmp/multiTableJobResult hbaseTable 

Sie können mehr über MultiTableHFileOutputFormat im Artikel lesen: http://tech.adroll.com/blog/data/2014/07/15/multi-table-bulk-import.html

+1

Ja, das ist richtig (+ 1) Wir müssen den Tisch als Schlüssel durch den oben genannten Weg führen. Wenn Sie über Mapper schreiben, dann ist unten der Weg beschrieben. // rowKey ist der von lineBytes generierte hbase rowKey \t \t Put put = neu Put (rowKey); \t \t // Erstellen Sie Ihr KeyValue-Objekt \t \t put.add (kv); \t \t context.write ("Aktionen", setzen); // schreibe in die Aktionstabelle –

Verwandte Themen