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
fonte
2011-12-27 14:42:48
Cosa vuoi la chiave per essere? Stai spingendo entrambi in una famiglia a colonna singola o in due separati? –