2016-04-29 3 views
0

с использованием Java API, я пытаюсь установить Put() в HBase 1.1.x содержимое некоторых файлов. Для этого я создал класс WholeFileInput (ref: Using WholeFileInputFormat with Hadoop MapReduce still results in Mapper processing 1 line at a time), чтобы MapReduce считывал весь файл вместо одной строки. Но, к сожалению, я не могу понять, как сформировать свой rowkey из данного имени файла.Вставка имени файла в виде строки с использованием HBase MapReduce

Пример:

Вход:

файл-123.txt

файл-524.txt

файл-9577.txt

...

file- "anotherNumber" .txt

Результат на моей HBase таблице:

Row ----------------- Значение

123 ---------- ------- "содержание 1-го файла"

524 ----------------- "содержание 2-го файла"

... и т.д.

Если кто-то уже столкнулся с этой ситуацией, чтобы помочь мне с этим

Заранее спасибо.

+0

не уверен, что я хорошо понимаю, вы просто хотите поместить файл в HBase? Если вы хотите сделать это, просто прочитайте файл как массив байтов и поместите его в Hbase – Whitefret

+0

@Whitefret да, но не только, я решил проблему, как поместить весь файл в HBase, теперь о генерации rowkey из имени файла. Я написал метод для этого, метод принимает имя файла как ввод и возвращает строку (= myRowKey), но я не могу представить, как я могу назвать эту функцию из моей функции сопоставления – mttb12

+0

, для этого вам не нужна функция сопоставления, за исключением случаев, когда у вас есть большой файл, и в этом случае вы не должны использовать HBase – Whitefret

ответ

2

Ваш

rowkey 

может быть, как это

rowkey = prefix + (filenamepart or full file name) + Murmurhash(fileContent) 

, где ваш префикс может быть между тем, что когда-либо presplits вы сделали со своим временем создания таблицы.

напр:

create 'tableName', {NAME => 'colFam', VERSIONS => 2, COMPRESSION => 'SNAPPY'}, 
    {SPLITS => ['0','1','2','3','4','5','6','7']} 

префикс может быть любой случайный идентификатор генерируется между диапазоном предварительных разделений.

Этот тип строки ключа избегает горячего пятна также, если данные будут увеличиваться. & Данные будут распространяться по серверу региона.