2017-09-20 14 views
0

MapReduce、特に以下のクエリを覚えようとしています。Hadoopマッパーは、部分的に次のブロックに流出するレコードでどのように動作しますか?

HDFSのデータはブロックに分割され、通常は一度に1つのブロックで動作します。私たちはrecordが別のブロックにこぼれ落ちることがあります。たとえば、

データセット:「こんにちは、どうしていますか」;このデータは2つの異なるブロックに流出する可能性があります。

ブロック1:

hello, how a 

ブロック2:マッパーがブロック1で動作するかどうか

re 
you doing 

さて、どのようにマッパーはブロック2にこぼしたブロック1から "フル" のレコードを取得していますか?

私はこれを理解するのに役立つだろうか?

答えて

1

これは複数のブロックとしてHDFSに保存できるファイルで動作します。しかし、マッパーがファイルを操作している限り、ブロックと分割された場所は関係ありません。ファイルとその完全な内容が表示されます。

1

ブロックはデータの物理的な分割であり、InputSplitは論理的なデータの分割です。 Input Splitは、recordReaderがデータをマッパーに提示する方法です。

データが格納されると、レコードが2つのブロックに分割される可能性があります。 InputSplitには実際のデータは含まれていませんが、データへの参照が含まれています。 InputSplitは、個々のMapperによって処理されるデータを表します。通常、入力にバイト指向のビューを表示し、これを処理してレコード指向のビューを提示するジョブのRecordReaderの責任を負います。 RecordReaderは、通常、InputSplitによって提供される入力のバイト指向のビューを変換し、処理のためにMapperおよびReducerタスクのレコード指向のビューを表示します。したがって、レコード境界を処理し、キーと値でタスクを提示する責任があると想定します。

データがどのように分割されるかは、InputFormatによって異なります。デフォルトのInputFormatは、InputSplitにlineFeedを使用するFileInputFormatです。

も参照してください:InputSplitRecordReader

関連する問題