0

これは、mapreduceの出力に関する基本的な質問です。

xmlファイルを取り込んでapachefopを使用してpdfを作成するマップ関数を作成しようとしています。ただし、(キー、値)ペアとして出力されることがわかっているため、出力方法について少し混乱しています。

また、これを行うためにストリーミングを使用していません。

4

1 に答える 1

0

map-reduce のポイントは、通常はメモリに収まらない大量のデータに取り組むことです。そのため、入力と出力は通常、何らかの方法でディスク (別名ファイル) に保存されます。入出力はキー値形式で指定する必要があります

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

私はこれを試していませんが、これは私がすることです:

マッパーの出力を次の形式に書き込みます:keyTextのファイル名 (一意のファイル名を保持) であり、 TextOutputFormat のfopvalueの出力です。TextOutputFormatを使用して記述します。

提案:

あなたのユースケースは、入力xmlを読み取り(おそらくそのデータに対して何らかの操作を行っている)、fopを使用してPDFファイルにデータを書き込むだけであると想定しています。そもそもこれが Hadoop の使用例だとは思いません...なぜなら、やりたいことは何でもバッチ スクリプトで実行できるからです。あなたのxmlファイルの大きさは?いくつの xml ファイルを処理する必要がありますか?

編集:

SequenceFileOutputFormatはSequenceFileに書き込みます。SequenceFileには、保存されているテキストとともに、独自のヘッダーとその他のメタデータがあります。また、キー:値の形式でデータを保存します。

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 ファイルが破損してしまうため、アプリケーションが台無しになります。これを試してみて、自分の目で確かめてください。

たくさんの入力ファイルがあります...そして、これがhadoopの最悪の場所です。(これを読んでください)それでも、すべてのドキュメントでfopを 1 つずつ呼び出すスクリプトを使用して、目的の操作を実行できると思います。複数のノードがある場合は、同じスクリプトを実行しますが、入力ドキュメントの異なるサブセットに対して実行します。私を信じてください、これはマップとリデュースの作成に伴うオーバーヘッドを考慮すると、hadoop よりも高速に実行されます (リデュースは必要ありません..私は知っています)。

于 2012-04-11T03:10:26.640 に答える