Разбор большого XML в TSV - PullRequest
       13

Разбор большого XML в TSV

0 голосов
/ 24 февраля 2012

Мне нужно проанализировать несколько XML-файлов в TSV, размер файлов XML составляет порядка 50 ГБ, я в основном сомневаюсь в реализации, я должен выбрать, чтобы проанализировать это у меня есть два oprions

  1. с использованием SAXParser
  2. использование Hadoop

У меня есть немало идей о реализации SAXParser, но я думаю, что, имея доступ к кластеру Hadoop, я должен использовать Hadoop, так как это - это hadoopдля больших данных

было бы здорово, если бы кто-нибудь дал подсказку / документ о том, как это сделать в Hadoop или эффективной реализации SAXParser для такого большого файла, или, скорее, что я должен использовать для Hadoop или SAXparser?

Ответы [ 4 ]

2 голосов
/ 07 сентября 2012

Я обрабатываю большие XML-файлы в Hadoop довольно регулярно.Я нашел, что это лучший способ (не единственный способ ... другой - писать SAX-код), так как вы все еще можете работать с записями в стиле dom.

С этими большими файлами,Следует иметь в виду, что вы наверняка захотите включить сжатие на выходе преобразователя: Hadoop, как сжимать вывод преобразователя, но не вывод преобразователя ... это ускорит процесснемного.

Я написал краткое описание того, как я справился со всем этим, может быть, это поможет: http://davidvhill.com/article/processing-xml-with-hadoop-streaming. Я использую Python и Etrees, что делает вещи действительно простыми ....

0 голосов
/ 30 апреля 2016

Я думаю, что SAX традиционно ошибочно связан с обработкой больших файлов XML ... на самом деле VTD-XML часто является лучшим вариантом, намного лучше, чем SAX, с точки зрения производительности, гибкости, кода удобочитаемость и удобство обслуживания ... что касается памяти, модель VTD-XML в оперативной памяти составляет всего 1,3x ~ 1,5X размера соответствующего XML-документа.

VTD-XML обладает еще одним значительным преимуществом по сравнению с SAX: его беспрецедентная поддержка XPath. Из-за этого пользователи VTD-XML регулярно сообщают о повышении производительности в 10–60 раз по сравнению с SAX, анализируя более сотни файлов XML MB.

http://www.infoq.com/articles/HIgh-Performance-Parsers-in-Java#anch104307

Прочтите эту статью, в которой подробно сравниваются существующие структуры синтаксического анализа XML в Java.

http://sdiwc.us/digitlib/journal_paper.php?paper=00000582.pdf

0 голосов
/ 24 февраля 2012

Обрабатывать XML в hadoop довольно просто, имея один преобразователь на файл XML.Этот подход подойдет для большого количества относительно небольших XML-файлов

Проблема в том, что в вашем случае файлы большие, а их число маленькое, так что без разделения преимущества hadoop будут ограничены.Принимая во внимание накладные расходы hadoop, выгода будет отрицательной ... В hadoop нам нужно иметь возможность разбивать входные файлы на логические части (называемые разбиениями) для эффективной обработки больших файлов.В общем, XML не выглядит как «разделимый» формат, поскольку нет четко определенного разделения на блоки, которые могут обрабатываться независимо.В то же время, если XML содержит «записи» какого-либо вида, можно реализовать разбиение.
Хорошее обсуждение разделения XML в haoop приведено здесь: http://oobaloo.co.uk/articles/2010/1/20/processing-xml-in-hadoop.html, где предлагается формат ввода Mahout для XML.

Что касается вашего случая - я думаю, что пока количество ваших файлов не намного больше, чем количество ядер, которые у вас есть в одной системе - hadoop не будет эффективным решением.
В то же время - если вы хотите накапливать их со временем - вы также можете извлечь выгоду из hadoop в качестве масштабируемого хранилища.

0 голосов
/ 24 февраля 2012

Я не знаю о SAXparser.Но Hadoop определенно выполнит вашу работу, если у вас есть кластер hadoop с достаточным количеством узлов данных.50 ГБ - ничто, поскольку я выполнял операции над более чем 300 ГБ данных в моем кластере.Напишите карту сокращения работы в java и документацию для hadoop можно найти по адресу http://hadoop.apache.org/

...