所以我有十个不同的文件,每个文件看起来像这样。
<DocID1> <RDF Document>
<DocID2> <RDF Document>
.
.
.
.
<DocID50000> <RDF Document>
实际上每个文件大约有 56,000 行。每行都有一个文档 ID 和一个 RDF 文档。
我的目标是将每个映射器作为输入键值对传递给每个映射器,并为输出键值对发出多个映射器。在 reduce 步骤中,我会将这些存储到 Hive 表中。
我有几个入门问题,而且我对 RDF/XML 文件完全陌生。
我应该如何解析文档的每一行以分别传递给每个映射器?
是否有一种有效的方法来控制映射器的输入大小?
最佳答案
1- 如果您使用的是 TextInputFormat,您将在每个映射器中自动获得 1 行(1 次拆分)作为值。将此行转换为 String 并进行所需的处理。或者,您可以通过使用 StreamXmlRecordReader
来使用 Hadoop Streaming API .您必须提供开始和结束标记,并且夹在开始和标记之间的所有信息都将提供给映射器(在您的情况下为 <DocID1>
和 <RDF Document>
)。
Usage :
hadoop jar hadoop-streaming.jar -inputreader "StreamXmlRecord,begin=DocID,end=RDF Document" ..... (rest of the command)
2- 为什么需要它?您的目标是将完整的一行提供给映射器。这是您正在使用的 InputFormat 的工作。如果您仍然需要它,您必须为此编写自定义代码,对于这种特殊情况,它会有点棘手。
关于java - 带有 RDF/XML 文件的 Hadoop MapReduce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17116046/