0

Hadoopについて簡単に知っています

それがどのように機能するのか知りたいです。

正確に言うと、入力ファイルをどの程度正確に分割/分割するかを知りたいです。

サイズの点で等しいチャンクに分割されていますか?

またはそれは構成可能なものです。

私はこの投稿を読みましたが、理解できませんでした

4

2 に答える 2

1

FileInputFormatこれは、ほとんどのファイルベースの形式で基本クラスで定義されている InputFormat に依存します。

Hadoop が単一のファイルを取得し、それを単一の分割として処理するか、ファイルを複数の分割に分割するかを示す、構成可能なオプションがいくつかあります。

  • 入力ファイルが圧縮されている場合、入力形式と圧縮方法は分割可能である必要があります。たとえば、Gzip は分割可能ではありません (ファイル内のあるポイントをランダムにシークして、圧縮されたストリームを復元することはできません)。BZip2 は分割可能です。詳細については、入力形式の特定のInputFormat.isSplittable()実装を参照してください
  • ファイル サイズが定義された HDFS ブロック サイズ以下の場合、hadoop はおそらく単一の分割でファイルを処理します (これは構成可能です。分割サイズのプロパティについては後述します)。
  • ファイル サイズが定義された HDFS ブロック サイズよりも大きい場合、hadoop はほとんどの場合、基になるブロックに基づいてファイルを複数の分割に分割します (4 つのブロックは 4 つの分割になります)。
  • ブロックを分割に分割するときの入力形式に役立つmapred.min.split.sizeとの2 つのプロパティを構成できます。mapred.max.split.size最小サイズは入力フォーマットによってオーバーライドされる場合があることに注意してください (最小入力サイズが固定されている場合があります)。

詳細を知りたい場合、およびソースを確認することに慣れている場合は、getSplits()メソッドを確認してくださいFileInputFormat(新しい API と古い API のメソッドは同じですが、若干の違いがある場合があります)。

于 2012-05-23T13:10:10.580 に答える
0

map-reduce ジョブ (または pig/hive ジョブ) を送信すると、Hadoop は最初に入力分割を計算します。各入力分割サイズは通常、HDFS ブロック サイズに等しくなります。たとえば、サイズが 1GB のファイルの場合、ブロック サイズが 64MB の場合、16 の入力分割があります。ただし、分割サイズは、HDFS ブロック サイズよりも小さい/大きいように構成できます。入力分割の計算は FileInputFormat で行われます。これらの入力分割ごとに、map タスクを開始する必要があります。

ただし、次のプロパティを構成することで、入力分割のサイズを変更できます。

mapred.min.split.size: The minimum size chunk that map input should be split into.
mapred.max.split.size: The largest valid size inbytes for a file split. 
dfs.block.size: The default block size for new files.

入力分割の式は次のとおりです。

Math.max("mapred.min.split.size", Math.min("mapred.max.split.size", blockSize));

ここで例を確認できます。

于 2015-02-13T19:46:27.000 に答える