2011-12-27 15 views
12

Ho installato Hadoop e HBase cdh3u2. In hadoop ho un file sul percorso /home/file.txt. ha i dati comeImporta dati da HDFS a HBase (cdh3u2)

one,1 
two,2 
three,3 

Voglio importare questo file in hbase. in quanto, il primo campo dovrebbe essere analizzato come String e il secondo campo analizzato come intero e quindi dovrebbe essere inserito in hbase. Aiutami a fare questo

aThanks in dvance ....

+0

Cosa vuoi la chiave per essere? Stai spingendo entrambi in una famiglia a colonna singola o in due separati? –

risposta

20

Mi piace usare Apache Pig per ingerire in HBase perché è semplice, diretto, e flessibile.

Ecco uno script di maiale che avrebbe fatto il lavoro per voi, dopo aver creato la tavola e la famiglia della colonna. Per creare la tabella e la famiglia della colonna, si farà:

$ hbase shell 
> create 'mydata', 'mycf' 

spostare il file in HDFS:

$ hadoop fs -put /home/file.txt /user/surendhar/file.txt 

Poi, scrivere la sceneggiatura di maiale per memorizzare con HBaseStorage (potrebbe essere necessario cercare fino come set up and run Pig):

A = LOAD 'file.txt' USING PigStorage(',') as (strdata:chararray, intdata:long); 
STORE A INTO 'hbase://mydata' 
     USING org.apache.pig.backend.hadoop.hbase.HBaseStorage(
       'mycf:intdata'); 

si noti che nello script di cui sopra, la chiave sta per essere strdata. Se si desidera creare la propria chiave da qualcosa, utilizzare un'istruzione FOREACH per generare la chiave. HBaseStorage presuppone che la prima cosa nella relazione precedente (A::strdata in questo caso) sia la chiave.


Alcune altre opzioni sarebbero:

  • Scrivi un lavoro Java MapReduce a fare la stessa cosa come sopra.
  • interagire direttamente con il HTable con the client e mettere in riga per riga. Questo dovrebbe essere fatto solo con file molto più piccoli.
  • Spingi i dati con la shell hbase utilizzando una sorta di script (ad esempio, sed, perl, python) che trasforma le righe di csv nei comandi della shell put. Ancora una volta, questo dovrebbe essere fatto solo se il numero di record è piccolo.

    $ cat /home/file.txt | transform.pl 
    put 'mydata', 'one', 'mycf:intdata', '1' 
    put 'mydata', 'two', 'mycf:intdata', '2' 
    put 'mydata', 'three', 'mycf:intdata', '3' 
    
    $ cat /home/file.txt | transform.pl | hbase shell 
    
+0

Hey Donald. Vuoi controllare questo post? http://stackoverflow.com/questions/21126483/how-to-have-pig-store-rows-in-hbase-as-text-and-not-bytes –

+0

Donald sei un eroe per aver scritto questa risposta! –

+0

Non dimenticare di registrare i jar HBase richiesti in quello script PIG. Ad esempio "REGISTRA /usr/lib/hbase/lib/*.jar;" – PinoSan

Problemi correlati