Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用NiFi在HBase中摄取json数据_Json_Hdfs_Hbase_Apache Nifi - Fatal编程技术网

使用NiFi在HBase中摄取json数据

使用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

我正在尝试将一个存储在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>
我已经为我的流尝试了许多不同的处理器,但这就是我现在得到的: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"}
]