私の仕事の流れは以下の通りです。
膨大な量のデータを処理しています。MapFile
キャッシュする必要がある があります。このファイルのサイズは現在 1 GB ですが、最終的には大きくなると思います。
MapFile の内容は次のようになります。
12345,45464 192.34.23.1
33214,45321 123.45.32.1
- では、
map-phase
にある入力ファイルから各レコードを処理しますTextInputFormat
。行を解析 (トークンごとに分割) し、最初の 2 つのトークン (token1 と token2) を取得します。
(token1,token2) のペアがキャッシュされたファイルにない場合は、API 呼び出しを実行して情報を取得し、(可能であれば) キャッシュに保存して処理を続行します。
private Parser parser = new customParser();
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
parser.parse(value);
Pair pair = new Pair();
pair.setFirst(parser.getFirst());
pair.setSecond(parser.getSecond());
IP ip = null;
//here is the catch
//check if pair exists in cache
if cache.contains(pair){
ip=cache.get(pair);
}
else {
ip=getFromAPI(pair);//This does API call outside network.
cache.put(pair,ip);
}
context.write(pair,ip);
}
}
ここで私が見ている主な問題は
すべてのノードでキャッシュ内の大きなファイルを取得する方法。DistributedCache は、ファイルをローカル ノードにコピーすることで機能します。しかし、このファイルはサイズが大きいため、ここにネットワーク トラフィックが関係しており、私の日常業務では、ファイルを配布し続けたくありません。
MapFile(キャッシュ)を効率的に検索する方法、mapFile全体がメモリ内にありません。
私のキャッシュであるこのMapFileに書き込む方法。
ありがとう