XML обработка в распределенной системе - PullRequest
2 голосов
/ 02 марта 2020

Я работаю над большими данными за последние пару месяцев.

1

Мне любопытно узнать, как обработка XML работает в сети с несколькими узлами. Допустим, у меня есть один xml, и у него есть повторяющиеся теги, и в каждом из этих тегов есть больше похожих тегов.

Для обработки XML, весь XML должен быть сначала в памяти. Итак, в тот момент, когда я отправляю свою задачу oop mapreduce для обработки 100 ГБ XML в кластере (скажем, кластер из 5 узлов), как происходит загрузка XML в разных узлах?

В случае плоских файлов, я могу себе представить, что продолжаю читать записи (одну за другой) из HDFS и распределять по узлам. Но не в состоянии понять в XML. Как хадупы знают, на каком основании должны происходить расщепления или распределения тегов?

<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 и представим, что есть 10 миллионов тегов employee, Тогда как же oop Механизм разбиения маппера работает для распределения xml между 5 узлами, обработки и координации при распределении XML для обработки?

Надеюсь, мой вопрос понятен всем.

Ответы [ 2 ]

1 голос
/ 02 марта 2020

Итак, прежде всего, не используйте MapReduce. По крайней мере, не по умолчанию, потому что он читает только файлы с разделителями строк, а не XML форматирование

Если вы хотите обрабатывать xml параллельно, выберите что-то вроде spark-xml или предварительно обработайте XML документы, прежде чем они даже войдут в HDFS, в более дружественный oop формат, например, с использованием чего-то вроде Apache процессоров Nifi XML / XPath

0 голосов
/ 02 марта 2020

Синтаксический анализ XML должен быть последовательным процессом, но он не должен создавать весь документ в памяти.

Все, что происходит после синтаксического анализа, может быть распределено и параллельно.

Вы можете выполнить начальную обработку XML, используя парсер SAX или потоковую передачу XSLT 3.0, чтобы разделить его на более мелкие куски. и затем отправьте меньшие куски нескольким параллельным процессам. Я не знаю, будут ли какие-либо фреймворки, такие как NiFi, делать это для вас, или вам придется кодировать это самостоятельно «вручную».

...