我正在尝试将一个存储在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处理器设置:
有什么提示吗?
1条答案
按热度按时间0s0u357o1#
我认为问题是splitjson不能正常工作,因为从技术上讲,流文件的内容是多个json文档,每行一个。我认为splitjson会期望它们在一个数组中,比如:
一种选择是将splitrecord与jsonterereader一起使用,jsonterereader应该能够理解每行json格式。
另一个选择是避免将所有内容拆分在一起,使用jsonterereader从convertrecord->puthbaserecord开始。