2017-10-26 20 views
1

私の質問は、スペースで区切られた100ワードのテキストファイルがあり、ワードカウントプログラムを実行する必要があるということです。Hadoop Mapreduce HDFSブロック分割

私の名前ノードでファイルをHDFSブロックに分割すると、分割が単語の最後でのみ行われることをどのように確認できますか?

つまり、テキストファイルで50番目の単語がHadoopの場合、64MBのブロックに分割すると、現在のブロックの記憶域がHadoopという単語の中央に64MBに達し、もう片方のブロックには「持っていた」と他の「うん」があります。

ご迷惑をおかけするかもしれませんが、答えをご提供ください。ありがとうございます。

答えて

1

あなたの答えはinputsplitです。

HDFSはファイルの内容を知らないため、データを複数のブロックに格納している間は、各ブロックの最後のレコードが壊れている可能性があります。レコードの最初の部分は1つのブロックにあり、同じレコードの最後の部分は他のブロックにある可能性があります。

ブロックでこのタイプの問題を解決するために、MapReduceは入力分割の概念を使用します。

「ブロック」は、128MBのサイズのデータ​​を複数のデータノードに分散して物理的に分割したものに過ぎませんが、「入力分割」はデータの論理的な分割です。

MapReduceプログラムを実行している間、マッパーの数は入力スプリットの数に依存し、入力スプリットの処理中に、壊れたレコードを含む次のブロックの位置が含まれます。

上記の図は、HDFSブロックが3つあり、ブロック1のデータの最後の部分がブロック2に格納されていることを示しています。この場合、入力分割はBlock-2の位置を取得して、破損したレコードを取得します。

hadoopchannel

関連する問題