2013-06-14 3 views
2

Итак, у меня есть десять разных файлов, где каждый файл выглядит так.Hadoop MapReduce с файлами RDF/XML

<DocID1> <RDF Document> 
<DocID2> <RDF Document> 
. 
. 
. 
. 
<DocID50000> <RDF Document> 

На самом деле существует ~ 56 000 строк в файле. В каждой строке есть идентификатор документа и документ RDF.

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

У меня есть несколько вопросов, которые нужно начать, и я совершенно новичок в файлах RDF/XML.

  1. Как я должен анализировать каждую строку документа, чтобы получить отдельное представление для каждого картографа?

  2. Существует ли эффективный способ управления размером ввода для устройства отображения?

ответ

1

1 Если вы используете TextInputFormat, вы автоматически получаете 1 строку (1 split) в каждом картографе в качестве значения. Преобразуйте эту строку в строку и выполните требуемую обработку. В качестве альтернативы вы можете использовать API Hadoop Streaming, используя StreamXmlRecordReader. Вы должны указать начальный и конечный тег, и вся информация, зажатая между стартом и тегом, будет подана в устройство отображения (в вашем случае <DocID1> и <RDF Document>).

Usage : 

hadoop jar hadoop-streaming.jar -inputreader "StreamXmlRecord,begin=DocID,end=RDF Document" ..... (rest of the command) 

2 Зачем вам это нужно? Ваша цель - передать одну полную строку картографу. Это то, что является работой InputFormat, которую вы используете. Если вам все еще нужно, вы должны написать для этого специальный код, и для этого конкретного случая это будет немного сложно.