5

HadoopのMap/Reduceフレームワークに関連するデータの局所性を理解しようとしていますが、特に、どのコンポーネントがデータの局所性を処理するかを理解しようとしています(つまり、入力形式ですか?)

Yahooの開発者ネットワークページには、「Hadoopフレームワークは、分散ファイルシステムからの知識を使用して、データ/レコードの場所の近くでこれらのプロセスをスケジュールします」と記載されています。これは、HDFS入力形式が名前ノードにクエリを実行して、目的のデータが含まれているノードを判別し、可能であればそれらのノードでマップタスクを開始することを意味しているようです。どのリージョンが特定のレコードを提供しているかを判別するためにクエリを実行することで、HBaseでも同様のアプローチをとることができると想像できます。

開発者が独自の入力形式を作成する場合、データの局所性を実装する責任がありますか?

4

2 に答える 2

8

あなたが正しい。FileInputFormatクラスとgetSplits()メソッドを見ている場合。ブロックロケーションを検索します。

BlockLocation[] blkLocations = fs.getFileBlockLocations(file, 0, length);

これは、FileSystem クエリを意味します。これは 内で発生しJobClient、結果が SequenceFile に書き込まれます (実際には生のバイト コードです)。そのため、Jobtracker は後でジョブを初期化するときにこのファイルを読み取り、入力分割にタスクを割り当てるだけです。

しかし、データの配布は NameNodes の仕事です。

今あなたの質問に:通常、あなたはから拡張していFileInputFormatます。したがって、 のリストを返すInputSplit必要があり、初期化ステップでは、分割の場所を設定する必要があります。たとえばFileSplit

public FileSplit(Path file, long start, long length, String[] hosts)

したがって、実際にはデータの局所性自体を実装するのではなく、どのホストで分割が見つかるかを伝えているだけです。これは、インターフェイスを使用して簡単にクエリできFileSystemます。

于 2011-05-25T18:53:42.697 に答える