使用java Mahout XmlInputFormat(Hadoop)解析xml

使用java Mahout XmlInputFormat(Hadoop)解析xml,java,hadoop,xml-parsing,mahout,Java,Hadoop,Xml Parsing,Mahout,我已经找到了一种使用Java在Hadoop中解析xml文件的方法 我找到了 它展示了如何使用XmlInputFormat类来解析XML 但正如有人在评论中提到的: “HDFS将文件拆分为64mbs的数据块,程序将丢失一个数据块结束和下一个数据块开始之间的记录。” 对于exmaple,文件如下所示: <Details> <ID> 12346 </ID> <age> 30 </age> <FirstName> "bla bla

我已经找到了一种使用Java在Hadoop中解析xml文件的方法

我找到了

它展示了如何使用XmlInputFormat类来解析XML

但正如有人在评论中提到的: “HDFS将文件拆分为64mbs的数据块,程序将丢失一个数据块结束和下一个数据块开始之间的记录。”

对于exmaple,文件如下所示:

<Details>
<ID> 12346 </ID>
<age> 30 </age>
<FirstName> "bla bla me"</FirstName>
<LastName> "say my name"</LastName>
</Details>

12346
30
“废话废话”
“说出我的名字”
那么我该怎么处理xml的拆分呢, 防止数据丢失


或者换句话说,当一个xml可能被拆分为两个不同的节点时,它如何处理?

我知道这不是一个解决方案,但如果它来自数据库,您可以用sqoop替换新行字符。另一方面,我不知道我从一个已知的来源获得了这些文件,并且没有对数据结构的控制,他们在另一篇文章中也看到了这一点。他们说问题在于if循环。如果(!withinBlock&&i==0&&fsin.getPos()>=end){return false;}。我查看了代码,现在对于if块,即使它碰到块边界withinBlock,在找到正确的结束标记之前,if块始终为true,它将读取文件,直到它碰到结束标记。假设拆分1和拆分2有一个XML拆分,现在,mapper 1将生成XML拆分的输出,mapper 2将查找下一个开始标记并继续。在这种情况下,丢失记录的可能性在哪里?我在单节点集群中进行了测试,创建了9个映射器,将拆分大小设为512Kb,输出中没有遗漏任何内容。Vignesh,你在我的链接中也看到过同样的例子吗?或者为它构建自己的代码?