2011-12-27 33 views
12

Tôi đã cài đặt hadoop và hbase cdh3u2. Trong hadoop tôi có một tập tin tại đường dẫn /home/file.txt. nó có dữ liệu nhưNhập dữ liệu từ HDFS sang HBase (cdh3u2)

one,1 
two,2 
three,3 

Tôi muốn nhập tệp này vào HBase. trong đó, trường đầu tiên sẽ được phân tích cú pháp thành String và trường thứ 2 được phân tích thành số nguyên và sau đó nó sẽ được đẩy vào hbase. Giúp tôi để làm điều này

aThanks trong dvance ....

+0

nào bạn muốn có chìa khóa của bạn là gì? Bạn có đẩy cả hai vào một nhóm cột đơn lẻ hoặc hai nhóm riêng biệt? –

Trả lời

20

Tôi thích sử dụng Apache Pig cho ingest vào HBase bởi vì nó rất đơn giản, đơn giản và linh hoạt.

Đây là tập lệnh Pig sẽ thực hiện công việc cho bạn, sau khi bạn đã tạo bảng và họ cột. Để tạo bảng và gia đình cột, bạn sẽ thực hiện:

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

Move tập tin để HDFS:

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

Sau đó, viết kịch bản lợn để lưu trữ với HBaseStorage (bạn có thể phải tìm kiếm lên làm thế nào để 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'); 

Lưu ý rằng trong kịch bản trên, chìa khóa sẽ là strdata. Nếu bạn muốn tạo khóa của riêng mình từ một cái gì đó, hãy sử dụng câu lệnh FOREACH để tạo khóa. HBaseStorage giả định rằng điều đầu tiên trong mối quan hệ trước đó (A::strdata trong trường hợp này) là chìa khóa.


Một số tùy chọn khác sẽ là:

  • Viết một công việc Java MapReduce để làm điều tương tự như trên.
  • Tương tác trực tiếp với HTable với the client và được xếp theo từng hàng. Điều này chỉ nên được thực hiện với nhiều tệp nhỏ hơn.
  • Đẩy dữ liệu lên bằng vỏ cơ sở bằng cách sử dụng một số loại tập lệnh (ví dụ: sed, perl, python) biến đổi các dòng csv thành các lệnh put shell. Một lần nữa, điều này chỉ nên được thực hiện nếu số lượng bản ghi nhỏ.

    $ 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. Bạn vui lòng xem bài đăng này? http://stackoverflow.com/questions/21126483/how-to-have-pig-store-rows-in-hbase-as-text-and-not-bytes –

+0

Donald bạn là một anh hùng để viết câu trả lời này! –

+0

Đừng quên đăng ký các lọ HBase theo yêu cầu trong tập lệnh PIG đó. Giống như "REGISTER /usr/lib/hbase/lib/*.jar;" – PinoSan