Cloud computing competition by Hapyrus

9
INTEROP クラウドコンピューティング コンペティション2010 HadoopクラスタをZERO-CONF100+台まで拡張チャレンジ」 チーム ハピルス 藤川幸一 @fujibee 平野智也 @tomoya55 株式会社シリウステクノロジーズ

description

Presentation for cloud competition in INTEROP 2010

Transcript of Cloud computing competition by Hapyrus

Page 1: Cloud computing competition by Hapyrus

INTEROPクラウドコンピューティングコンペティション2010

「HadoopクラスタをZERO-CONFで100+台まで拡張チャレンジ」

チームハピルス藤川幸一@fujibee平野智也@tomoya55

株式会社シリウステクノロジーズ

Page 2: Cloud computing competition by Hapyrus

Hadoopとは?

• 大規模データ並列分散処理フレームワーク

• Google MapReduceのオープンソースクローン

• テラバイトレベルのデータ処理に必要

–標準的なHDDがRead 50MB/sとして400TB(Webスケール)のReadだけで2000時間

–分散ファイルシステムと分散処理フレームワークが必要

Page 3: Cloud computing competition by Hapyrus

Hadoopクラスタ拡張の現状

• マスタの設定ファイルにスレーブの場所を記述

• すべてのスレーブにHadoopパッケージをインストール

• それぞれのスレーブにタスク用の設定ファイルを配置

などなど

⇒スレーブが大量にあると手間がかかる!

Page 4: Cloud computing competition by Hapyrus

HudsonでZERO-CONFHadoopクラスタ拡張• Hadoopスレーブ配布フレームワークとしてHudsonを利用する

• Hudsonはビルドツールとして知られているが実は分散フレームワークとして利用できる– HudsonはZERO-CONFでスレーブを簡単にアタッチすることが可能

– さらにHudsonのマスタとスレーブはそれぞれ、Hadoopのマスタとスレーブを立ち上げることが可能

よってHudsonのスレーブ追加ツールを開発すれば、HadoopのZERO-CONFクラスタ拡張が可能!

Page 5: Cloud computing competition by Hapyrus

構成図

Hudsonマスタ

Hudsonスレーブ

Hudsonスレーブ

Hudsonスレーブ

Hadoopマスタ Hadoop

スレーブ

Hadoopスレーブ

Hadoopスレーブ

起動 起動

起動

起動

ジョブ実行

同ノード同ノード

×100

Page 6: Cloud computing competition by Hapyrus

Hadoop Papyrus

• HadoopジョブをRubyのDSLで実行できるオープンソースフレームワーク

–本来HadoopジョブはJavaで記述する

– Javaだと複雑な記述がほんの数行で書ける!

• IPA未踏本体2009年上期のサポートを受け藤川によって開発されている

• Hudson上でジョブを記述/実行が可能

Page 7: Cloud computing competition by Hapyrus

package org.apache.hadoop.examples;

import java.io.IOException;import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.Mapper;import org.apache.hadoop.mapreduce.Reducer;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.util.GenericOptionsParser;

public class WordCount {

public static class TokenizerMapper extendsMapper<Object, Text, Text, IntWritable> {

private final static IntWritable one = new IntWritable(1);private Text word = new Text();

public void map(Object key, Text value, Context context)throws IOException, InterruptedException {StringTokenizer itr = new StringTokenizer(value.toString());while (itr.hasMoreTokens()) {word.set(itr.nextToken());context.write(word, one);}}}

public static class IntSumReducer extendsReducer<Text, IntWritable, Text, IntWritable> {private IntWritable result = new IntWritable();

public void reduce(Text key, Iterable<IntWritable> values,Context context) throws IOException, InterruptedException {int sum = 0;for (IntWritable val : values) {sum += val.get();}result.set(sum);context.write(key, result);}}

public static void main(String[] args) throws Exception {Configuration conf = new Configuration();String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();if (otherArgs.length != 2) {System.err.println("Usage: wordcount <in> <out>");System.exit(2);}Job job = new Job(conf, "word count");job.setJarByClass(WordCount.class);job.setMapperClass(TokenizerMapper.class);job.setCombinerClass(IntSumReducer.class);job.setReducerClass(IntSumReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);FileInputFormat.addInputPath(job, new Path(otherArgs[0]));FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));System.exit(job.waitForCompletion(true) ? 0 : 1);}}

同様な処理がJavaでは70行必要だが、Hadoop Papyrusだと10行に!

dsl 'LogAnalysis‘

from ‘test/in‘to ‘test/out’

pattern /¥[¥[([^|¥]:]+)[^¥]:]*¥]¥]/column_name :link

topic "link num", :label => 'n' docount_uniq column[:link]

end

Javaの場合

Hadoop Papyrus

Page 8: Cloud computing competition by Hapyrus

今回のチャレンジ

1. Hudsonのスレーブを自動起動するスクリプトを準備

2. Hudsonのスレーブを起動するだけでHadoopクラスタに自動追加されるデモ

3. 100台Hadoopクラスタ ZERO-CONF起動!

4. そのクラスタでHadoop PapyrusにてWikipedia全データのリンクをカウントするジョブ実行

5. 100台以上何台いけるかチャレンジ!

Page 9: Cloud computing competition by Hapyrus

ありがとうございました

Twitter ID: @fujibee / @tomoya55 / @hapyrus