2017-02-24 2 views
3

マッパーは複数のファイルを同時に処理するか、マッパーは一度に1つのファイルしか処理できませんか? - へのパスを追加ハープープのマッパーごとに1つまたは複数のファイル?

addInputPath(JobConf confに、パスパス):私はあなたがFileInputFormatの定義に行く場合は、一番上にそれを見るだろう

+0

CombineFileInputFormatを使用すると、多数の小さなファイルを処理できます。 –

答えて

5
  • 一般的なMapreduceジョブは、デフォルトでマッパーごとに1つの入力分割に従います。
  • ファイルサイズが分割サイズより大きい場合(つまり、1つの入力分割よりも が多い場合)、ファイルごとに複数のマッパーになります。
  • ファイルがGzip ファイルのように分割できない場合、またはプロセスがDistcpの場合、ファイルが細かいレベルの粒度である場合は、マッパーごとに1つのファイルです。
+1

私は入力スリップが複数のファイルのデータを持つことができると思いますこれは、1つのマッパーが複数のファイルを同時に処理できることを意味します。 – user3396729

+1

いいえ、分割はファイルレベルで行われます。各ファイルには最低1つの入力分割があり、分割は複数のファイルで構成することはできません。 2つのファイル、192MBともう1つの32MB、分割サイズが128MBの場合、結果は3(2 + 1)の入力分割になり、3つのマップタスクが実行されます。大きなファイルの2番目の分割は分割されたサイズよりも小さいですが、他のファイルの分割とマージしません。 – franklinsijo

+1

分割がファイルレベルで行われ、分割が複数のファイルで構成されていない場合、1つのマッパーが1つのファイルのデータしか持たないことを意味しますか? 1つのマッパーは1つのファイルのデータに対してのみ機能します。 – user3396729

2

それは3つのメソッドを持っているデフォルトの動作を知りたいですmap-reduceジョブの入力リスト。だから、それはあなたが

addInputPathRecursively(リスト結果、ファイルシステムFS、パス、パス、PathFilter inputFilter)を言うように、カタログ内のすべてのファイルではなく、単一のものをピックアップします - 結果に再帰的に入力されたパスにファイルを追加します。

addInputPaths(JobConf confに、文字列のcommaSeparatedPaths) - あなたは簡単にセットアップしたい任意の複数の入力をすることができ、これらの3つのメソッドを操作する仕事

を地図削減のための入力のリストに与えられたカンマ区切りのパスを追加します。 InputFormatのInputSplitsは、このデータをマッパージョブに分割し始めます。 Map-Reduceフレームワークは、ジョブのInputFormatを使用して次のことを行います。

  • ジョブの入力仕様を検証します。

  • 入力ファイルを論理InputSplitsに分割し、それぞれのファイルを個別のMapperに割り当てます。

  • Mapperによる処理のために、論理InputSplitからの入力レコードを収集するために使用されるRecordReader実装を提供します。

技術的には、単一のマッパーは、複数のファイルからのデータを含むことができる独自の部分だけを処理します。しかし、特定のフォーマットごとに、データがマッパー全体にどのように配分されるかを理解するためにInputSplitを調べるべきです。

+0

いいえ、シングルマッパーは一度に複数のファイルを処理できません。単一のmapreduceジョブは、一度に複数のファイルを処理できます。このパスの定義はすべて、ジョブではなく、タスクに関係します。 – franklinsijo

+0

@franklinsijo複数のファイルを一度に処理する際のOPの意味を誤解していると思います。つまり、入力から複数のファイルを処理できるということです。この合計入力はパーツに分割され、各マッパーはそれ自身のパーツを処理しますが、一度にいくつかのパーツは処理しません。それが私の答えの意味です。 – Alex

+0

はい、「一度に」ではなく、あなたの答えでその部分を変更する必要があります。 OPはジョブ自体ではなく、マッパーについて知りたいです。「マッパーは複数のファイルを処理しますか?」 。 – franklinsijo

関連する問題