1

私の質問はばかげているように聞こえるかもしれませんが、Hadoop map reduce は初めてです。だから、私が理解するのは難しいです。

Map Reduce で K 手段のクラスタリングを実装し、Cloudera CDH4 (4.1.1) を使用しています。
データは、x 座標と y 座標を持つ点で構成されます。したがって、すべての重心の変化が 0.1 未満になるまで、各ステップで重心を更新します。

最初の反復では、サンプルのセントロイド ファイルを分散キャッシュに配置します。

if (iteration == 0) {
    Path hdfsPath = new Path(input + "/centroid.txt");
    DistributedCache.addCacheFile(hdfsPath.toUri(), conf);
} else {
    Path hdfsPath = new Path(again_input + "/part-00000");
    DistributedCache.addCacheFile(hdfsPath.toUri(), conf);

次の反復では、最初の反復の出力と同じ again_input ディレクトリを取得しています。このディレクトリには、新しく計算された重心が格納されています。

ただし、マッパーは、最初の反復でフェッチしたセントロイド ファイルを再度フェッチしています。
以下は、マッパー クラスでセントロイド ファイルを取得するコードです。

Path[] cacheFiles = DistributedCache.getLocalCacheFiles(job);
BufferedReader cacheReader = new BufferedReader(new FileReader(cacheFiles[0].toString()));

疑問 1: ジョブが完了すると、分散キャッシュはすべてのファイルを消去しますか、それとも保持しますか? たとえば、centroid.txt は反復 1 の後にクリアされます。

疑問 2: 正しいファイルにアクセスしていますか?

4

1 に答える 1