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.

Spark 소개 2부

6,370 views

Published on

사내 세미나에서 Spark 소개한 자료를 공유합니다.

Published in: Engineering

Spark 소개 2부

  1. 1. Lightning-fast cluster computing
  2. 2. 잠시 복습
  3. 3. Problem
  4. 4. Solution MapReduce?
  5. 5. 모든 일을 MapReduce화 하라! 근데 이런 SQL을 어떻 게 MapReduce로 만들 지? SELECT LAT_N, CITY, TEMP_F FROM STATS, STATION WHERE MONTH = 7 AND STATS.ID = STATION.ID ORDER BY TEMP_F;
  6. 6. 모든 일을 MapReduce화 하라! 이런 Machine learning/Data 분석 업 무는? “지난 2007년부터 매월 나오 는 전국 부동산 실거래가 정 보에서 영향을 미칠 수 있는 변수 140개중에 의미있는 변 수 5개만 뽑아.” “아, 마감은 내일이다.”
  7. 7. 코드도 이정도면 뭐? (단순히 단어세는 코드가…) package org.myorg; import java.io.IOException; import java.util.*; import org.apache.hadoop.fs.Path; import org.apache.hadoop.conf.*; import org.apache.hadoop.io.*; import org.apache.hadoop.mapreduce.*; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.input.TextInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; public class WordCount { public static class Map extends 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, Context context) throws IOException, InterruptedException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); context.write(word, one); } } } public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } context.write(key, new IntWritable(sum)); } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = new Job(conf, "wordcount"); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); job.setMapperClass(Map.class); job.setReducerClass(Reduce.class); job.setInputFormatClass(TextInputFormat.class); job.setOutputFormatClass(TextOutputFormat.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); job.waitForCompletion(true); }
  8. 8. 원래 세월이 가면 연장은 좋아지는 법
  9. 9. Generality High-level tool들 아래 에서 모든 일들을 있는 그대로 하게 해줍니다.
  10. 10. 쓰기 쉽습니다. Java, Scala, Python을 지원합니다. text_file = spark.textFile ("hdfs://...") text_file.flatMap(lambda line: line.split()) .map(lambda word: (word, 1)) .reduceByKey(lambda a, b: a+b) Word count in Spark's Python API
  11. 11. 온갖 분산처리 환경에서 다 돌아갑니다. ● Hadoop, Mesos, 혼 자서도, Cloud에서 도 돌아요. ● HDFS, Cassandra, HBase, S3등에서 데이타도 가져올 수 있어요.
  12. 12. 속도도 빠릅니다. Hadoop MapReduce 를 Memory에서 올렸 을 때보다 100배, Disk 에서 돌렸을 때의 10배 빠릅니다. Logistic regression in Hadoop and Spark
  13. 13. 자체 Web UI까지 있어요….
  14. 14. Spark은 말이죠 ● Tool이에요, Library 아닙니다. ○ 이 Tool위에 하고 싶은 일들을 정의하고 ○ 실행시키는 겁니다.
  15. 15. Standalone으로 부터 제 2부: 한번 해보자!
  16. 16. vagrant up / vagrant ssh
  17. 17. spark-shell
  18. 18. pyspark- python spark shell
  19. 19. Wordcount : Scala val f = sc.textFile("README.md") val wc = f.flatMap(l => l.split(" ")).map(word => (word, 1)).reduceByKey(_ + _) wc.saveAsTextFile("wc_out.txt")
  20. 20. Wordcount : Scala val f = sc.textFile("README.md") =================== def textFile(path: String, minPartitions: Int = defaultMinPartitions):RDD[String] =================== Read a directory of text files from HDFS, a local file system (available on all nodes), or any Hadoop-supported file system URI.
  21. 21. Wordcount : Scala val wc = f.flatMap(l => l.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)
  22. 22. Wordcount : Scala val wc = f.flatMap(l => l.split(" ")) : 한 단어씩 끊어서
  23. 23. Wordcount : Scala val wc = f.flatMap(l => l.split(" ")).map(word => (word, 1)) :(각 단어들, 1)이라는 (Key, Value)들을 만들고
  24. 24. Wordcount : Scala val wc = f.flatMap(l => l.split(" ")).map(word => (word, 1)).reduceByKey(_ + _) : 그 집합들을 다 Key별로 합해보아요.
  25. 25. Wordcount : Scala scala>wc.take(20) ……. finished: take at <console>:26, took 0.081425 s res6: Array[(String, Int)] = Array((package,1), (For,2), (processing.,1), (Programs,1), (Because,1), (The,1), (cluster.,1), (its,1), ([run,1), (APIs,1), (computation, 1), (Try,1), (have,1), (through,1), (several,1), (This,2), ("yarn-cluster",1), (graph,1), (Hive,2), (storage,1))
  26. 26. Wordcount : Scala wc.saveAsTextFile("wc_out.txt") ========================== 파일로 저장
  27. 27. 앞서 짠 코드를 이렇게 돌린다면? Simplifying Big Data Analysis with Apache Spark Matei Zaharia April 27, 2015
  28. 28. Disk-> Memory로 옮겨봅시다. Simplifying Big Data Analysis with Apache Spark Matei Zaharia April 27, 2015
  29. 29. 즉 이렇게 각 Cluster별로 일거리와 명령을 전달해 주 면 되요.
  30. 30. Spark Model ● 데이타를 변환해가는 프로그램을 작성하는 것 ● Resilient Distributed Dataset(RDDs) ○ Cluster로 전달할 memory나 disk에 저장될 object들 의 집합 ○ 병렬 변환 ( map, filter…)등등으로 구성 ○ 오류가 생기면 자동으로 재구성
  31. 31. Making interactive Big Data Applications Fast AND Easy Holden Karau
  32. 32. Making interactive Big Data Applications Fast AND Easy Holden Karau
  33. 33. Making interactive Big Data Applications Fast AND Easy Holden Karau
  34. 34. Making interactive Big Data Applications Fast AND Easy Holden Karau
  35. 35. Making interactive Big Data Applications Fast AND Easy Holden Karau
  36. 36. Making interactive Big Data Applications Fast AND Easy Holden Karau
  37. 37. Making interactive Big Data Applications Fast AND Easy Holden Karau
  38. 38. Making interactive Big Data Applications Fast AND Easy Holden Karau
  39. 39. Making interactive Big Data Applications Fast AND Easy Holden Karau
  40. 40. Making interactive Big Data Applications Fast AND Easy Holden Karau
  41. 41. Making interactive Big Data Applications Fast AND Easy Holden Karau
  42. 42. Making interactive Big Data Applications Fast AND Easy Holden Karau
  43. 43. Making interactive Big Data Applications Fast AND Easy Holden Karau
  44. 44. Making interactive Big Data Applications Fast AND Easy Holden Karau
  45. 45. Making interactive Big Data Applications Fast AND Easy Holden Karau
  46. 46. Making interactive Big Data Applications Fast AND Easy Holden Karau
  47. 47. Making interactive Big Data Applications Fast AND Easy Holden Karau
  48. 48. Making interactive Big Data Applications Fast AND Easy Holden Karau
  49. 49. Making interactive Big Data Applications Fast AND Easy Holden Karau
  50. 50. Making interactive Big Data Applications Fast AND Easy Holden Karau
  51. 51. Making interactive Big Data Applications Fast AND Easy Holden Karau
  52. 52. Simplifying Big Data Analysis with Apache Spark Matei Zaharia April 27, 2015
  53. 53. 각 code 한 줄이 RDD! val f = sc.textFile("README.md") val wc = f.flatMap(l => l.split(" ")).map(word => (word, 1)).reduceByKey(_ + _) wc.saveAsTextFile("wc_out.txt")
  54. 54. 지원하는 명령들
  55. 55. Build-in libraries ● 다양한 기능들을 RDD로 쓸 수 있게 만들어놓음 ● Caching + DAG model은 이런거 돌리는데 충분히 효율적임. ● 모든 라이브러리를 하나 프로그램에 다 묶어 놓는 게 더 빠르다.
  56. 56. Simplifying Big Data Analysis with Apache Spark Matei Zaharia April 27, 2015
  57. 57. Simplifying Big Data Analysis with Apache Spark Matei Zaharia April 27, 2015
  58. 58. Simplifying Big Data Analysis with Apache Spark Matei Zaharia April 27, 2015
  59. 59. MLib Vectors, Matrices = RDD[Vector] Iterative computation points = sc.textFile(“data.txt”).map (parsePoint) model = KMeans.train(points, 10) model.predict(newPoint)
  60. 60. GraphX Represents graphs as RDDs of vertices and edges.
  61. 61. Simplifying Big Data Analysis with Apache Spark Matei Zaharia April 27, 2015
  62. 62. 결론 여러분의 data source, 작업, 환경들을 다 통합 하고 싶어요.
  63. 63. Q&A

×