4

Hadoop MapReduce InputFormatインターフェイスの Apache ドキュメントから:

"入力サイズに基づく [L] 論理分割は、多くのアプリケーションにとって不十分です。これは、レコード境界を尊重する必要があるためです。そのような場合、アプリケーションは、レコード境界を尊重し、レコードを提示する責任があるRecordReaderも実装する必要があります。個々のタスクに対する論理的なInputSplitの指向ビュー。"

WordCountサンプル アプリケーションは、入力サイズに基づく論理分割が不十分なものですか? その場合、RecordReader の実装はソース コードのどこにありますか?

4

2 に答える 2

3

入力分割は、データへの論理参照です。APIを見ると、レコードの境界について何も認識していないことがわかります。入力分割ごとにマッパーが起動されます。すべてのレコードに対してマッパーmap()が実行されます (WordCount プログラムでは、ファイル内のすべての行)。

しかし、マッパーはどのようにしてレコード境界がどこにあるかを知るのでしょうか?

これは、Hadoop MapReduce InputFormat Interface からの引用の出番です -

アプリケーションは、レコード境界を尊重し、論理的な InputSplit のレコード指向のビューを個々のタスクに提示する責任がある RecordReader も実装する必要があります。

すべてのマッパーは InputFormat に関連付けられています。それInputFormatには、使用する情報がありRecordReaderます。APIを見ると、入力分割と使用するレコード リーダーを認識していることがわかります。入力分割とレコードリーダーについてさらに知りたい場合は、この回答を読む必要があります。

ARecordReaderは、レコード境界が何であるかを定義します。はInputFormat、何RecordReaderを使用するかを定義します。

WordCount プログラムは any を指定しないInputFormatため、デフォルトでTextInputFormatwhich がLineRecordReaderを使用し、すべての行を異なるレコードとして出力します。そして、これはあなたのソースコードです


レコードの境界を尊重する必要があるため、input-size に基づく [L]logical 分割は多くのアプリケーションにとって不十分です。

これが意味することは、次のようなサンプルファイルの場合

a b c d e
f g h i j
k l m n o

そして、すべての行をレコードにしたいと考えています。論理分割が入力サイズに基づいている場合、次のような 2 つの分割が存在する可能性があります。

a b c d e
f g 

    h i j 
k l m n 0 

がなければ、 と は別のレコードであると見なされRecordReaderていたでしょう。明らかに、これはほとんどのアプリケーションが望んでいるものではありません。f gh i j

あなたの質問に答えると、WordCount プログラムでは、レコード境界が何であるかは問題ではありませんが、同じ単語が異なる論理分割に分割される可能性があります。したがって、サイズに基づく論理分割は、WordCount プログラムには十分ではありません。

すべての MapReduce プログラムは、レコードの境界を「尊重」します。そうでなければ、あまり役に立ちません。

于 2015-08-10T22:39:34.253 に答える
0

フレームワークで指定されたデフォルトの RecordReader とデフォルトの InputSplit を使用するため、WordCount の例では RecorderReader の実装を確認できません。

それらの実装を確認したい場合は、Hadoop ソース コードで見つけることができます。

レコーダ リーダーとその機能の詳細については、pl. 参照: https://hadoopi.wordpress.com/2013/05/27/understand-recordreader-inputsplit/

于 2015-08-10T21:26:18.180 に答える