Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか

5.692 visualizaciones

Publicado el

@大江戸Ruby会議04, 2014-04-19

Publicado en: Tecnología
  • Inicia sesión para ver los comentarios

Oedo Ruby Conference 04: Ruby会議でSQLの話をするのは間違っているだろうか

  1. 1. Ruby会議でSQLの話をする のは間違っているだろうか Minero Aoki
  2. 2. 今日のお話について Theme of this session
  3. 3. 「技術的に濃い 話題がいいです」 Akira Matsuda said I expect you deep technical talk.
  4. 4. 「濃い話」is 何 What s deep talk???
  5. 5. Rubyの実装の話とか もう別に濃くない Ruby implementation is not deep already, so I speak about another theme.
  6. 6. 25分でわかる ビッグデータ分析 ∼MapReduce追悼∼ Big Data Analytics in 25 minutes
  7. 7. トータル100TBくらいの データを分析するとしよう Suppose you must analyze 100TB text data
  8. 8. 1CPUとか もうマヂムリ… コンピュータ プログラム データ Single CPU cannot handle 100TB
  9. 9. そうだ分散処理しよう ノード0 ノード1 ノード2 ノード3 プログラム プログラム プログラム プログラム データ データ データ データ You need more computers (distributed processing)
  10. 10. でも分散処理って めんどい…マヂムリ… Distributed processing is too difficult…
  11. 11. そこで並列RDBですよ Parallel RDB may help you.
  12. 12. Parallel RDB Node 0 Node 1 Node 2 Node 3 Front End Front End Front End Front End Back End Back End Back End Back End
  13. 13. 並列RDBの特長 1 ノードを増やせば線形に速くなる! 2 標準SQLが使える! 3 クライアントからは1台に見える! has linear scalability You can use SQL Looks as the one computer Parallel RDB is great because…
  14. 14. 並列RDB超スゴイ age age マック Parallel RDB is great
  15. 15. いろいろな商用並列RDB Database Vendor Since Teradata Teradata 1983 Teradata Aster Teradata 2005 PureData System for Analytics IBM 2000 Exadata Oracle 2008 Greenplum Pivotal 2003 SQL Server PDW Microsoft 2010くらい Redshift Amazon 2012 Various parallel RDBs
  16. 16. Here Comes a New Challenger!!
  17. 17. since 2005
  18. 18. Hadoop Architecture HDFS: Distributed File System MapReduce: Compute Framework (Hive: SQL interface)
  19. 19. Hadoopの特徴 1 データはテーブルではなくファイル 2 処理にはMapReduceを使う(使っていた) 3 Hiveを乗せるとSQLっぽい言語でも書ける Hadoop data is plain file Processed by MapReduce Hive allows you to write SQL-like query
  20. 20. 猫も 子も MapReduce Big Data meant MapReduce few years ago
  21. 21. MapReduce k1, v1 k2, v2 k3, v3 k4, v4 k5, v5 k6, v6 M a p k'1, v'1 k'1, v'2 k'1, v'3 k'2, v'4 k'3, v'5 k'3, v'6 k''1, v''1 k''2, v''2 k''3, v''3 R e d u ce
  22. 22. Map関数とReduce関数を 書いたらよしなに 分散してくれるフレームワーク You just write Map&Reduce functions, Hadoop serves the rest
  23. 23. Q1. SQLとMapReduce どっちがいいの?! Which is good, SQL and MapReduce
  24. 24. ビジネス的な答え: SQL
  25. 25. なぜSQLか 1 SQL書けてもJava書けない人は多い 2 既存のSQLを使ったアプリが動かない 3 MapReduce関数を書くのは高コスト Many people can write SQL but not Java Many applications rely on SQL Writing MR function needs more time
  26. 26. コスト差ってどれくらいよ package org.myorg; import; import java.util.*; import org.apache.hadoop.fs.Path; import org.apache.hadoop.conf.*; import*; import org.apache.hadoop.mapred.*; import org.apache.hadoop.util.*; !public class WordCount { public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); ! public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); output.collect(word, one); } } } !public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { int sum = 0; while (values.hasNext()) { sum +=; } output.collect(key, new IntWritable(sum)); } } !public static void main(String[] args) throws Exception { JobConf conf = new JobConf(WordCount.class); conf.setJobName("wordcount"); ! conf.setOutputKeyClass(Text.class); conf.setOutputValueClass(IntWritable.class); ! conf.setMapperClass(Map.class); conf.setCombinerClass(Reduce.class); conf.setReducerClass(Reduce.class); ! conf.setInputFormat(TextInputFormat.class); conf.setOutputFormat(TextOutputFormat.class); ! FileInputFormat.setInputPaths(conf, new Path(args[0])); FileOutputFormat.setOutputPath(conf, new Path(args[1])); ! JobClient.runJob(conf); } } select count(*) from ( select regexp_split_to_table(str, s+') from text_table ) t; MapReduceによるWordCount SQLによるWordCount
  27. 27. 実際SQLが勝った。 Now SQL beats MapReduce
  28. 28. Q2. Hadoopと並列RDBは どっちがいいんですか!!! Which is good, Hadoop or parallel RDB?
  29. 29. 速度は並列RDB データ構造はHadoop Parallel RDB is faster; Hadoop is more flexible
  30. 30. 現在ありがちな構成 HDFS MapReduce Hive
  31. 31. 今後の構成 HDFS impala backend impala frontend
  32. 32. Hadoopは並列RDBに 似てきている DB filesystem backend parser, planner HDFS impala be impala fe Hadoop resembles to parallel RDB now
  33. 33. Hybrid DB comes in near future
  34. 34. Q3. MapReduceは お亡くなりですか? MapReduce is dead?
  35. 35. まだだっ…… まだ終わらんよ!! No
  36. 36. MapReduceは 並列処理にJavaやCを はさみこめる MapReduce has better extendability
  37. 37. 例:Asterの SQL-MapReduce
  38. 38. SQLからMapReduce呼べる select count(distinct user_id) from npath( on clicks partition by user_id order by timestamp mode(overlapping) pattern( H.S.P ) symbols( page_type = home AS H, page_type = search AS S, page_type = product AS P) result(first(user_id of H) as user_id) ); 最近、Hiveにもnpath入りました (MatchPath) You can combine MapReduce with SQL
  39. 39. Easy & Handy SQL + Extendable MapReduce
  40. 40. ☆ 最後にポエム ☆
  41. 41. よいものはよい Great product is anywhere
  42. 42. だが知識は偏在している but knowledge is maldistributed
  43. 43. OSS World Enterprise World Hadoop Ruby Python Excel 並列RDB Windows markdown VB Git Java
  44. 44. Cross the border
  45. 45. end