分布式系统中的XML处理

时间:2020-03-02 14:52:09

标签: xml hadoop

最近几个月,我正在研究大数据。

1

我很好奇知道XML处理如何在多节点网络中工作。假设我有一个xml,并且具有重复标记,并且在每个这些标记中都有更多类似的标记。

要处理XML,整个XML必须首先在内存中。那么,当我提交hadoop mapreduce任务以处理集群中的100 GB XML(比如说5节点集群)进行处理时,那么如何在不同节点中加载XML?

对于平面文件,我可以想象不断从HDFS读取记录(一个接一个)并在节点之间分配。但是无法用XML理解。 Hadoop怎么知道,需要在什么基础上进行标签拆分或分发?

<employees>
    <employee id="be129">
        <firstname>Jane</firstname>
        <lastname>Doe</lastname>
        <title>Engineer</title>
        <division>Materials</division>
        <building>327</building>
        <room>19</room>
        <supervisor>be131</supervisor>
    </employee>
    <employee id="be130">
        <firstname>William</firstname>
        <lastname>Defoe</lastname>
        <title>Accountant</title>
        <division>Accts Payable</division>
        <building>326</building>
        <room>14a</room>
    </employee>
    <employee id="be131">
        <firstname>Jack</firstname>
        <lastname>Dee</lastname>
        <title>Engineering Manager</title>
        <division>Materials</division>
        <building>327</building>
        <room>21</room>
    </employee>
    <employee id="be132">
        <firstname>Sandra</firstname>
        <lastname>Rogers</lastname>
        <title>Engineering</title>
        <division>Materials</division>
        <building>327</building>
        <room>22</room>
    </employee>
    <employee id="be133">
        <firstname>Steve</firstname>
        <lastname>Casey</lastname>
        <title>Engineering</title>
        <division>Materials</division>
        <building>327</building>
        <room>24</room>
    </employee>
    <employee id="be135">
        <firstname>Michelle</firstname>
        <lastname>Michaels</lastname>
        <title>COO</title>
        <division>Management</division>
        <building>216</building>
        <room>264</room>
    </employee>
</employees>

让我们以上述XML为例,并假设有1000万个employee标签,那么hadoop映射器拆分机制如何在5个节点之间分配xml并进行处理,并根据分布式XML进行协调?

我希望我的问题对所有人都清楚。

2 个答案:

答案 0 :(得分:1)

因此,首先,不要使用MapReduce。至少不是默认选项,因为它仅读取行分隔文件,而不读取XML格式

如果要并行处理xml,请选择spark-xml之类的内容或对XML文档进行预处理,然后再将它们输入HDFS,使其成为更加Hadoop友好的格式,例如,使用Apache Nifi XML / XPath处理器

答案 1 :(得分:0)

很好地进行XML解析必须是一个顺序过程,但不必在内存中构建整个文档。

解析后发生的所有事情都可以分发和并行处理。

您可以使用SAX解析器或XSLT 3.0流进行XML的初始处理,以将其拆分为较小的块,然后将较小的块发送到多个并行进程。我不知道是否有像NiFi这样的框架会为您做到这一点,或者您是否必须自己“手动”编写代码。