Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Hadoop - OSC2010 Tokyo/Spring

7,074 views

Published on

"Hadoop - OSC2010 Tokyo/Spring "

Published in: Technology, Education
  • Be the first to comment

Hadoop - OSC2010 Tokyo/Spring

  1. 1. Hadoop入門 オープンソースで作るGoogleのような分散処理基盤 2010年2月27日 山下 真一 shin1.ym あっと gmail OSC 2010 Tokyo/Spring
  2. 2. アジェンダ Hadoopの基礎知識 どのあたりがGoogleのようなのか? Hadoopの使い方 どう使うのか? Hadoopを簡単に・・・ 手軽に使いたい! Hadoopのポイント 注意点とか応用とか 2 OSC 2010 Tokyo/Spring
  3. 3. Hadoopの基礎知識 OSC 2010 Tokyo/Spring
  4. 4. Hadoopとは? Googleの分散処理システムのOSS版 GFS HDFS (Hadoop Distributed File System) MapReduce MapReduce Framework http://hadoop.apache.org/common/ Apache Projectで開発中 Javaで記述 Yahoo!版 Apache 2.0 ライセンス リリース最新版0.20.2, 開発版0.21~ Cloudera版 4 OSC 2010 Tokyo/Spring
  5. 5. Hadoopを使っているところ Yahoo! Facebook Last.fm Amazon Veoh IBM VISA JP Morgan Chase 楽天 Baidu NTTデータ はてな China Mobile 5 OSC 2010 Tokyo/Spring
  6. 6. Hadoopの特長 何日経っても終わらない バッチ処理 ・・・・・・・・ たくさんのデータ 短時間で終わらせられる! ・・・・・・・・ 6 OSC 2010 Tokyo/Spring
  7. 7. Hadoopの特長 色々なデータ スケーラビリティ コモディティなサーバ 7 OSC 2010 Tokyo/Spring
  8. 8. Hadoopの主な使い方 集計 ABC, 100点 ZZZ, 50点 XYZ, 90点 抽出 その他には・・・ 2月27日発売のゲーム ・○×ファンタジー 変換 ・クイズ☆?! ・▲□サッカー1X 分散ストレージ 分析 8 OSC 2010 Tokyo/Spring
  9. 9. Hadoopの不向きなこと 少量データの扱い方 0'80'' ・・・ ×10000000 1KB リアルタイム処理 データの追記 × OSC 2010 Tokyo/Spring
  10. 10. Hadoopの構成 Pig Hive ZooKeeper Sawzall Chubby MapReduce HBase MapReduce BigTable HDFS GFS Hadoop Google メインプロジェクト サブプロジェクト 10 OSC 2010 Tokyo/Spring
  11. 11. HDFSイメージ 巨大なストレージ ファイル格納や取り出し HDFS Hadoopクライアント DataNode NameNode 11 OSC 2010 Tokyo/Spring
  12. 12. HDFSの構成 DataNode ブロック ① ① ③ ② 状態監視 管理 Heartbeat ② ① ② メタ情報 管理 ③ ① ② ① NameNode (MASTER) ② ① ③ ① 3 1 2 ① ① ② ファイル ブロック Hadoopクライアント DataNode (HDFS上で保持) (SLAVE) 12 OSC 2010 Tokyo/Spring
  13. 13. HDFSの異常時 × × DataNode ブロック ① ① ③ ② 状態監視 × ×× 管理 × × ② ① ② メタ情報 管理 ③ ① ② ① ② NameNode ② ① ③ ① ② HDFS停止 HDFS破壊 ① ① ① ② NameNode=単一障害点 レプリケーションの発生 DataNode DataNode=単体で故障しても大丈夫 13 OSC 2010 Tokyo/Spring
  14. 14. MapReduceの流れ This is a pen. <Pen,1> I played tennis. <Tennis,1> ・・・ <This,1> <Pen: [1, 1, 1]> ・・・ <This: [1, 1]> Map <Pen, 3> Reduce <This, 2> ・・・ Map Reduce Shuffle ・・・ Map Keyで集約 <Key, Value>の形でデータを管理 14 OSC 2010 Tokyo/Spring
  15. 15. HadoopでのMapReduceイメージ 巨大なストレージ 処理 MapReduceジョブの実行 HDFS 処理 Hadoopクライアント TaskTracker JobTracker 15 OSC 2010 Tokyo/Spring
  16. 16. MapReduceの構成 MapReduceジョブ TaskTracker Map Map Reduce 管理 状態監視 タスク ① ① ③ ② 管理 Heartbeat JobTracker M R R (MASTER) R M M M NameNode M R MapReduceジョブ M R R TaskTracker タスク実行待ち Hadoopクライアント (SLAVE) タスク実行中 16 OSC 2010 Tokyo/Spring タスク実行(競争)中
  17. 17. MapReduce(TaskTracker)異常時 Map MapReduce JobTracker Heartbeat ① ① ③ ② (MASTER) M R R R M M M NameNode M R ×× MapReduceジョブ T R R TaskTracker タスク再割り当て Hadoopクライアント 17 OSC 2010 Tokyo/Spring
  18. 18. MapReduce(JobTracker)異常時 × × MapReduceジョブ × TaskTracker Map MapReduce 管理 状態監視 タスク ① ① ③ ② 管理 M M R JobTracker R M M R MapReduceジョブ・・・失敗 M R M R R TaskTracker Hadoopクライアント 18 OSC 2010 Tokyo/Spring
  19. 19. Hadoopの使い方 OSC 2010 Tokyo/Spring
  20. 20. Hadoopの動作条件 Linux JavaTM 1.6 Hadoop Windows + (Sun) + Core = (Cygwin) 試しに “localhost”上にNameNodeとDataNodeを起動させる方法 1. ダウンロードしたHadoopパッケージを展開、配置 2. 設定ファイルの確認 (./conf/core-site.xml, ./conf/hdfs-site.xml, ./conf/hadoop-env.sh) 3. NameNodeのフォーマット (./bin/hadoop namenode -format) 4. NameNode起動 (./bin/hadoop-daemon.sh start namenode) 5. DataNode起動 (./bin/hadoop-daemon.sh start datanode) 20 OSC 2010 Tokyo/Spring
  21. 21. 手軽にHadoopを使ってみたい方へ その1 Cloudera Hadoop Training VM http://www.cloudera.com/developers/downloads/virtual-machine/ その2 Amazon Elastic MapReduce http://aws.amazon.com/elasticmapreduce/ その3 Sun Grid Engine http://www.sun.com/software/sge/ 21 OSC 2010 Tokyo/Spring
  22. 22. Hadoop操作方法 コマンドラインによる操作 HDFS ファイル投入(put) ファイル取り出し(get) ファイル操作(cp, mv, rm) 権限操作(chmod, chown) ディレクトリ操作(mkdir, rmr) ファイルシステムチェック(fsck) など MapReduce ジョブ投入 ジョブ優先度設定 ジョブリスト ジョブ停止 など 22 OSC 2010 Tokyo/Spring
  23. 23. Hadoopの状態確認 Webインタフェースから状況を確認可能 HDFS http://[NameNode Address]:50070/ HDFS上のファイル情報 HDFS状態(容量、使用量、DataNodeの数や状態) MapReduce http://[JobTracker Address]:50030/ ジョブ実行状況の確認 ジョブ実行履歴・分析 23 OSC 2010 Tokyo/Spring
  24. 24. Hadoopでの MapReduceアプリケーション作成 MapReduceジョブ定義クラス 入力・出力ファイルのパス、ジョブ名、ジョブ各種設定 データ型クラス 処理内で扱うデータ型の定義 入力フォーマットクラス 入力フォーマッタの定義 Mapクラス Map処理の定義 Partitonerクラス Shuffle処理への定義 Groupingクラス Shuffle処理への定義 Reduceクラス Reduce処理の定義 出力フォーマットクラス 出力フォーマッタの定義 24 OSC 2010 Tokyo/Spring
  25. 25. MapReduceジョブのデモ Hadoop付属のMapReduceサンプルを実行 WordCount PiEstimator ファイル内の モンテカルロ法での円周率計算 単語を抽出・集計 TeraSort Grep データの並び替え データ抽出 25 OSC 2010 Tokyo/Spring
  26. 26. WordCountのソースコード public c la s s WordCount { public s tatic c la s s TokenizerMapper e x te nds Mapper<Object, Text, Text, IntWritable>{ public s tatic void main(String[] args) throw s Exception { Configuration conf = ne w Configuration(); private fina l s ta tic IntWritable one = ne w IntWritable(1); String[] otherArgs = private Text word = ne w Text();     ne w GenericOptionsParser(conf, args).getRemainingArgs(); public void map(Object key, Text value, Context context if (otherArgs.length != 2) { ) throw s IOException, InterruptedException { System.err.println("Usage: wordcount <in> <out>"); StringTokenizer itr = ne w System.exit(2); StringTokenizer(value.toString()); } w hile (itr.hasMoreTokens()) { Job job = ne w Job(conf, "word count"); word.set(itr.nextToken()); job.setJarByClass(WordCount.c la s s ); job.setMapperClass(TokenizerMapper.c la s s ); Map context.write(word, one); } job.setCombinerClass(IntSumReducer.c la s s ); } job.setReducerClass(IntSumReducer.c la s s ); } job.setOutputKeyClass(Text.c la s s ); public s tatic c la s s IntSumReducer job.setOutputValueClass(IntWritable.c la s s ); e x te nds Reducer<Text,IntWritable,Text,IntWritable> { FileInputFormat.addInputP ath(job, ne w Path(otherArgs[0])); private IntWritable result = ne w IntWritable(); FileOutputFormat.setO utputP ath(job, ne w Path(otherArgs[1])); System.exit(job.waitForCompletion(true ) ? 0 : 1); public void reduce(Text key, Iterable<IntWritable> values, } Context context } int sum = 0; ) throw s IOException, InterruptedException { Job for (IntWritable val : values) { sum += val.get(); } result.set(sum); Reduce 約50行 context.write(key, result); 26 } } OSC 2010 Tokyo/Spring
  27. 27. Hadoopを簡単に使うために OSC 2010 Tokyo/Spring
  28. 28. HadoopのMapReduceの特徴 Javaによる記述 記述量は10数行~数百行 Javaわかんない、、、 好きな言語で記述したい、、、 Perl Python Hadoop Streaming Ruby Shell Script Map用、Reduce用のスクリプトやコマンドで実現 28 OSC 2010 Tokyo/Spring
  29. 29. MapReduceを意識しないツール MapReduceラッパ的なツールをあります! Pig Pig Latin を記述することでMapReduceを実行 Yahoo! 内では30%~の処理はPigで実行 Hive どちらも数行程度で HiveQLと呼ばれるSQLに似た言語で MapReduceを実行 MapReduceを実行できる! Facebook 内では大半の処理をHiveで実行 29 OSC 2010 Tokyo/Spring
  30. 30. PigやHiveの良い点 MapReduceの実装を意識しなくても良い! JOINとか、、、 コーディング知識とか、、、 最適なジョブ実行計画を作成 個別関数の組み込み 足りない機能は容易に追加可能 思い立ったら即実行! 30 OSC 2010 Tokyo/Spring
  31. 31. WordCountをPigで書いたら、、、 Rawdata = LOAD '/tmp/' USING PigStorage(',') AS (row:chararray); Words = FOREACH Rawdata GENERATE FLATTEN (TOKENIZE((chararray)$0)); Grouped = GROUP Words BY $0; Counts = FOREACH Grouped GENERATE COUNT(Words), group; Ordered = ORDER Counts by $0 DESC; STORE Ordered INTO 'pig-wordcount'; 6行でWordCountを実現!!! 31 OSC 2010 Tokyo/Spring
  32. 32. Hadoopの注意点 OSC 2010 Tokyo/Spring
  33. 33. 注意点その1:ログ とにかくログがたくさん出ます! MapReduceジョブ、、、 NameNode JobTracker ブロック情報、HDFS操作、、、 DataNode TaskTracker Taskの進捗状況、、、 実行したTaskごとに出力 MapTask ReduceTask 実行したTaskごとに出力 ログ格納領域はHadoopとは別に用意したほうがいいでしょう 33 Chukwa OSC 2010 Tokyo/Spring
  34. 34. 注意点その2:メモリ 案外メモリも消費します! NameNode JobTracker 1ファイル≒200Byte、、、 入力データ、Task情報 TaskTracker 1つのTaskにつき200MB(デフォルト) MapTask ReduceTask 34 OSC 2010 Tokyo/Spring
  35. 35. その他に、、、 OSC 2010 Tokyo/Spring
  36. 36. その他のHadoop関連パッケージ Cascading Sqoop MapReduce処理支援 SQL to Hadoop Hadoop Spring Framework Spring Frameworkとの組み合わせ HadoopDB RDBMSとのハイブリット 少量データ、追記 HBase Mountable HDFS 分散Key-Valueストア HDFSをファイルシステム(ext3など)に マウント HyperTable 36 OSC 2010 Tokyo/Spring
  37. 37. Hadoopユーザ会 待望のHadoopユーザ会が 発足しました! http://groups.google.co.jp/group/hadoop-jp 37 OSC 2010 Tokyo/Spring
  38. 38. まとめ ● Hadoop: OSSで構築するGoogleのような処理基盤 HDFS MapReduce ● 大規模なデータを簡単な記述で処理できる Javaでも数十行、PigやHiveならもっと簡単に! ● いろんなデータを”とりあえず”分析しましょう! 38 OSC 2010 Tokyo/Spring

×