使用NiFi在HBase中摄取json数据
我正在尝试将一个存储在HDFS中的非常简单的XML文件写入HBase。我想将XML文件转换为json格式,并在HBase中为json数组中的每个元素创建一行。请参见以下XML结构:使用NiFi在HBase中摄取json数据,json,hdfs,hbase,apache-nifi,Json,Hdfs,Hbase,Apache Nifi,我正在尝试将一个存储在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" nam
<?xml version="1.0" encoding="UTF-8"?>
<customers>
<customer customerid="1" name="John Doe"></customer>
<customer customerid="2" name="Tommy Mels"></customer>
</customers>
我已经为我的流尝试了许多不同的处理器,但这就是我现在得到的:GetHDFS->ConvertRecord->SplitJson->PutHBaseCell。ConvertRecord工作正常,正在正确地将XML文件转换为json格式,但我无法将json记录拆分为2。请参阅以下我迄今为止在HBase中编写的内容(使用不同的处理器组合):
对于splitjson处理器,我使用以下jsonpathexpression:$*
到目前为止,我在PutHBaseCell处理器中收到一个IllegalArgumentException,声明行长度为0,请参阅以下PutHBaseCell处理器设置:
有什么提示吗?我认为问题在于SplitJson不能正常工作,因为从技术上讲,流文件的内容是多个json文档,每行一个。我认为SplitJson会期望它们位于如下数组中:
[
{"customerid"="1","name"="John Doe"},
{"customerid"="2","name"="Tommy Mels"}
]
一个选项是将SplitRecord与JsonTreeReader一起使用,JsonTreeReader应该能够理解每行json格式
另一个选项是避免将所有内容拆分在一起,使用JSONTERREADER从ConvertRecord->PutHBaseRecord开始。我已经尝试过ConvertRecord->PutHBaseRecord选项:拆分效果很好(从json中提取customerid作为行ID并创建2行),但PutHBaseRecord没有将记录作为json写入。我还尝试了使用JSONTERREADER选项的SplitRecord,使用PutHBaseJson处理器写入HBase,但在这种情况下,PutHBaseJson处理器没有正确拾取customerid,正在为同一条记录创建两行(一行使用customerid值,另一行使用name值)也不是将记录写为JSONI如果要将JSON写为HBase中单元格的值,则需要像最初那样使用PutHBaseCell。对不起,我没有意识到你想从原来的问题中得到什么。PutHBaseCord和PutHbaseJson都表示json为列限定符/值对,因此在Hbase中没有使用这些限定符/值对的json。如果使用PutHBaseCell,则会得到IllegalArgumentException(行长度为0)。请参阅以下我当前的工作流设置:GetHDFS->ConvertRecord->SplitRecord->PutHBaseCell
c5927a55-d217-4dc1-af04-0aff743 column=person:rowkey, timestamp=1574329272237, value={"customerid":"1","name":"John Doe"}\x0A{
cfe4e "customerid":"2","name":"Tommy Mels"}
[
{"customerid"="1","name"="John Doe"},
{"customerid"="2","name"="Tommy Mels"}
]