1

これらのファイルのセットがあります-

objectA-record-data.logファイル - タイムスタンプ付きの複数行のデータが含まれています。

objectA-record-metadata.logファイル - 1 行だけが含まれます。objectA のすべてのレコードのメタデータと考えてください。

これらは一緒に処理用の 1 つのレコードを形成します。

データファイルを処理できました。マッパーは objectA をデータ ファイル内のすべての行のキーとして設定し、リデューサーはテキスト ファイルを処理して出力します。ここで、これらの各レコードにもメタデータを追加したいと思います。どうすればそれを行うことができますか?

4

2 に答える 2

1

DistributedCache を使用します。

ドライバー/構成クラス:

DistributedCache.addCacheFile(new URI("/user/chris/theMetaDataFile.txt"), conf);

マッパーで:

public void setup(Context context) {
    Configuration conf = context.getConfiguration();
    Path[] cachedFiles = DistributedCache.getLocalCacheFiles(conf);
    File metadataFile = new File(chachedFiles[0].toString());

    // metadataFile can now be read and the results stored locally for use in the map method
}
于 2012-12-18T23:05:38.923 に答える
0

データファイルとメタファイルの間に何らかのマッピングがあるに違いないと思います。メタファイルは、次のようにMapperのセットアップ方法で取得できます

protected void setup(
        org.apache.hadoop.mapreduce.Mapper<Long, Text, Text, Text>.Context context)
        throws java.io.IOException, InterruptedException {
    FileSplit split=(FileSplit)context.getInputSplit();
    Path path=split.getPath();
    Path metaFile=getMetaFile(path);
};
于 2012-12-19T04:42:28.210 に答える