使用nifi在hbase中摄取json数据

3phpmpom  于 2021-06-09  发布在  Hbase
关注(0)|答案(1)|浏览(444)

我正在尝试将一个存储在hdfs中的非常简单的xml文件写入hbase。我想将xml文件转换成json格式,并在hbase中为json数组中的每个元素创建一行。请参见以下xml结构:

<?xml version="1.0" encoding="UTF-8"?>
<customers>
<customer customerid="1" name="John Doe"></customer>
<customer customerid="2" name="Tommy Mels"></customer>
</customers>

请参见以下所需的hbase输出行:

1    {"customerid"="1","name"="John Doe"}
2    {"customerid"="2","name"="Tommy Mels"}

我已经为我的流尝试了许多不同的处理器,但这就是我现在得到的:gethdfs->convertrecord->splitjson->puthbasecell。convertrecord工作正常,正在将xml文件正确地转换为json格式,但我无法将json记录拆分为2。请参阅以下我迄今为止在hbase中编写的内容(使用不同的处理器组合):

c5927a55-d217-4dc1-af04-0aff743 column=person:rowkey, timestamp=1574329272237, value={"customerid":"1","name":"John Doe"}\x0A{
 cfe4e                           "customerid":"2","name":"Tommy Mels"}

对于splitjson处理器,我使用以下jsonpathexpression:$*
到目前为止,我在puthbasecell处理器中得到一个illegalargumentexception,声明行长度为0,请参阅以下puthbasecell处理器设置:

有什么提示吗?

0s0u357o

0s0u357o1#

我认为问题是splitjson不能正常工作,因为从技术上讲,流文件的内容是多个json文档,每行一个。我认为splitjson会期望它们在一个数组中,比如:

[
    {"customerid"="1","name"="John Doe"},
    {"customerid"="2","name"="Tommy Mels"}
]

一种选择是将splitrecord与jsonterereader一起使用,jsonterereader应该能够理解每行json格式。
另一个选择是避免将所有内容拆分在一起,使用jsonterereader从convertrecord->puthbaserecord开始。

相关问题