2011-12-27 21 views
12

Yüklü hadoop ve hbase cdh3u2 var. Hadoop'da /home/file.txt yolunda bir dosyam var. Bu dosyayı hbase içine almak istiyorum. Bu durumda, ilk alan String olarak ayrıştırılmalı ve 2. alan tamsayı olarak ayrıştırılmalı ve daha sonra hbase'ye itilmelidir. Bu basit, anlaşılır ve esnek olduğu için Hbase içine kaydı için Apache Pig gibi kullanarak .... beni dvance buHDFS'den HBase'ye (cdh3u2) veri alma

aThanks yapmak

+0

Eğer en önemli olmak istiyorsun? İkisini de tek bir sütun ailesine mi yoksa iki ayrı kişiye mi itiyorsunuz? –

cevap

20

yardımcı olun.

İşte tabloyu ve sütun ailesini oluşturduktan sonra işinizi yapacak bir Pig komut dosyası.

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

Taşı HDF'ler dosya: tablo ve sütun ailesini oluşturmak için, yapacağım, sonra

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

HBaseStorage ile saklamak için domuz senaryo yazmaya (bakmak gerekebilir yukarıdaki komut, anahtar gidiyor

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'); 

Not strdata olmak: nasıl) set up and run Pig kadar. Kendi anahtarınızı bir şeyden oluşturmak istiyorsanız, anahtarı oluşturmak için FOREACH ifadesini kullanın. HBaseStorage, önceki ilişkideki ilk şeyin (bu durumda A::strdata) anahtar olduğunu varsayar.


Diğer bazı seçenekler olacaktır:

  • Yukarıdaki aynı şeyi yapmak için Java MapReduce işi yazın.
  • the client ile HTable ile doğrudan etkileşim kurun ve satır-satıra koyun. Bu sadece çok daha küçük dosyalarla yapılmalıdır.
  • Verileri, csv satırlarını kabuk put komutlarına dönüştüren bir tür komut dosyası (yani, sed, perl, python) kullanarak hbase kabuğu ile yukarı itin. Yine, bu sadece kayıtların sayısı küçükse yapılmalıdır.

    $ 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. Bu yazıyı kontrol eder misiniz lütfen? http://stackoverflow.com/questions/21126483/how-to-have-pig-store-rows-in-hbase-as-text-and-not-bytes –

+0

Donald bu cevabı yazmak için bir kahramansın! –

+0

Gerekli HBase kavanozlarını bu PIG komut dosyasına kaydetmeyi unutmayın. Bunun gibi "REGISTER /usr/lib/hbase/lib/*.jar;" – PinoSan