Successfully reported this slideshow.

Cloud computing competition by Hapyrus

2,657 views

Published on

Presentation for cloud competition in INTEROP 2010

Published in: Technology, News & Politics
  • Be the first to comment

Cloud computing competition by Hapyrus

  1. 1. INTEROP クラウドコンピューティング コンペティション2010 「HadoopクラスタをZERO-CONFで 100+台まで拡張チャレンジ」 チーム ハピルス 藤川幸一 @fujibee 平野智也 @tomoya55 株式会社シリウステクノロジーズ
  2. 2. Hadoopとは? • 大規模データ並列分散処理フレームワーク • Google MapReduceのオープンソースクローン • テラバイトレベルのデータ処理に必要 – 標準的なHDDがRead 50MB/sとして400TB(Webス ケール)のReadだけで2000時間 – 分散ファイルシステムと分散処理フレームワーク が必要
  3. 3. Hadoopクラスタ拡張の現状 • マスタの設定ファイルにスレーブの場所を記 述 • すべてのスレーブにHadoopパッケージをイン ストール • それぞれのスレーブにタスク用の設定ファイ ルを配置 などなど ⇒ スレーブが大量にあると手間がかかる!
  4. 4. HudsonでZERO-CONF Hadoopクラスタ拡張 • Hadoopスレーブ配布フレームワークとして Hudsonを利用する • Hudsonはビルドツールとして知られているが実 は分散フレームワークとして利用できる – HudsonはZERO-CONFでスレーブを簡単にアタッチす ることが可能 – さらにHudsonのマスタとスレーブはそれぞれ、 Hadoopのマスタとスレーブを立ち上げることが可能 よってHudsonのスレーブ追加ツールを開発すれ ば、HadoopのZERO-CONFクラスタ拡張が可能!
  5. 5. 構成図 同ノード 同ノード Hudson Hudson スレーブ Hudson マスタ スレーブ Hudson スレーブ 起動 起動 起動 起動 Hadoop スレーブ ジョブ実行 Hadoop Hadoop スレーブ マスタ Hadoop スレーブ ×100
  6. 6. Hadoop Papyrus • HadoopジョブをRubyのDSLで実行できるオー プンソースフレームワーク – 本来HadoopジョブはJavaで記述する – Javaだと複雑な記述がほんの数行で書ける! • IPA未踏本体2009年上期のサポートを受け 藤川によって開発されている • Hudson上でジョブを記述/実行が可能
  7. 7. package org.apache.hadoop.examples; Javaの場合 import java.io.IOException; import java.util.StringTokenizer; 同様な処理がJavaでは70行必要だが、 import org.apache.hadoop.conf.Configuration; Hadoop Papyrusだと10行に! 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; IntSumReducer extends public static class import org.apache.hadoop.mapreduce.Reducer; Reducer<Text, IntWritable, Text, IntWritable> { import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; private IntWritable result = new IntWritable(); import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.util.GenericOptionsParser; public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { public class WordCount { int sum = 0; for (IntWritable val : values) { sum += val.get(); public static class TokenizerMapper extends } Mapper<Object, Text, Text, IntWritable> { result.set(sum); Hadoop Papyrus context.write(key, result); } dsl 'LogAnalysis‘ private final static IntWritable one = new IntWritable(1); } private Text word = new Text(); public static void main(String[] args) throws Exception { public void map(Object key, Text value, Context context) Configuration(); Configuration conf = new from ‘test/in‘ throws IOException, InterruptedException { String[] otherArgs = new GenericOptionsParser(conf, args) StringTokenizer itr = new StringTokenizer(value.toString()); .getRemainingArgs(); to ‘test/out’ while (itr.hasMoreTokens()) { if (otherArgs.length != 2) { word.set(itr.nextToken()); System.err.println("Usage: wordcount <in> <out>"); context.write(word, one); System.exit(2); } } } pattern /¥[¥[([^|¥]:]+)[^¥]:]*¥]¥]/ Job job = new Job(conf, "word count"); } job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); column_name :link job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); topic "link num", :label => 'n' do FileInputFormat.addInputPath(job, new Path(otherArgs[0])); FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); count_uniq column[:link] System.exit(job.waitForCompletion(true) ? 0 : 1); } } end
  8. 8. 今回のチャレンジ 1. Hudsonのスレーブを自動起動するスクリプト を準備 2. Hudsonのスレーブを起動するだけでHadoop クラスタに自動追加されるデモ 3. 100台Hadoopクラスタ ZERO-CONF起動! 4. そのクラスタでHadoop Papyrusにて Wikipedia全データのリンクをカウントする ジョブ実行 5. 100台以上何台いけるかチャレンジ!
  9. 9. ありがとうございました Twitter ID: @fujibee / @tomoya55 / @hapyrus

×