java - HBase:使用MapReduce更新行?

标签 java hadoop mapreduce hbase

我在HBase中有一个要对其进行更新的表。例如,如果pred(row) == true(pred是用Java编写的函数),我想将列更新为一个值。

我可以为此使用MapReduce吗?最初我以为可以,但是现在我看到MapReduce用于读取一个表并写入另一个表(或磁盘)。然后,我考虑实现一个并行扫描,该扫描将使用多个线程在整个表上进行迭代,但是似乎在重新发明轮子。

最佳答案

对于此任务,不需要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);

关于java - HBase:使用MapReduce更新行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34739247/

相关文章:

java - 在 Spring 容器启动时注册 Jersey REST 服务

java - MapReduce Hadoop 字长频率不起作用

hadoop - yarn 工作内存利用率

python - 在单个 mapreduce 中同时产生最大值和最小值

java - 从外部阻止 Struts 操作但使其在内部可访问?

java - Servlet 如何处理超出可用 RAM 的字节数?

hadoop - 使用 mapr-setup 脚本安装 mapr

macos - intelliJ IDEA 设置中的 Mac 上的 Hadoop

java - 使用 JSoup 解析特定的文本值

hadoop - 与配置单元中的外部表混淆