PowerPoint プレゼンテーション

Download Report

Transcript PowerPoint プレゼンテーション

分散並列処理を意識して
• Map/Reduceに移し変えるには・・・
• 並列に実行されることを考慮しなければなりません
–
–
–
–
「多数の異なるデータに対して同じ処理」が高速化の条件
SIMD (Single Instruction Multiple Data) のイメージ?
同じ処理を実行する以上データ形式は同じでないとね
個々の処理が非同期で動かないと遅くなるでしょう
• 分散して実行されることを考慮しなければなりません
– 「処理の移動よりデータの移動のほうがコストがかかる」
– 共用データは分散ファイルシステムに格納しなければならない
→ データがデカ過ぎるとネットワーク帯域幅を食いつぶす
– 個々の処理が共通に利用するデータは最小限に抑える
Map/Reduceはハマるのか?
• Webページのクロール・解析
• 推薦リストの生成
• ユーザ嗜好の学習
KikkerMini - クラアント版Kikker
Hadoopプログラミング
Hadoop プログラムの基本形
• 大体こんな感じ・・・
import
import
import
import
org.apache.hadoop.conf.Configuration;
org.apache.hadoop.conf.Configured;
org.apache.hadoop.util.Tool;
org.apache.hadoop.util.ToolRunner;
public class HadoopApplication extends Configured implements Tool {
public int run(String[] args) throws Exception {
JobConf job = new JobConf(getConf(), KikkerMRProcessor.class);
/// ここが実質的なメインプログラム
}
public static void main(String[] args) throws Exception {
int res = ToolRunner.run(new Configuration(),
new HadoopApplication(), args);
System.exit(res);
}
}
• これで Hadoop のコンフィグレーションシステムが使える
Map/Reduceプログラムの基本形
•
当然 Map と Reduce が追加されます
public class HadoopApplication extends Configured implements Tool {
public static class Map extends MapReduceBase
implements Mapper<K0, V0, K1, V1> {
public void map(K0 key, V0 val,
OutputCollector<K1, V1> output,
Reporter reporter) throws IOException {
/// ここに Map 関数を書く
}
}
public static class Reduce extends MapReduceBase
implements Reducer<K1, V1, K2, V2> {
public void reduce(K1 key, Iterator<V1> values,
OutputCollector<K2, V2> output,
Reporter reporter) throws IOException {
/// ここに Reduce 関数を書く
}
}
public int run(String[] args) throws Exception {
JobConf job = new JobConf(getConf(), KikkerMRProcessor.class);
/// ここで入出力データのタイプやフォーマットを設定する
JobClient.runJob(job);
}
public static void main(String[] args) throws Exception {
int res = ToolRunner.run(new Configuration(),
new HadoopApplication(), args);
System.exit(res);
}
}
•
ジョブの起動は JobClient.runJob() を使います