2016-03-20 8 views
0

HadoopのMapReduceでわかっているように、マッパーはHDFSのノードに格納されているブロックから読み取ります。しかし、マッパーはブロックから実際にどのように読み込みますか?マッパーが分割サイズに達するまで、ブロックはバイトをマッパーに連続的に送信しますか?それとも何か他のことをしていますか?ブロックから読み取るマッパーを含むHadoop javaファイル

もしそうなら、どのjavaファイルでこれが起こりますか? また、私はHadoop 2.7.1を使用しています。

InputSplit:

答えて

2

のHadoopのMapReduceジョブ入力フォーマットは、2つの主要コンポーネントが含まれている個々のマップタスクへの入力を構成するフラグメントに入力されたデータソース(例えば、入力ファイル)を分割します。これらの断片は「分割」と呼ばれます。たとえば、ほとんどのファイルは、HDFS内の基礎となるブロックの境界で分割され、FileInputSplitクラスのインスタンスで表されます。ファイルを分割する方法の背後にあるロジックは、InputSplitによって実装されています。

RecordReader:Splitからデータを読み取り、Map-Reduceジョブに送信します。 TextInputFormatはファイルをバイトオフセットで厳密に分割します。分割の終了オフセットは行の途中にある可能性があります。そのような場合、行末が再配置されて現在のマッパーに渡されるまで、RecordReaderのロジックを実装して次の分割からデータを読み込む必要があります。

詳細はlinkを参照してください。

+0

私はRecordReader.javaとInputSplit.javaを確認していないし、何があります何らかのヒントを示すコードの一部ですが、ファイルの最後まで読み込むループです。 – IFH

+0

RecordReader.javaとInputSplit.javaの両方がインタフェースであるため、これらのインタフェースを実装するクラスのTextInputFormatなどの入力フォーマットの実装をチェックする必要があります。 – donut

2

InputFormatには、Map-Reduceジョブの入力仕様が記述されています。

  1. 検証ジョブの入力仕様: 地図-削減の枠組みは、仕事へののInputFormatに依存しています。
  2. 入力ファイルを論理InputSplitsに分割し、それぞれを個別のMapperに割り当てます。
  3. Mapperによる処理のために論理InputSplitから入力レコードを収集するために使用されるRecordReader実装を提供します。

InputSplitは、個人によって処理されるデータを表す。Mapper

分割の仕組みを理解するにはFileInputFormatコードをご覧ください。

API:

public List<InputSplit> getSplits(JobContext job 
            ) throws IOException { 

RecordReaderがマッパーへの入力のためのキー/値のペアにデータを分割します。

RecordReaderタイプが複数あります。

CombineFileRecordReader, CombineFileRecordReaderWrapper, ComposableRecordReader, 
DBRecordReader, KeyValueLineRecordReader, SequenceFileAsTextRecordReader, 
SequenceFileRecordReader 

が最も頻繁に1を使用:KeyValueLineRecordReader

は、読み取りの内部でより良く理解するための関連SEの質問を見てください: How does Hadoop process records split across block boundaries?

+0

圧縮されたテキストファイルをHDFSに転送しましたが、RecordReaderはWordCountジョブを実行すると使用しますか? – IFH

+0

CustomFileInputFormat&CustomLineReader。これらの2つの芸術品を見てみましょう:https://hadoopi.wordpress.com/2013/05/27/understand-recordreader-inputsplit/およびhttp://cutler.io/2012/07/hadoop-processing-zip-files -in-mapreduce/ –

+0

CustomFileInputFormatとCustomLineReader(Hadoop 2.7.1)を見つけることができないようです。私はこれがリンクのどれが使用しているのか理解していますが、Hadoopはどちらを使いますか? – IFH

関連する問題