2016-01-12 3 views
0

У меня есть таблица в HBase, которую я бы хотел выполнить. Например, я хотел бы обновить столбец до значения, если pred(row) == true (pred - это функция, написанная на Java).HBase: используйте MapReduce для обновления строк?

Могу ли я использовать MapReduce для этого? Первоначально я думал, что могу, но теперь я вижу, что MapReduce используется для чтения из одной таблицы и записи на другой (или на диск). Затем я решил реализовать параллельное сканирование, которое будет проходить по всей таблице с использованием нескольких потоков, но кажется, что я изобретаю колесо.

ответ

0

Для этой задачи MapReduce не требуется. Вы можете подключиться к HBASE и выполнить работу из самого Java-приложения. Немного помочь с кодом ниже

HTable table = new HTable(HBaseConfiguration.create(), "MYTABLE"); 
Scan scan = new Scan(); 

scan.addFamily(Bytes.toBytes("myfamily")); 
ResultScanner scanner = table.getScanner(scan); 

for (Result result = scanner.next(); (result != null); result = scanner.next()) { 
    for(KeyValue keyValue : result.list()) { 
    // Make use of keyValue.getKeyString() and keyValue.getValue() here 
    } 
} 

фрагмента коды для обновления конкретной строки, как показано ниже

Put p = new Put(Bytes.toBytes("row1")); 
    p.add(Bytes.toBytes("myfamily"), 
    Bytes.toBytes("fieldname"),Bytes.toBytes("NEWVALUE")); 
    table.put(p); 
+0

Спасибо. Я думал об этом, но он не поддерживает мой клиент, который становится недоступным или разделяющим, что я получаю «бесплатно» с помощью MapReduce. – ytoledano

Смежные вопросы