4

SLES 10(SUSE)でHadoop0.20.1を実行しています。

マップタスクはファイルを取得してさらにいくつかを生成し、次にこれらのファイルから結果を生成します。パフォーマンスが良く、衝突がないように、これらのファイルをどこに配置すればよいか知りたいです。Hadoopがディレクトリを自動的に削除できるのであれば、それは素晴らしいことです。

現在、一時フォルダーとタスクIDを使用して一意のフォルダーを作成し、そのフォルダーのサブフォルダー内で作業しています。

reduceTaskId = job.get("mapred.task.id");
reduceTempDir = job.get("mapred.temp.dir"); 
String myTemporaryFoldername = reduceTempDir+File.separator+reduceTaskId+ File.separator;       
File diseaseParent = new File(myTemporaryFoldername+File.separator +REDUCE_WORK_FOLDER);  

このアプローチの問題は、それが最適かどうかわからないことです。また、新しいフォルダをそれぞれ削除する必要があります。そうしないと、スペースが不足し始めます。ありがとうakintayo

(編集)マップの存続期間を超えて不要なファイルを保持するのに最適な場所は、マップタスクの終了時に削除されるパスを提供するjob.get( "job.local.dir")であることがわかりました。 。削除がキーごとに行われるのか、タスクトラッカーごとに行われるのかわかりません。

4

1 に答える 1

0

このアプローチの問題点は、並べ替えとシャッフルによって、データがローカライズされた場所から離れてしまうことです。

あなたのデータについてはよくわかりませんが、分散キャッシュがうまくいくかもしれません

${mapred.local.dir}/taskTracker/archive/ : 分散キャッシュ。このディレクトリには、ローカライズされた分散キャッシュが保持されます。したがって、ローカライズされた分散キャッシュがすべてのタスクとジョブで共有されます

http://www.cloudera.com/blog/2008/11/sending-files-to-remote-task-nodes-with-hadoop-mapreduce/

「MapReduce プログラムでは、実行前に各 map または reduce タスクで 1 つ以上のファイルを読み取る必要があるのが一般的です。たとえば、一連のレコードを処理する前に解析する必要があるルックアップ テーブルがある場合があります。これに対処するには、シナリオでは、Hadoop の MapReduce 実装には、タスク実行ノードへのファイルのコピーを管理する分散ファイル キャッシュが含まれています。

DistributedCache は Hadoop 0.7.0 で導入されました。その起源の詳細については、HADOOP-288 を参照してください。DistributedCache に関する既存のドキュメントは多数あります。Hadoop FAQ、MapReduce チュートリアル、Hadoop Javadoc、および Hadoop ストリーミング チュートリアルを参照してください。既存のドキュメントを読み、DistributedCache の使用方法を理解したら、戻ってきてください。」

于 2010-07-30T20:46:37.027 に答える