xml处理

jaxagkaj  于 2021-05-27  发布在  Hadoop
关注(0)|答案(2)|浏览(328)

我在研究过去几个月的大数据。
1
我很想知道xml处理在多节点网络中是如何工作的。假设我有一个xml,它有重复的标记,在每个标记中都有更多相似的标记。
要处理xml,首先需要将整个xml存储在内存中。所以,当我提交hadoopmapreduce任务来处理集群中100gb的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为例,想象一下 employee 标签,那么hadoopMap器拆分机制如何在5个节点之间分发xml,以及如何处理和协调要处理的分布式xml呢?
我希望我的问题大家都清楚。

gkn4icbw

gkn4icbw1#

所以,首先,不要使用mapreduce。至少,不是默认选项,因为它只读取以行分隔的文件,而不读取xml格式
如果您想并行处理xml,可以选择 spark-xml 或者在将hdfs输入到更为hadoop友好的格式之前对xml文档进行预处理,例如,使用类似apachenifixml/xpath的处理器

wkyowqbh

wkyowqbh2#

xml解析必须是一个连续的过程,但它不必在内存中构建整个文档。
解析后发生的所有事情都可以分布和并行。
您可以使用sax解析器或使用xslt3.0流将xml进行初始处理,将其拆分为较小的块,然后将较小的块发送给多个并行进程。我不知道是否有像nifi这样的框架可以为您实现这一点,或者您是否需要自己“手工”编写代码。

相关问题