Hbase专柜采用Apache NiFi

时间:2017-03-07 21:59:44

标签: groovy hbase apache-nifi

我的任务很简单 - 我想使用Apache NiFi在HBase(计数器)中增加列值。

我有一个accountid作为一个rowkey,我想根据一个流值来进行/ decr平衡列。用NiFi做最好的方法是什么。

例如,对于帐户A,余额的起始值= 100.我得到(A,-20)作为事件。什么是最好的开箱即用处理器(A余= 80)。似乎所有这些都只会取代价值。我也愿意改变我的架构......

我尝试编写groovy脚本但在nifi中出现此错误。如果我的基本结构错误,那只是一个简单的问题。

2017-03-10 06:38:54,067 ERROR [计时器驱动的进程线程-6] oanifi.processors.script.ExecuteScript ExecuteScript [id = b5a0e7b7-015a-1000-ab9c-0696c8297e8d] ExecuteScript [id = b5a0e7b7 -015a-1000-ab9c-0696c8297e8d]由于java.lang.NoClassDefFoundError而无法处理:org / apache / hadoop / conf / Configuration;回滚会议:

import org.apache.nifi.controller.ControllerService
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.TableName
import org.apache.hadoop.hbase.client.Connection
import org.apache.hadoop.hbase.client.ConnectionFactory
import org.apache.hadoop.hbase.client.Get
import org.apache.hadoop.hbase.client.Put
import org.apache.hadoop.hbase.client.Result
import org.apache.hadoop.hbase.client.ResultScanner
import org.apache.hadoop.hbase.client.Scan
import org.apache.hadoop.hbase.client.Table
import org.apache.hadoop.hbase.util.Bytes

def lookup = context.controllerServiceLookup
def HbaseServiceName =HBaseClient.value
def HBaseServiceId = lookup.getControllerServiceIdentifiers(ControllerService).find { 
    cs -> lookup.getControllerServiceName(cs) == HBaseServiceName
}
def conn = lookup.getControllerService(HBaseServiceId)?.getConnection()
try {
    flowFile = session.create()
    def table = conn.getTable(TableName.valueOf("crap"))
    myfile = flowFile.getAttribute("filename")
    def p = new Put(Bytes.toBytes("crap")); 
    p.add(Bytes.toBytes("crap"), Bytes.toBytes("cf1"),Bytes.toBytes("SomeValue"))
    table.put(p);
    session.transfer(flowFile, REL_SUCCESS)
} catch(e) {
    log.error('Scripting error', e)
    session.transfer(flowFile, REL_FAILURE)
}
conn?.close()

1 个答案:

答案 0 :(得分:0)

你是正确的PutHBaseCellPutHBaseJSON将流文件内容放入相应的HBase目的地。您可能想要做的是使用GetHBase检索初始值,使用计数器保持运行计数器(请参阅here获取教程),然后更新HBase单元格具有正确的价值。您还可以使用DistributedMapCache系统来获取/计算/存储共享内存空间中的值。

相关问题