Импорт данных из HDFS в HBase (cdh3u2) - PullRequest
12 голосов
/ 27 декабря 2011

Я установил hadoop и hbase cdh3u2.В hadoop у меня есть файл по пути /home/file.txt.в нем есть данные типа

one,1
two,2
three,3

Я хочу импортировать этот файл в hbase.в этом случае первое поле должно быть проанализировано как String, а второе поле - как целое число, а затем оно должно быть передано в hbase.Помогите мне сделать это

aСпасибо в танце ....

1 Ответ

20 голосов
/ 27 декабря 2011

Мне нравится использовать Apache Pig для загрузки в HBase, потому что он прост, понятен и гибок.

Вот сценарий Pig, который сделает эту работу за вас после того, как вы создали таблицу и семейство столбцов. Чтобы создать таблицу и семейство столбцов, вам нужно сделать:

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

Переместить файл в HDFS:

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

Затем напишите сценарий pig для хранения с HBaseStorage (вам может понадобиться посмотреть, как настроить и запустить 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');

Обратите внимание, что в приведенном выше сценарии ключ будет strdata. Если вы хотите создать свой собственный ключ из чего-либо, используйте оператор FOREACH для генерации ключа. HBaseStorage предполагает, что первым в предыдущем отношении (A::strdata в данном случае) является ключ.


Некоторые другие опции:

  • Запишите Java MapReduce , чтобы сделать то же самое, что и выше.
  • Взаимодействуйте напрямую с HTable с клиентом и вставляйте построчно. Это должно быть сделано только с гораздо меньшими файлами.
  • Передайте данные с помощью оболочки hbase, используя какой-то сценарий (то есть, sed, perl, python), который преобразует строки csv в команды оболочки put. Опять же, это следует делать только в том случае, если количество записей невелико.

    $ 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
    
...