2011-12-27 3 views
12

J'ai installé hadoop et hbase cdh3u2. Dans hadoop j'ai un fichier sur le chemin /home/file.txt. il a les données commeImporter des données de HDFS à HBase (cdh3u2)

one,1 
two,2 
three,3 

Je veux importer ce fichier dans hbase. en ce sens, le premier champ devrait être analysé en tant que chaîne, et le deuxième champ analysé en tant qu'entier, puis il devrait être poussé dans hbase. Aidez-moi à faire de cette

aThanks à AVANCES ....

+0

Que voulez-vous que votre clé soit? Êtes-vous en les poussant tous les deux dans une famille de colonne simple, ou deux séparés? –

Répondre

20

J'aime utiliser Apache Pig pour ingest en HBase parce qu'il est simple, simple et flexible.

Voici un script Pig qui ferait le travail pour vous, après avoir créé la table et la famille de colonnes. Pour créer la table et la famille de la colonne, vous allez faire:

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

Déplacer le fichier HDFS:

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

Ensuite, écrire le script de porc pour stocker avec HBaseStorage (vous pouvez avoir à regarder jusqu'à comment 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'); 

Notez que dans le script ci-dessus, la clé va être strdata. Si vous voulez créer votre propre clé à partir de quelque chose, utilisez une instruction FOREACH pour générer la clé. HBaseStorage suppose que la première chose dans la relation précédente (A::strdata dans ce cas) est la clé.


D'autres options seraient:

  • Ecrire un emploi Java MapReduce faire la même chose que ci-dessus.
  • Interagissez directement avec le HTable avec the client et mettez en rang par rang. Cela ne devrait être fait qu'avec des fichiers beaucoup plus petits.
  • Poussez les données vers le haut avec le shell hbase en utilisant une sorte de script (c'est-à-dire, sed, perl, python) qui transforme les lignes de csv en commandes shell put. Encore une fois, cela ne devrait être fait que si le nombre d'enregistrements est petit.

    $ 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

Salut Donald. Voulez-vous s'il vous plaît vérifier ce poste? http://stackoverflow.com/questions/21126483/how-to-have-pig-store-rows-in-hbase-as-text-and-not-bytes –

+0

Donald vous êtes un héros pour écrire cette réponse! –

+0

N'oubliez pas d'enregistrer les fichiers HBase requis dans ce script PIG. Comme ça "REGISTER /usr/lib/hbase/lib/*.jar;" – PinoSan

Questions connexes