2012-04-11 20 views
0

这是一个关于mapreduce输出的基本问题。如何从地图作业输出整个文件?

我试图创建一个map函数,它需要一个xml文件并使用apache fop生成pdf。不过,我对输出它有点困惑,因为我知道它是作为(键,值)对出现的。

我也没有使用流媒体来做到这一点。

+1

你有什么尝试?一些关于如何帮助你使用代码的起点会很好。 – 2012-04-11 00:30:34

回答

0

map-reduce的要点是要处理大量通常不适合内存的数据 - 所以输入和输出通常会以某种方式存储在磁盘上(也称为a.a.文件)。 投入产出必须key-value format

(input) <k1, v1> -> map -> <k2, v2> -> combine -> <k2, v2> -> reduce -> <k3, v3> (output) 

指定我没有尝试这样做,但是这是我会做:映射器的

输出写入这种形式:keyText文件名(保存文件名独特)和value是fop在TextOutputFormat的输出。用TextOutputFormat写下来。

建议:

我假设你的使用情况仅仅是读取输入的XML(也许做它的数据的一些操作),并使用fop数据写入PDF文件。我不认为这是第一个地方的hadoop用例...因为无论您想要做什么都可以通过批处理脚本完成。你的xml文件有多大?你需要处理多少个xml文件?

编辑:

SequenceFileOutputFormat将在SequenceFile写。 SequenceFile拥有自己的标题和其他元数据以及存储的文本。它还以key:values的形式存储数据。

SequenceFile Common Header 

    version - A byte array: 3 bytes of magic header 'SEQ', followed by 1 byte of actual version no. (e.g. SEQ4 or SEQ6) 
    keyClassName - String 
    valueClassName - String 
    compression - A boolean which specifies if compression is turned on for keys/values in this file. 
    blockCompression - A boolean which specifies if block compression is turned on for keys/values in this file.  
    compressor class - The classname of the CompressionCodec which is used to compress/decompress keys and/or values in this SequenceFile (if compression is enabled).  
    metadata - SequenceFile.Metadata for this file (key/value pairs) 
    sync - A sync marker to denote end of the header. 

使用SequenceFile毁掉你的应用程序,你将最终损坏的PDF文件输出。试试this出去看看吧。

你有很多输入文件...这是hadoop烂的地方。 (read this)。尽管如此,我仍然觉得你可以使用脚本在每个文档上逐一调用fop来完成所需的操作。如果您有多个节点,请运行相同的脚本,但在输入文档的不同子集上运行。相信我,这将比hadoop运行更快,考虑到创建地图和减少开销(你不需要减少..我知道)。

+0

那么,我们尝试使用hadoop的原因是因为我们经常需要一次生成大约1,000,000个pdf。现在我看了一下我在[link](http://developer.yahoo.com/hadoop/tutorial/module4.html)找到的教程,这个教程解释了更多关于输入和输出的内容。所以对于输出,我想也许我可以使用SequenceFileOutputFormat,但我真的不知道如何输出完全自从没有reducer。我也遇到了另一个例子,他们为返回值设置了一个空值,并且只是返回了键值,但我不记得那是 – user1325360 2012-04-11 16:53:49

+0

@ user1325360看到我上面的编辑 – 2012-04-11 19:14:10

相关问题