2

所以我有十个不同的文件,每个文件看起来像这样。

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

每个文件实际上有大约 56,000 行。每行都有一个文档 ID 和一个 RDF 文档。

我的目标是将每个映射器作为输入键值对传递,并为输出键值对发出多个。在减少步骤中,我会将这些存储到 Hive 表中。

我有几个问题要开始了,而且我对 RDF/XML 文件完全陌生。

  1. 我应该如何解析文档的每一行以分别传递给每个映射器?

  2. 有没有一种有效的方法来控制映射器的输入大小?

4

1 回答 1

1

1-如果您使用 TextInputFormat,您将自动在每个映射器中获得 1 行(1 个拆分)作为值。将此行转换为字符串并进行所需的处理。或者,您可以通过使用StreamXmlRecordReader. 您必须提供开始和结束标签,并且夹在开始和标签之间的所有信息都将被提供给映射器(在您的情况下<DocID1><RDF Document>)。

Usage :

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

2-你为什么需要那个?您的目标是向映射器提供完整的一行。这是您正在使用的 InputFormat 的工作。如果您仍然需要它,您必须为此编写自定义代码,对于这种特殊情况,它会有点棘手。

于 2013-06-14T23:07:13.590 回答