O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

2.apache spark 실습

8.381 visualizações

Publicada em

java로 스파크 어플리케이션 개발하기

Publicada em: Dados e análise
  • Login to see the comments

2.apache spark 실습

  1. 1. 강동현 2016-12-26 1 Apache Spark 실습
  2. 2. 1. Spark standalone 설치 2016-12-26 2
  3. 3. 실습 환경 정보 본 문서의 실습 환경 정보 • Spark 서버 – OS : Centos 7.0 – Java version : JDK 8 – Spark version : Spark 2.0.2 release • Spark application 개발 PC – Window 10 – Java version : JDK 8 – IDE : Eclipse Neon.2 Release (4.6.2) 본 문서에서 사용된 언어 – Interactive shell 테스트용: scala – Spark application 개발용 : python, java 2016-12-26 3
  4. 4. 환경 설정 - server • JDK 설치(JDK 1.8 이상일 경우 스킵 가능) – JDK : Java SE Development Kit 의 약자로, 자바 프로그램을 개발하기 위해 필요한 라이브러리 들의 모음 – Java Runtime Environment(자바 프로그램을 실행하기 위한 모듈들)를 포함하고 있음 – 본 링크에 접속하여 자신의 OS 타입에 맞는 JDK 최신 버전을 받는다.
  5. 5. 환경 설정 - server • JDK 설치(JDK 1.8 이상일 경우 스킵 가능) – jdk를 다운로드 후 아래와 같이 설치 2016-12-26 5 // “/usr/java/” 경로에 준비된 jdk-{version}-linux-x64.tar.gz 옮기기 $ mv {JDK 다운로드 경로}/jdk-{version}-linux-x64.tar.gz /usr/java/ // jdk 압축 해제 $ cd /usr $ mkdir java $ cd /usr/java $ tar -xf jdk-{version}-linux-x64.tar.gz $ ln -s /usr/java/jdk1.X.X_XX latest $ ln -s latest default $ alternatives --install /usr/bin/java java /usr/java/jdk1.X.X_XX /bin/java 1 $ alternatives --config java //설치된 버전의 java에 해당하는 번호로 세팅 3 개의 프로그램이 'java'를 제공합니다. 선택 명령 ----------------------------------------------- * 1 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64/jre/bin/java + 2 /usr/java/jdk1.X.X_XX/bin/java 현재 선택[+]을 유지하려면 엔터키를 누르고, 아니면 선택 번호를 입력하십시오: 2
  6. 6. 환경 설정 - server • JDK 설치(JDK 1.8 이상일 경우 스킵) – JAVA_HOME 변수 설정 • 공용 변수 저장 파일의 가장 하단부에 환경변수 추가 후 저장 • 설치한 버전의 java가 확인되면 완료 2016-12-26 6 $ vim /etc/profile ----------------vim edit display start--------------------- … export JAVA_HOME=/usr/java/default export PATH=$PATH:$ANT_HOME/bin:$JAVA_HOME/bin ----------------vim edit display end--------------------- $ source /etc/profile $ java –version java version "1.x.x_xx“ Java(TM) SE Runtime Environment (build 1.x.x_xx-b15) Java HotSpot(TM) 64-Bit Server VM (build 25.71-b15, mixed mode)
  7. 7. • Spark 설치 1. 스파크 다운로드 http://spark.apache.org/downloads.html 링크에 접속한다. ① Spark의 가장 최신 release를 선택한다. ② “Pre-built for Hadoop 2.7 and later”를 선택 (구축된 Hadoop cluster를 사용할 계획이라면 구축된 Hadoop의 버전을 선택한다.) ③ Direct Download를 선택한다. (“select Apache Mirror”를 선택하면 국내 저장소를 통해 빠르게 다운로드 가능하다.) ④ 링크를 클릭하여 다운로드 받는다. 환경 설정 - server 7
  8. 8. 환경 설정 - server • Spark 설치 2. Spark를 계정 홈 경로에 설치 ① spark-2.0.2-bin-hadoop2.7.tgz 파일을 /home/{user} 에 저장 ② tar -xvf spark-2.0.1-bin-hadoop2.7.tgz 명령어로 압축을 푼다. 3. 스파크 설치 끝! 2016-12-26 8
  9. 9. 환경 설정 - server • Spark Shell 실행 해보기 – cd ~/spark-2.0.2-bin-hadoop2.7 명령어로 스파크 홈 폴더에 이동 – (scala용)bin/spark-shell 명령어를 입력하여 스파크가 실행 되는 것을 확인한다. – (python용) bin/pyspark 명령어를 입력하여 스파크가 실행 되는 것을 확인한다. 2016-12-26 9
  10. 10. 환경 설정 – 개발 PC • JDK 설치(JDK 1.8 이상일 경우 스킵 가능) – 본 링크에 접속하여 자신의 OS 타입에 맞는 JDK 최신 버전을 받는다.
  11. 11. 환경 설정 – 개발 PC • JDK 설치(JDK 1.8 이상일 경우 스킵 가능)  환경변수 설정 • 변수 이름: JAVA_HOME • 변수 값 세팅 – C:Program FilesJavajdk1.8.0_xxx • 변수 이름: JDK_HOME • 변수 값 세팅 – C:Program FilesJavajdk1.8.0_xxx • 변수 이름: JRE_HOME • 변수 값 세팅 – C:Program FilesJavajdk1.8.0_xxxjre • 변수 이름: CLASSPATH • 변수 값 추가 – %JAVA_HOME%libtools.jar • 변수 이름: Path • 변수 값 추가 – %JAVA_HOME%bin – %JAVA_HOME%jrebin Path 편집 JAVA_HOME 편집
  12. 12. 환경 설정 – 개발 PC • JDK 설치(JDK 1.8 이상일 경우 스킵 가능) – 설치된 자바의 버전 확인 • cmd 창에서 “java –version” 커맨드를 실행하고 설치된 JDK의 버전을 확인
  13. 13. 환경 설정 – 개발 PC • Eclipse 설치 – 본 링크에 이클립스 인스톨러를 설치
  14. 14. 환경 설정 – 개발 PC • Eclipse 설치 – Eclipse installer에서 Eclipse IDE for Java developers를 선택 (EE 버전을 다운받아도 상관 없음)
  15. 15. 3. Spark를 활용한 분석 2016-12-26 15
  16. 16. Spark Architecture • Driver Program • executor에서 실행되는 job flow와 task 스케쥴링 관리를 담당 • Executor • Spark app을 위한 계산을 실행하고, 저장 데이터를 저장하고있는 프 로세스 • Cluster Manager • Executor의 시작 위치와 실행 시기를 담당 • 스파크는 플러그 형 cluster manager를 지원
  17. 17. Spark 사용 방법 2016-12-26 17 • Spark standalone을 활용한 분석 방법 1. spark shell을 이용한 interactive 분석 – scala interface를 통한 interactive한 분석이 가능 – python interface를 통한 interactive한 분석이 가능 – Apache zeppelin의 노트북 기능을 활용하면 code 공유도 가능 2. Spark application을 작성하여 런칭 – Python 어플리케이션 개발 – Java 어플리케이션 개발 – scala 어플리케이션 개발
  18. 18. Interactive Analysis with the Spark Shell • Spark scala Shell 실행 – cd ~/spark-2.0.2-bin-hadoop2.7 명령어로 스파크 홈 폴더에 이동 – bin/spark-shell 명령어를 입력하여 스파크가 실행 되는 것을 확인한다. 2016-12-26 18
  19. 19. Spark RDD Operator 2016-12-26 19 RDD operation Scala api 예제 http://homepage.cs.latrobe.edu.au/zhe/ZhenHeSparkRDDAPIExamples.html Scala , java, python interface 별 RDD Operation 사용 예제 http://backtobazics.com/big-data/spark/apache-spark-map-example/
  20. 20. Interactive Analysis with the Spark Shell • spark scala 예제 (1) Basic Map // Scala 변수 List를 RDD로 로딩 scala> val numList = List(2, 1, 4, 3) numList: List[Int] = List(2, 1, 4, 3) scala> val nums = sc.parallelize(numList ) nums: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:26 // RDD의 각 element를 제곱 scala> val squarNum = nums.map(x => x*x) //(transformation) squarNums: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[1] at map at <console>:28 // RDD를 scala 변수 list 형태로 반환 scala> val output = squarNum.collect() //(action) output: Array[Int] = Array(4, 1, 16, 9) 2016-12-26 20
  21. 21. Interactive Analysis with the Spark Shell • spark scala 예제 (2) Basic max/min/sum // Scala 변수 List를 RDD로 로딩 scala> val numList = List(2, 1, 4, 3) numList: List[Int] = List(2, 1, 4, 3) scala> val nums = sc.parallelize(numList ) nums: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:26 // nums RDD를 대상으로 min/max/sum을 계산 scala> nums.max() //(action) res0: Int = 4 scala> nums.min() //(action) res1 : Int = 1 scala> nums.sum() //(action) res2 : Int = 10 scala> nums.fold(0)((x, y) => x + y)) //(action) res3 : Int = 10 2016-12-26 21
  22. 22. Interactive Analysis with the Spark Shell • spark scala 예제 (3) line counting // {SPARK_HOME}에 위치하는 README.md파일을 로딩 scala> val textFile = sc.textFile("README.md") textFile: org.apache.spark.rdd.RDD[String] = README.md MapPartitionsRDD[1] at textFile at <console>:24 // 읽은 파일의 총 line 수는? scala> textFile.count() //(action) res0: Long = 99 // 첫번째 Line의 문자열은? scala> textFile.first() //(action) res1: String = # Apache Spark // “Spark”라는 문자열을 포함하고 있는 line의 수는? scala> val SparkLine = textFile.filter(line => line.contains("Spark")) //(transformation) SparkLine: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[3] at filter at <console>:26 scala> SparkLine.count() //(action) res2: Long = 19 2016-12-26 22
  23. 23. Interactive Analysis with the Spark Shell • spark scala 예제 (4) word counting // {SPARK_HOME}에 위치하는 README.md파일을 로딩 scala> val lines = sc.textFile("README.md") // 각 라인을 word단위로 분리 scala> val words = lines.flatMap(line => line.split(" ")) //(transformation) // case1 .Word별로 개수를 카운트 scala> val wordMap = words.map(word => (word, 1)) //(transformation) scala> val result = wordMap.reduceByKey((a, b) => a + b) //(action) res0: Array[(String, Int)] = Array( (package,1), (this,1), (Version"](http://spark.apache.org/docs/latest/building-spark.html#specifying-the-hadoop-version),1), (Because,1), (Python,2), (cluster.,1), (its,1), ([run,1), (general,2), …. 2016-12-26 23
  24. 24. Interactive Analysis with the Spark Shell 문제 • (1) [1,2,3,4,5,6,7,8,9] list에서 홀수인 자연수들의 제곱 합을 구하세요. – sc.parallelize(List(1,2,3,4,5,6,7,8,9)). filter(i=>(i%2==1)). map(x=>x*x). sum() • (2) “README.md” 파일의 총 word의 개수를 출력하세요 – sc.textFile("README.md"). flatMap(line=>line.split(" ")). count() • (3) “README.md” 파일에서 총 ‘k’가 들어가는 word의 개수를 출력하세요 – sc.textFile("README.md"). flatMap(line=>line.split(" ")). filter(word=>word.contains("k")). count() 2016-12-26 24
  25. 25. Spark를 활용한 분석 2016-12-26 25 • Spark standalone을 활용한 분석 방법 1. spark shell을 이용한 interactive 분석 – scala, python interface를 통한 interactive한 분석이 가능 – Apache zeppelin의 노트북 기능을 활용한 code 공유도 가능 2. Spark application을 작성하여 런칭 – Python 어플리케이션 개발 – Java 어플리케이션 개발 – scala 어플리케이션 개발
  26. 26. Spark Application(python) • Python 어플리케이션 개발 1. 간단한 python application 작성 – Vim등의 텍스트 에디터를 이용하여 python code를 작성 2. python application 실행 – 아래의 명령어를 통해 작성한 test.py spark 어플리케이션을 실행 2016-12-26 26 from pyspark import SparkContext logFile = “/home/{user}/spark-2.0.1-bin-hadoop2.7/README.md sc = SparkContext("local", "Simple App") logData = sc.textFile(logFile).cache() numAs = logData.filter(lambda s: 'a' in s).count() numBs = logData.filter(lambda s: 'b' in s).count() print("Lines with a: %i, lines with b: %i" % (numAs, numBs)) $ YOUR_SPARK_HOME/bin/spark-submit --master local[4] test.py ... Lines with a: 46, Lines with b: 23 ...
  27. 27. Spark를 활용한 분석 2016-12-26 27 • Spark 실행 방법 1. spark shell을 이용한 interactive 분석 – scala, python interface를 통한 interactive한 분석이 가능 – Apache zeppelin의 노트북 기능을 활용한 code 공유도 가능 2. Spark application을 작성하여 런칭 – Python 어플리케이션 개발 – Java 어플리케이션 개발 – scala 어플리케이션 개발
  28. 28. Spark Application(java/scala) • Scala, java 어플리케이션 개발 – Scala, java IDE를 사용하여 Project를 생성 – sbt(scala), maven(java) 등의 빌드 도구 플러그인을 활용하여 spark library와 기타 사용되는 library들의 dependencies를 관리 – 원하는 작업을 수행하는 spark application code를 작성 – 프로젝트를 컴파일 및 빌드하여 jar 파일을 생성 – 완성된 application.jar 파일은 spark-submit 커맨드를 사용하여 실행 • 자세한 내용은 아래 링크에서 확인 https://spark.apache.org/docs/latest/submitting-applications.html 2016-12-26 28
  29. 29. Spark Application(java) • java 어플리케이션 개발 1. Java 프로젝트 개발 – Eclipse + maven 을 활용한 project 생성 – Maven이란? 1,2 2016-12-26 29 • File->New->Other… 선택 • Maven->Maven project 선택 후 “Next”
  30. 30. Spark Application(java) • java 어플리케이션 개발 1. Java 프로젝트 개발 – Eclipse + maven 을 활용한 project 생성 2016-12-26 30 • Create a simple project 체크 박스 체크 후 “next”
  31. 31. Spark Application(java) • java 어플리케이션 개발 1. Java 프로젝트 개발 – Eclipse + maven 을 활용한 project 생성 2016-12-26 31 • Artifact 창 입력 (각 입력 창은 다음과 같은 의미)  Group ID : 일반적으로 개발사의 도메인  aritifact ID : 개발물 ID(프로젝트명)  Version : 개발물의 version  Packaging : jar  Name : 이름(?)
  32. 32. Spark Application(java) • java 어플리케이션 개발 1. Java 프로젝트 개발 – Eclipse + maven 을 활용한 project 생성 2016-12-26 32 • Maven 기본 JRE 변경  JRE System Library 우클릭 -> Build Path 선택 -> Configure Build Path 선택  JRE System Library [J2SE-1.5] 삭제 (Remove) 한다.
  33. 33. Spark Application(java) • java 어플리케이션 개발 1. Java 프로젝트 개발 – Eclipse + maven 을 활용한 project 생성 2016-12-26 33 • Maven 기본 JRE 변경  JRE System Library [J2SE-1.5] 삭제 (Remove) 후 Add Library을 선택한다.  JRE System Library 을 선택 한다.
  34. 34. Spark Application(java) • java 어플리케이션 개발 1. Java 프로젝트 개발 – Eclipse + maven 을 활용한 project 생성 2016-12-26 34 • Maven 기본 JRE 변경  Workspace default JRE (JDK1.8.0_xxx) 을 선택한다.
  35. 35. Spark Application(java) • java 어플리케이션 개발 1. Java 프로젝트 개발 – Eclipse + maven 을 활용한 project 생성 2016-12-26 35 • pom.xml 작성  pom.xml 더블클릭  하단의 pom.xml 탭 선택  붉은 박스 부분 입력
  36. 36. Spark Application(java) • java 어플리케이션 개발 1. Java 프로젝트 개발 – Eclipse + maven 을 활용한 project 생성 2016-12-26 36 • Word count 코드 추가  testSparkApplication 패키지 추가  JavaWordCount.java 파일 추가
  37. 37. Spark Application(java) • java 어플리케이션 개발 1. Java 프로젝트 개발 – Eclipse + maven 을 활용한 project 생성 2016-12-26 37 • Word count 코드 추가  JavaWordCount.java 예제는 Spark가 설치된 경로의 examples 디렉토리에서 찾을 수 있다.
  38. 38. Spark Application(java) • java 어플리케이션 개발 1. Java 프로젝트 개발 – Eclipse + maven 을 활용한 project 생성 2016-12-26 38 • Word count 코드 추가  JavaWordCount.java 파일에 코드 입력
  39. 39. Spark Application(java) • java 어플리케이션 개발 1. Java 프로젝트 개발 – Eclipse + maven 을 활용한 project 생성 2016-12-26 39 • Java의 함수형 프로그래밍(이론적 배경)
  40. 40. Spark Application(java) • java 어플리케이션 개발 2. Java 프로젝트 빌드 2016-12-26 40 • 프로젝트 빌드  프로젝트 우클릭 -> Run as 선택 -> Maven Build … 선택  에러가 남아있다면 “alt+f5” 로 프로젝트 업데이트 실행
  41. 41. Spark Application(java) • java 어플리케이션 개발 2. Java 프로젝트 빌드 2016-12-26 41 • 프로젝트 빌드  Goals: clean install compile  Run 클릭
  42. 42. Spark Application(java) • java 어플리케이션 개발 2. Java 프로젝트 빌드 2016-12-26 42 • 프로젝트 빌드 • 콘솔창에 아래와 같은 로그가 보이면 성공 [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building wordCounting 1.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ testSparkApplication --- [INFO] Deleting C:UsersdblabworkspacetestSparkApplicationtarget [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ testSparkApplication --- [WARNING] Using platform encoding (MS949 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 0 resource [INFO] … [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 20.537 s [INFO] Finished at: 2016-12-26T07:18:16+09:00 [INFO] Final Memory: 38M/269M [INFO] ------------------------------------------------------------------------
  43. 43. Spark Application(java) • java 어플리케이션 개발 2. Java 프로젝트 빌드 • 프로젝트 경로를 확인하고 • 프로젝트 폴더로 이동하여 target 폴더를 확인 • target 폴더 내에 빌드된 jar파일을 확인 2016-12-26 43
  44. 44. Spark Application(java) • java 어플리케이션 개발 3. Java 프로젝트 실행 • 빌드된 jar파일을 서버로 전송 2016-12-26 44
  45. 45. Spark Application(java/scala) • java 어플리케이션 개발 3. Java 프로젝트 실행 • 아래의 명령어를 통해 spark 어플리케이션을 실행 • cd {SPARK_HOME} • bin/spark-submit --class testSparkApplication.JavaWordCount ../testSparkApplication-1.0.jar README.md 2016-12-26 45 ….
  46. 46. QnA 2016-12-26 46 Rigoruroewpreowprwopwro[qwerqw11 eqweqwe

×