2013-03-17 4 views
1

Привет, я установил hadoop-0.20.2-cdh3u5 в псевдораспределенном режиме на VMware. Я хочу проанализировать XML-файл, используя эту установленную среду. Я могу это сделать, написав код map/reduce, а затем экспортируя их как .jar файлы на кластер, а затем выполните их в кластере. Я не могу понять, как я могу поместить код разбора java (используя синтаксический анализатор SAXON) для этого в классы карты/сокращения, а затем сгенерировать файлы csv на выходе.Разбор XML-файлов в Hadoop

Так что у меня этот парсинг код: (с помощью саксонских парсер здесь)

import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 
import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBException; 
import javax.xml.bind.Unmarshaller; 

public class JAXBC { 
    private JAXBContext context; 
private Unmarshaller um; 
public JAXBC() throws JAXBException 
{ 
    // creating JAXB context and instantiating Marshaller 
    JAXBContext context = JAXBContext.newInstance(ConnectHome.class); 

    // get variables from the xml file 
    um = context.createUnmarshaller(); 

} 

    public ConnectHome convertJAXB(String strFilePath) throws FileNotFoundException,  
    JAXBException 
    { 
     return ((ConnectHome) um.unmarshal(new FileReader(strFilePath))); 
    } 
} 

У меня есть XML-то вроде этого: (Sample элемент здесь)

<Course> 
    <ID>1001</ID> 
    <Seats>10</Seats> 
    <Description>Department: CS , Faculty: XYZ</Description> 
    <Faculty> 
     <Name>XYZ</Name> 
     <Age>30</Age> 
    </Faculty> 
</Course> 

Теперь моя проблема, я не способный выяснить, как я могу написать этот фрагмент кода в формате map/reduce. Я упомянул этот конкретный учебник a hadoop и различные руководства по yahoo.

Так что мой вопрос: может кто-то дать мне знать, как я могу написать такой код сокращения кода, а затем создать из него файл jar.

Дайте мне знать, если вам нужна другая информация. Я старался быть как можно короче.

Заранее спасибо.

Примечание: Я знаю, что это звучит как очень тривиальный вопрос в мире mapreduce, и этот XML, который я показал здесь, является всего лишь примером одного тега, в котором есть несколько тегов.

+0

Также есть аналогичные сообщения о переполнении стека, но ни один из них не ответил правильно. Я также знаю, что в Hadoop есть что-то, что называется XMLInputFormat. Но опять мой вопрос: я не могу объединить всю эту информацию в исполняемый код, уменьшая формат кода. – user1188611

ответ

0

здесь Ваты хотят https://github.com/studhadoop/xmlparsing-hadoop/blob/master/XmlParser11.java

line 170 :if (currentElement.equalsIgnoreCase("name")) 
line 173 :else if (currentElement.equalsIgnoreCase("value")) 

имя и значение являются тегами в моем файле XML. В случае ur, если вам нужно обработать теги внутри FACULTY, вы можете использовать Name вместо имени и Age вместо значения.

conf.set("xmlinput.start", "<Faculty>"); 
conf.set("xmlinput.end", "</Faculty>"); 
+0

Я думаю, у вас есть общая идея для урского вопроса. –

+0

Как он справляется с идеей деления файлов hadoop на разделенных узлах? – 2Big2BeSmall

+0

Как обрабатывать, когда 1 xml может быть разделен на 2 разных узла? – 2Big2BeSmall

1

Для XML вы, как правило, хотите поместить в протокольные буферы, такие как AVRO и процесс оттуда. экосистема hadoop выросла при обработке неструктурированных данных и превратила их в структурированные данные hdfs ... поэтому потребление и обработка структурированных данных еще не являются интуитивной частью экосистемы. У Mahout есть код для приема XML в пакете Bayes, который работает так же, как ответ Сри.

+0

Вы можете найти «XmlImputFormat» Mahout здесь: https://github.com/apache/mahout/blob/ad84344e4055b1e6adff5779339a33fa29e1265d/examples/src/main/java/org/apache/mahout/classifier/bayes/XmlInputFormat.java – MasterScrat