我试图将存储在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处理器,我正在使用以下jsonpath表达式:$。*
截至目前,我在PutHBaseCell处理器中收到一个IllegalArgumentException,指出行长度为0,请参阅以下PutHBaseCell处理器设置:
有任何提示吗?
答案 0 :(得分:0)
我认为问题在于,SplitJson无法正常工作,因为从技术上讲,流文件的内容是多个json文档,每行一个。我认为SplitJson希望它们位于像这样的数组中:
[
{"customerid"="1","name"="John Doe"},
{"customerid"="2","name"="Tommy Mels"}
]
一种选择是将SplitRecord与JsonTreeReader一起使用,它应该能够理解json-per-line格式。
另一个选择是避免将所有内容拆分在一起,并使用JsonTreeReader从ConvertRecord-> PutHBaseRecord中获取。