SlideShare uma empresa Scribd logo
1 de 46
강동현
2016-12-26 1
Apache Spark 실습
1. Spark standalone 설치
2016-12-26 2
실습 환경 정보
본 문서의 실습 환경 정보
• 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
환경 설정 - server
• JDK 설치(JDK 1.8 이상일 경우 스킵 가능)
– JDK : Java SE Development Kit 의 약자로,
자바 프로그램을 개발하기 위해 필요한 라이브러리 들의 모음
– Java Runtime Environment(자바 프로그램을 실행하기 위한 모듈들)를
포함하고 있음
– 본 링크에 접속하여 자신의 OS 타입에 맞는 JDK 최신 버전을 받는다.
환경 설정 - 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
환경 설정 - 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)
• 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
환경 설정 - 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
환경 설정 - server
• Spark Shell 실행 해보기
– cd ~/spark-2.0.2-bin-hadoop2.7 명령어로 스파크 홈 폴더에 이동
– (scala용)bin/spark-shell 명령어를 입력하여 스파크가 실행 되는 것을 확인한다.
– (python용) bin/pyspark 명령어를 입력하여 스파크가 실행 되는 것을 확인한다.
2016-12-26 9
환경 설정 – 개발 PC
• JDK 설치(JDK 1.8 이상일 경우 스킵 가능)
– 본 링크에 접속하여 자신의 OS 타입에 맞는 JDK 최신 버전을 받는다.
환경 설정 – 개발 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 편집
환경 설정 – 개발 PC
• JDK 설치(JDK 1.8 이상일 경우 스킵 가능)
– 설치된 자바의 버전 확인
• cmd 창에서 “java –version” 커맨드를 실행하고 설치된 JDK의 버전을 확인
환경 설정 – 개발 PC
• Eclipse 설치
– 본 링크에 이클립스 인스톨러를 설치
환경 설정 – 개발 PC
• Eclipse 설치
– Eclipse installer에서 Eclipse IDE for Java developers를 선택
(EE 버전을 다운받아도 상관 없음)
3. Spark를 활용한 분석
2016-12-26 15
Spark Architecture
• Driver Program
• executor에서 실행되는 job flow와 task 스케쥴링 관리를 담당
• Executor
• Spark app을 위한 계산을 실행하고, 저장 데이터를 저장하고있는 프
로세스
• Cluster Manager
• Executor의 시작 위치와 실행 시기를 담당
• 스파크는 플러그 형 cluster manager를 지원
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 어플리케이션 개발
Interactive Analysis with the Spark Shell
• Spark scala Shell 실행
– cd ~/spark-2.0.2-bin-hadoop2.7 명령어로 스파크 홈 폴더에 이동
– bin/spark-shell 명령어를 입력하여 스파크가 실행 되는 것을 확인한다.
2016-12-26 18
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/
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
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
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
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
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
Spark를 활용한 분석
2016-12-26 25
• Spark standalone을 활용한 분석 방법
1. spark shell을 이용한 interactive 분석
– scala, python interface를 통한 interactive한 분석이 가능
– Apache zeppelin의 노트북 기능을 활용한 code 공유도 가능
2. Spark application을 작성하여 런칭
– Python 어플리케이션 개발
– Java 어플리케이션 개발
– scala 어플리케이션 개발
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
...
Spark를 활용한 분석
2016-12-26 27
• Spark 실행 방법
1. spark shell을 이용한 interactive 분석
– scala, python interface를 통한 interactive한 분석이 가능
– Apache zeppelin의 노트북 기능을 활용한 code 공유도 가능
2. Spark application을 작성하여 런칭
– Python 어플리케이션 개발
– Java 어플리케이션 개발
– scala 어플리케이션 개발
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
Spark Application(java)
• java 어플리케이션 개발
1. Java 프로젝트 개발
– Eclipse + maven 을 활용한 project 생성
– Maven이란? 1,2
2016-12-26 29
• File->New->Other… 선택 • Maven->Maven project 선택 후 “Next”
Spark Application(java)
• java 어플리케이션 개발
1. Java 프로젝트 개발
– Eclipse + maven 을 활용한 project 생성
2016-12-26 30
• Create a simple project 체크 박스 체크 후 “next”
Spark Application(java)
• java 어플리케이션 개발
1. Java 프로젝트 개발
– Eclipse + maven 을 활용한 project 생성
2016-12-26 31
• Artifact 창 입력
(각 입력 창은 다음과 같은 의미)
 Group ID : 일반적으로 개발사의 도메인
 aritifact ID : 개발물 ID(프로젝트명)
 Version : 개발물의 version
 Packaging : jar
 Name : 이름(?)
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) 한다.
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 을 선택 한다.
Spark Application(java)
• java 어플리케이션 개발
1. Java 프로젝트 개발
– Eclipse + maven 을 활용한 project 생성
2016-12-26 34
• Maven 기본 JRE 변경
 Workspace default JRE (JDK1.8.0_xxx) 을 선택한다.
Spark Application(java)
• java 어플리케이션 개발
1. Java 프로젝트 개발
– Eclipse + maven 을 활용한 project 생성
2016-12-26 35
• pom.xml 작성
 pom.xml 더블클릭
 하단의 pom.xml 탭 선택
 붉은 박스 부분 입력
Spark Application(java)
• java 어플리케이션 개발
1. Java 프로젝트 개발
– Eclipse + maven 을 활용한 project 생성
2016-12-26 36
• Word count 코드 추가
 testSparkApplication 패키지 추가
 JavaWordCount.java 파일 추가
Spark Application(java)
• java 어플리케이션 개발
1. Java 프로젝트 개발
– Eclipse + maven 을 활용한 project 생성
2016-12-26 37
• Word count 코드 추가
 JavaWordCount.java 예제는
Spark가 설치된 경로의 examples
디렉토리에서 찾을 수 있다.
Spark Application(java)
• java 어플리케이션 개발
1. Java 프로젝트 개발
– Eclipse + maven 을 활용한 project 생성
2016-12-26 38
• Word count 코드 추가
 JavaWordCount.java 파일에 코드 입력
Spark Application(java)
• java 어플리케이션 개발
1. Java 프로젝트 개발
– Eclipse + maven 을 활용한 project 생성
2016-12-26 39
• Java의 함수형 프로그래밍(이론적 배경)
Spark Application(java)
• java 어플리케이션 개발
2. Java 프로젝트 빌드
2016-12-26 40
• 프로젝트 빌드
 프로젝트 우클릭
-> Run as 선택
-> Maven Build … 선택
 에러가 남아있다면
“alt+f5” 로
프로젝트 업데이트 실행
Spark Application(java)
• java 어플리케이션 개발
2. Java 프로젝트 빌드
2016-12-26 41
• 프로젝트 빌드
 Goals: clean install compile
 Run 클릭
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] ------------------------------------------------------------------------
Spark Application(java)
• java 어플리케이션 개발
2. Java 프로젝트 빌드
• 프로젝트 경로를 확인하고
• 프로젝트 폴더로 이동하여 target 폴더를 확인
• target 폴더 내에 빌드된 jar파일을 확인
2016-12-26 43
Spark Application(java)
• java 어플리케이션 개발
3. Java 프로젝트 실행
• 빌드된 jar파일을 서버로 전송
2016-12-26 44
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
….
QnA
2016-12-26 46
Rigoruroewpreowprwopwro[qwerqw11
eqweqwe

Mais conteúdo relacionado

Mais procurados

Streaming Design Patterns Using Alpakka Kafka Connector (Sean Glover, Lightbe...
Streaming Design Patterns Using Alpakka Kafka Connector (Sean Glover, Lightbe...Streaming Design Patterns Using Alpakka Kafka Connector (Sean Glover, Lightbe...
Streaming Design Patterns Using Alpakka Kafka Connector (Sean Glover, Lightbe...confluent
 
Orion Context Broker 20211209
Orion Context Broker 20211209Orion Context Broker 20211209
Orion Context Broker 20211209Fermin Galan
 
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Yongho Ha
 
Migrating Java JBoss EAP Applications to Kubernetes With S2I
Migrating Java JBoss EAP Applications to Kubernetes With S2IMigrating Java JBoss EAP Applications to Kubernetes With S2I
Migrating Java JBoss EAP Applications to Kubernetes With S2IKonveyor Community
 
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&TCloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&TShapeBlue
 
HDFSネームノードのHAについて #hcj13w
HDFSネームノードのHAについて #hcj13wHDFSネームノードのHAについて #hcj13w
HDFSネームノードのHAについて #hcj13wCloudera Japan
 
Spark (Structured) Streaming vs. Kafka Streams
Spark (Structured) Streaming vs. Kafka StreamsSpark (Structured) Streaming vs. Kafka Streams
Spark (Structured) Streaming vs. Kafka StreamsGuido Schmutz
 
Replacing iptables with eBPF in Kubernetes with Cilium
Replacing iptables with eBPF in Kubernetes with CiliumReplacing iptables with eBPF in Kubernetes with Cilium
Replacing iptables with eBPF in Kubernetes with CiliumMichal Rostecki
 
End-to-End Deep Learning with Horovod on Apache Spark
End-to-End Deep Learning with Horovod on Apache SparkEnd-to-End Deep Learning with Horovod on Apache Spark
End-to-End Deep Learning with Horovod on Apache SparkDatabricks
 
Kong, Keyrock, Keycloak, i4Trust - Options to Secure FIWARE in Production
Kong, Keyrock, Keycloak, i4Trust - Options to Secure FIWARE in ProductionKong, Keyrock, Keycloak, i4Trust - Options to Secure FIWARE in Production
Kong, Keyrock, Keycloak, i4Trust - Options to Secure FIWARE in ProductionFIWARE
 
Scouter와 influx db – grafana 연동 가이드
Scouter와 influx db – grafana 연동 가이드Scouter와 influx db – grafana 연동 가이드
Scouter와 influx db – grafana 연동 가이드Ji-Woong Choi
 
Enhancing Network and Runtime Security with Cilium and Tetragon by Raymond De...
Enhancing Network and Runtime Security with Cilium and Tetragon by Raymond De...Enhancing Network and Runtime Security with Cilium and Tetragon by Raymond De...
Enhancing Network and Runtime Security with Cilium and Tetragon by Raymond De...ContainerDay Security 2023
 
Easy Cloud Native Transformation with Nomad
Easy Cloud Native Transformation with NomadEasy Cloud Native Transformation with Nomad
Easy Cloud Native Transformation with NomadBram Vogelaar
 
Advanced backup methods (Postgres@CERN)
Advanced backup methods (Postgres@CERN)Advanced backup methods (Postgres@CERN)
Advanced backup methods (Postgres@CERN)Anastasia Lubennikova
 
Spark SQL Tutorial | Spark Tutorial for Beginners | Apache Spark Training | E...
Spark SQL Tutorial | Spark Tutorial for Beginners | Apache Spark Training | E...Spark SQL Tutorial | Spark Tutorial for Beginners | Apache Spark Training | E...
Spark SQL Tutorial | Spark Tutorial for Beginners | Apache Spark Training | E...Edureka!
 
Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...
Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...
Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...Spark Summit
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해중선 곽
 
Apache Storm
Apache StormApache Storm
Apache StormEdureka!
 

Mais procurados (20)

Streaming Design Patterns Using Alpakka Kafka Connector (Sean Glover, Lightbe...
Streaming Design Patterns Using Alpakka Kafka Connector (Sean Glover, Lightbe...Streaming Design Patterns Using Alpakka Kafka Connector (Sean Glover, Lightbe...
Streaming Design Patterns Using Alpakka Kafka Connector (Sean Glover, Lightbe...
 
Scale Kubernetes to support 50000 services
Scale Kubernetes to support 50000 servicesScale Kubernetes to support 50000 services
Scale Kubernetes to support 50000 services
 
Orion Context Broker 20211209
Orion Context Broker 20211209Orion Context Broker 20211209
Orion Context Broker 20211209
 
Final terraform
Final terraformFinal terraform
Final terraform
 
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
Spark 의 핵심은 무엇인가? RDD! (RDD paper review)
 
Migrating Java JBoss EAP Applications to Kubernetes With S2I
Migrating Java JBoss EAP Applications to Kubernetes With S2IMigrating Java JBoss EAP Applications to Kubernetes With S2I
Migrating Java JBoss EAP Applications to Kubernetes With S2I
 
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&TCloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
CloudStack and GitOps at Enterprise Scale - Alex Dometrius, Rene Glover - AT&T
 
HDFSネームノードのHAについて #hcj13w
HDFSネームノードのHAについて #hcj13wHDFSネームノードのHAについて #hcj13w
HDFSネームノードのHAについて #hcj13w
 
Spark (Structured) Streaming vs. Kafka Streams
Spark (Structured) Streaming vs. Kafka StreamsSpark (Structured) Streaming vs. Kafka Streams
Spark (Structured) Streaming vs. Kafka Streams
 
Replacing iptables with eBPF in Kubernetes with Cilium
Replacing iptables with eBPF in Kubernetes with CiliumReplacing iptables with eBPF in Kubernetes with Cilium
Replacing iptables with eBPF in Kubernetes with Cilium
 
End-to-End Deep Learning with Horovod on Apache Spark
End-to-End Deep Learning with Horovod on Apache SparkEnd-to-End Deep Learning with Horovod on Apache Spark
End-to-End Deep Learning with Horovod on Apache Spark
 
Kong, Keyrock, Keycloak, i4Trust - Options to Secure FIWARE in Production
Kong, Keyrock, Keycloak, i4Trust - Options to Secure FIWARE in ProductionKong, Keyrock, Keycloak, i4Trust - Options to Secure FIWARE in Production
Kong, Keyrock, Keycloak, i4Trust - Options to Secure FIWARE in Production
 
Scouter와 influx db – grafana 연동 가이드
Scouter와 influx db – grafana 연동 가이드Scouter와 influx db – grafana 연동 가이드
Scouter와 influx db – grafana 연동 가이드
 
Enhancing Network and Runtime Security with Cilium and Tetragon by Raymond De...
Enhancing Network and Runtime Security with Cilium and Tetragon by Raymond De...Enhancing Network and Runtime Security with Cilium and Tetragon by Raymond De...
Enhancing Network and Runtime Security with Cilium and Tetragon by Raymond De...
 
Easy Cloud Native Transformation with Nomad
Easy Cloud Native Transformation with NomadEasy Cloud Native Transformation with Nomad
Easy Cloud Native Transformation with Nomad
 
Advanced backup methods (Postgres@CERN)
Advanced backup methods (Postgres@CERN)Advanced backup methods (Postgres@CERN)
Advanced backup methods (Postgres@CERN)
 
Spark SQL Tutorial | Spark Tutorial for Beginners | Apache Spark Training | E...
Spark SQL Tutorial | Spark Tutorial for Beginners | Apache Spark Training | E...Spark SQL Tutorial | Spark Tutorial for Beginners | Apache Spark Training | E...
Spark SQL Tutorial | Spark Tutorial for Beginners | Apache Spark Training | E...
 
Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...
Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...
Deep Dive into Project Tungsten: Bringing Spark Closer to Bare Metal-(Josh Ro...
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
 
Apache Storm
Apache StormApache Storm
Apache Storm
 

Destaque

Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106SangHoon Lee
 
Apache spark 소개 및 실습
Apache spark 소개 및 실습Apache spark 소개 및 실습
Apache spark 소개 및 실습동현 강
 
Data mining with differential privacy
Data mining with differential privacy Data mining with differential privacy
Data mining with differential privacy Wei-Yuan Chang
 
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-HadoopGRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-HadoopGruter
 
Spark 소개 2부
Spark 소개 2부Spark 소개 2부
Spark 소개 2부Jinho Yoo
 
Spark 소개 1부
Spark 소개 1부Spark 소개 1부
Spark 소개 1부Jinho Yoo
 
Apache Spark 입문에서 머신러닝까지
Apache Spark 입문에서 머신러닝까지Apache Spark 입문에서 머신러닝까지
Apache Spark 입문에서 머신러닝까지Donam Kim
 

Destaque (7)

Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
 
Apache spark 소개 및 실습
Apache spark 소개 및 실습Apache spark 소개 및 실습
Apache spark 소개 및 실습
 
Data mining with differential privacy
Data mining with differential privacy Data mining with differential privacy
Data mining with differential privacy
 
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-HadoopGRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: Tajo와 SQL-on-Hadoop
 
Spark 소개 2부
Spark 소개 2부Spark 소개 2부
Spark 소개 2부
 
Spark 소개 1부
Spark 소개 1부Spark 소개 1부
Spark 소개 1부
 
Apache Spark 입문에서 머신러닝까지
Apache Spark 입문에서 머신러닝까지Apache Spark 입문에서 머신러닝까지
Apache Spark 입문에서 머신러닝까지
 

Semelhante a 2.apache spark 실습

learning spark - Chatper8. Tuning and Debugging
learning spark - Chatper8. Tuning and Debugginglearning spark - Chatper8. Tuning and Debugging
learning spark - Chatper8. Tuning and DebuggingMungyu Choi
 
How to use apache spark (based on the java example)
How to use apache spark (based on the java example)How to use apache spark (based on the java example)
How to use apache spark (based on the java example)월간 IT 슬라이드
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기Ted Won
 
Red Hat OpenStack 17 저자직강+스터디그룹_5주차
Red Hat OpenStack 17 저자직강+스터디그룹_5주차Red Hat OpenStack 17 저자직강+스터디그룹_5주차
Red Hat OpenStack 17 저자직강+스터디그룹_5주차Nalee Jang
 
Java9 특징 훑어보기
Java9 특징 훑어보기Java9 특징 훑어보기
Java9 특징 훑어보기duriepark 유현석
 
빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지
빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지
빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지위키북스
 
19. Application - Spark Streaming 1
19. Application - Spark Streaming 119. Application - Spark Streaming 1
19. Application - Spark Streaming 1merry7
 
Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Sangon Lee
 
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)EunChul Shin
 
[오픈소스컨설팅] ARM & OpenStack Community
[오픈소스컨설팅] ARM & OpenStack Community[오픈소스컨설팅] ARM & OpenStack Community
[오픈소스컨설팅] ARM & OpenStack CommunityOpen Source Consulting
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기현철 조
 

Semelhante a 2.apache spark 실습 (20)

learning spark - Chatper8. Tuning and Debugging
learning spark - Chatper8. Tuning and Debugginglearning spark - Chatper8. Tuning and Debugging
learning spark - Chatper8. Tuning and Debugging
 
How to use apache spark (based on the java example)
How to use apache spark (based on the java example)How to use apache spark (based on the java example)
How to use apache spark (based on the java example)
 
Eclipse RAP
Eclipse RAPEclipse RAP
Eclipse RAP
 
Learning spark ch1-2
Learning spark ch1-2Learning spark ch1-2
Learning spark ch1-2
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
 
Apache Spark
Apache SparkApache Spark
Apache Spark
 
What is spark
What is sparkWhat is spark
What is spark
 
Red Hat OpenStack 17 저자직강+스터디그룹_5주차
Red Hat OpenStack 17 저자직강+스터디그룹_5주차Red Hat OpenStack 17 저자직강+스터디그룹_5주차
Red Hat OpenStack 17 저자직강+스터디그룹_5주차
 
Java9 특징 훑어보기
Java9 특징 훑어보기Java9 특징 훑어보기
Java9 특징 훑어보기
 
Springmvc
SpringmvcSpringmvc
Springmvc
 
빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지
빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지
빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지
 
19. Application - Spark Streaming 1
19. Application - Spark Streaming 119. Application - Spark Streaming 1
19. Application - Spark Streaming 1
 
Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Android ndk jni 설치및 연동
Android ndk jni 설치및 연동
 
Spark sql
Spark sqlSpark sql
Spark sql
 
Scala for play
Scala for playScala for play
Scala for play
 
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
 
[오픈소스컨설팅] ARM & OpenStack Community
[오픈소스컨설팅] ARM & OpenStack Community[오픈소스컨설팅] ARM & OpenStack Community
[오픈소스컨설팅] ARM & OpenStack Community
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
Java_01 기초
Java_01 기초Java_01 기초
Java_01 기초
 
Java 기초
Java 기초Java 기초
Java 기초
 

2.apache spark 실습

  • 2. 1. Spark standalone 설치 2016-12-26 2
  • 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. 환경 설정 - server • JDK 설치(JDK 1.8 이상일 경우 스킵 가능) – JDK : Java SE Development Kit 의 약자로, 자바 프로그램을 개발하기 위해 필요한 라이브러리 들의 모음 – Java Runtime Environment(자바 프로그램을 실행하기 위한 모듈들)를 포함하고 있음 – 본 링크에 접속하여 자신의 OS 타입에 맞는 JDK 최신 버전을 받는다.
  • 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. 환경 설정 - 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. • 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. 환경 설정 - 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. 환경 설정 - server • Spark Shell 실행 해보기 – cd ~/spark-2.0.2-bin-hadoop2.7 명령어로 스파크 홈 폴더에 이동 – (scala용)bin/spark-shell 명령어를 입력하여 스파크가 실행 되는 것을 확인한다. – (python용) bin/pyspark 명령어를 입력하여 스파크가 실행 되는 것을 확인한다. 2016-12-26 9
  • 10. 환경 설정 – 개발 PC • JDK 설치(JDK 1.8 이상일 경우 스킵 가능) – 본 링크에 접속하여 자신의 OS 타입에 맞는 JDK 최신 버전을 받는다.
  • 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. 환경 설정 – 개발 PC • JDK 설치(JDK 1.8 이상일 경우 스킵 가능) – 설치된 자바의 버전 확인 • cmd 창에서 “java –version” 커맨드를 실행하고 설치된 JDK의 버전을 확인
  • 13. 환경 설정 – 개발 PC • Eclipse 설치 – 본 링크에 이클립스 인스톨러를 설치
  • 14. 환경 설정 – 개발 PC • Eclipse 설치 – Eclipse installer에서 Eclipse IDE for Java developers를 선택 (EE 버전을 다운받아도 상관 없음)
  • 15. 3. Spark를 활용한 분석 2016-12-26 15
  • 16. Spark Architecture • Driver Program • executor에서 실행되는 job flow와 task 스케쥴링 관리를 담당 • Executor • Spark app을 위한 계산을 실행하고, 저장 데이터를 저장하고있는 프 로세스 • Cluster Manager • Executor의 시작 위치와 실행 시기를 담당 • 스파크는 플러그 형 cluster manager를 지원
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Spark를 활용한 분석 2016-12-26 27 • Spark 실행 방법 1. spark shell을 이용한 interactive 분석 – scala, python interface를 통한 interactive한 분석이 가능 – Apache zeppelin의 노트북 기능을 활용한 code 공유도 가능 2. Spark application을 작성하여 런칭 – Python 어플리케이션 개발 – Java 어플리케이션 개발 – scala 어플리케이션 개발
  • 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. Spark Application(java) • java 어플리케이션 개발 1. Java 프로젝트 개발 – Eclipse + maven 을 활용한 project 생성 – Maven이란? 1,2 2016-12-26 29 • File->New->Other… 선택 • Maven->Maven project 선택 후 “Next”
  • 30. Spark Application(java) • java 어플리케이션 개발 1. Java 프로젝트 개발 – Eclipse + maven 을 활용한 project 생성 2016-12-26 30 • Create a simple project 체크 박스 체크 후 “next”
  • 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. 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. 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. Spark Application(java) • java 어플리케이션 개발 1. Java 프로젝트 개발 – Eclipse + maven 을 활용한 project 생성 2016-12-26 34 • Maven 기본 JRE 변경  Workspace default JRE (JDK1.8.0_xxx) 을 선택한다.
  • 35. Spark Application(java) • java 어플리케이션 개발 1. Java 프로젝트 개발 – Eclipse + maven 을 활용한 project 생성 2016-12-26 35 • pom.xml 작성  pom.xml 더블클릭  하단의 pom.xml 탭 선택  붉은 박스 부분 입력
  • 36. Spark Application(java) • java 어플리케이션 개발 1. Java 프로젝트 개발 – Eclipse + maven 을 활용한 project 생성 2016-12-26 36 • Word count 코드 추가  testSparkApplication 패키지 추가  JavaWordCount.java 파일 추가
  • 37. Spark Application(java) • java 어플리케이션 개발 1. Java 프로젝트 개발 – Eclipse + maven 을 활용한 project 생성 2016-12-26 37 • Word count 코드 추가  JavaWordCount.java 예제는 Spark가 설치된 경로의 examples 디렉토리에서 찾을 수 있다.
  • 38. Spark Application(java) • java 어플리케이션 개발 1. Java 프로젝트 개발 – Eclipse + maven 을 활용한 project 생성 2016-12-26 38 • Word count 코드 추가  JavaWordCount.java 파일에 코드 입력
  • 39. Spark Application(java) • java 어플리케이션 개발 1. Java 프로젝트 개발 – Eclipse + maven 을 활용한 project 생성 2016-12-26 39 • Java의 함수형 프로그래밍(이론적 배경)
  • 40. Spark Application(java) • java 어플리케이션 개발 2. Java 프로젝트 빌드 2016-12-26 40 • 프로젝트 빌드  프로젝트 우클릭 -> Run as 선택 -> Maven Build … 선택  에러가 남아있다면 “alt+f5” 로 프로젝트 업데이트 실행
  • 41. Spark Application(java) • java 어플리케이션 개발 2. Java 프로젝트 빌드 2016-12-26 41 • 프로젝트 빌드  Goals: clean install compile  Run 클릭
  • 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. Spark Application(java) • java 어플리케이션 개발 2. Java 프로젝트 빌드 • 프로젝트 경로를 확인하고 • 프로젝트 폴더로 이동하여 target 폴더를 확인 • target 폴더 내에 빌드된 jar파일을 확인 2016-12-26 43
  • 44. Spark Application(java) • java 어플리케이션 개발 3. Java 프로젝트 실행 • 빌드된 jar파일을 서버로 전송 2016-12-26 44
  • 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 ….

Notas do Editor

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.study.spark</groupId> <artifactId>testSparkApplication</artifactId> <version>1.0</version> <name>wordCounting</name> <dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.0.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.11</artifactId> <version>2.0.2</version> <scope>provided</scope> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </pluginManagement> </build> </project>
  2. package testSparkApplication; import scala.Tuple2; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.function.FlatMapFunction; import org.apache.spark.api.java.function.Function2; import org.apache.spark.api.java.function.PairFunction; import org.apache.spark.sql.SparkSession; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.regex.Pattern; public final class JavaWordCount { private static final Pattern SPACE = Pattern.compile(" "); public static void main(String[] args) throws Exception { if (args.length < 1) { System.err.println("Usage: JavaWordCount <file>"); System.exit(1); } SparkSession spark = SparkSession .builder() .appName("JavaWordCount") .getOrCreate(); JavaRDD<String> lines = spark.read().textFile(args[0]).javaRDD(); JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() { @Override public Iterator<String> call(String s) { return Arrays.asList(SPACE.split(s)).iterator(); } }); JavaPairRDD<String, Integer> ones = words.mapToPair( new PairFunction<String, String, Integer>() { @Override public Tuple2<String, Integer> call(String s) { return new Tuple2<>(s, 1); } }); JavaPairRDD<String, Integer> counts = ones.reduceByKey( new Function2<Integer, Integer, Integer>() { @Override public Integer call(Integer i1, Integer i2) { return i1 + i2; } }); List<Tuple2<String, Integer>> output = counts.collect(); for (Tuple2<?,?> tuple : output) { System.out.println(tuple._1() + ": " + tuple._2()); } spark.stop(); } }
  3. package testSparkApplication; import scala.Tuple2; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.function.FlatMapFunction; import org.apache.spark.api.java.function.Function2; import org.apache.spark.api.java.function.PairFunction; import org.apache.spark.sql.SparkSession; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.regex.Pattern; public final class JavaWordCount { private static final Pattern SPACE = Pattern.compile(" "); public static void main(String[] args) throws Exception { if (args.length < 1) { System.err.println("Usage: JavaWordCount <file>"); System.exit(1); } SparkSession spark = SparkSession .builder() .appName("JavaWordCount") .getOrCreate(); JavaRDD<String> lines = spark.read().textFile(args[0]).javaRDD(); JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() { @Override public Iterator<String> call(String s) { return Arrays.asList(SPACE.split(s)).iterator(); } }); JavaPairRDD<String, Integer> ones = words.mapToPair( new PairFunction<String, String, Integer>() { @Override public Tuple2<String, Integer> call(String s) { return new Tuple2<>(s, 1); } }); JavaPairRDD<String, Integer> counts = ones.reduceByKey( new Function2<Integer, Integer, Integer>() { @Override public Integer call(Integer i1, Integer i2) { return i1 + i2; } }); List<Tuple2<String, Integer>> output = counts.collect(); for (Tuple2<?,?> tuple : output) { System.out.println(tuple._1() + ": " + tuple._2()); } spark.stop(); } }
  4. package testSparkApplication; import scala.Tuple2; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.function.FlatMapFunction; import org.apache.spark.api.java.function.Function2; import org.apache.spark.api.java.function.PairFunction; import org.apache.spark.sql.SparkSession; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.regex.Pattern; public final class JavaWordCount { private static final Pattern SPACE = Pattern.compile(" "); public static void main(String[] args) throws Exception { if (args.length < 1) { System.err.println("Usage: JavaWordCount <file>"); System.exit(1); } SparkSession spark = SparkSession .builder() .appName("JavaWordCount") .getOrCreate(); JavaRDD<String> lines = spark.read().textFile(args[0]).javaRDD(); JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() { @Override public Iterator<String> call(String s) { return Arrays.asList(SPACE.split(s)).iterator(); } }); JavaPairRDD<String, Integer> ones = words.mapToPair( new PairFunction<String, String, Integer>() { @Override public Tuple2<String, Integer> call(String s) { return new Tuple2<>(s, 1); } }); JavaPairRDD<String, Integer> counts = ones.reduceByKey( new Function2<Integer, Integer, Integer>() { @Override public Integer call(Integer i1, Integer i2) { return i1 + i2; } }); List<Tuple2<String, Integer>> output = counts.collect(); for (Tuple2<?,?> tuple : output) { System.out.println(tuple._1() + ": " + tuple._2()); } spark.stop(); } }
  5. package testSparkApplication; import scala.Tuple2; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.function.FlatMapFunction; import org.apache.spark.api.java.function.Function2; import org.apache.spark.api.java.function.PairFunction; import org.apache.spark.sql.SparkSession; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.regex.Pattern; public final class JavaWordCount { private static final Pattern SPACE = Pattern.compile(" "); public static void main(String[] args) throws Exception { if (args.length < 1) { System.err.println("Usage: JavaWordCount <file>"); System.exit(1); } SparkSession spark = SparkSession .builder() .appName("JavaWordCount") .getOrCreate(); JavaRDD<String> lines = spark.read().textFile(args[0]).javaRDD(); JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() { @Override public Iterator<String> call(String s) { return Arrays.asList(SPACE.split(s)).iterator(); } }); JavaPairRDD<String, Integer> ones = words.mapToPair( new PairFunction<String, String, Integer>() { @Override public Tuple2<String, Integer> call(String s) { return new Tuple2<>(s, 1); } }); JavaPairRDD<String, Integer> counts = ones.reduceByKey( new Function2<Integer, Integer, Integer>() { @Override public Integer call(Integer i1, Integer i2) { return i1 + i2; } }); List<Tuple2<String, Integer>> output = counts.collect(); for (Tuple2<?,?> tuple : output) { System.out.println(tuple._1() + ": " + tuple._2()); } spark.stop(); } }
  6. package testSparkApplication; import scala.Tuple2; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.function.FlatMapFunction; import org.apache.spark.api.java.function.Function2; import org.apache.spark.api.java.function.PairFunction; import org.apache.spark.sql.SparkSession; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.regex.Pattern; public final class JavaWordCount { private static final Pattern SPACE = Pattern.compile(" "); public static void main(String[] args) throws Exception { if (args.length < 1) { System.err.println("Usage: JavaWordCount <file>"); System.exit(1); } SparkSession spark = SparkSession .builder() .appName("JavaWordCount") .getOrCreate(); JavaRDD<String> lines = spark.read().textFile(args[0]).javaRDD(); JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() { @Override public Iterator<String> call(String s) { return Arrays.asList(SPACE.split(s)).iterator(); } }); JavaPairRDD<String, Integer> ones = words.mapToPair( new PairFunction<String, String, Integer>() { @Override public Tuple2<String, Integer> call(String s) { return new Tuple2<>(s, 1); } }); JavaPairRDD<String, Integer> counts = ones.reduceByKey( new Function2<Integer, Integer, Integer>() { @Override public Integer call(Integer i1, Integer i2) { return i1 + i2; } }); List<Tuple2<String, Integer>> output = counts.collect(); for (Tuple2<?,?> tuple : output) { System.out.println(tuple._1() + ": " + tuple._2()); } spark.stop(); } }
  7. package testSparkApplication; import scala.Tuple2; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.function.FlatMapFunction; import org.apache.spark.api.java.function.Function2; import org.apache.spark.api.java.function.PairFunction; import org.apache.spark.sql.SparkSession; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.regex.Pattern; public final class JavaWordCount { private static final Pattern SPACE = Pattern.compile(" "); public static void main(String[] args) throws Exception { if (args.length < 1) { System.err.println("Usage: JavaWordCount <file>"); System.exit(1); } SparkSession spark = SparkSession .builder() .appName("JavaWordCount") .getOrCreate(); JavaRDD<String> lines = spark.read().textFile(args[0]).javaRDD(); JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() { @Override public Iterator<String> call(String s) { return Arrays.asList(SPACE.split(s)).iterator(); } }); JavaPairRDD<String, Integer> ones = words.mapToPair( new PairFunction<String, String, Integer>() { @Override public Tuple2<String, Integer> call(String s) { return new Tuple2<>(s, 1); } }); JavaPairRDD<String, Integer> counts = ones.reduceByKey( new Function2<Integer, Integer, Integer>() { @Override public Integer call(Integer i1, Integer i2) { return i1 + i2; } }); List<Tuple2<String, Integer>> output = counts.collect(); for (Tuple2<?,?> tuple : output) { System.out.println(tuple._1() + ": " + tuple._2()); } spark.stop(); } }
  8. package testSparkApplication; import scala.Tuple2; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.function.FlatMapFunction; import org.apache.spark.api.java.function.Function2; import org.apache.spark.api.java.function.PairFunction; import org.apache.spark.sql.SparkSession; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.regex.Pattern; public final class JavaWordCount { private static final Pattern SPACE = Pattern.compile(" "); public static void main(String[] args) throws Exception { if (args.length < 1) { System.err.println("Usage: JavaWordCount <file>"); System.exit(1); } SparkSession spark = SparkSession .builder() .appName("JavaWordCount") .getOrCreate(); JavaRDD<String> lines = spark.read().textFile(args[0]).javaRDD(); JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() { @Override public Iterator<String> call(String s) { return Arrays.asList(SPACE.split(s)).iterator(); } }); JavaPairRDD<String, Integer> ones = words.mapToPair( new PairFunction<String, String, Integer>() { @Override public Tuple2<String, Integer> call(String s) { return new Tuple2<>(s, 1); } }); JavaPairRDD<String, Integer> counts = ones.reduceByKey( new Function2<Integer, Integer, Integer>() { @Override public Integer call(Integer i1, Integer i2) { return i1 + i2; } }); List<Tuple2<String, Integer>> output = counts.collect(); for (Tuple2<?,?> tuple : output) { System.out.println(tuple._1() + ": " + tuple._2()); } spark.stop(); } }
  9. package testSparkApplication; import scala.Tuple2; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.function.FlatMapFunction; import org.apache.spark.api.java.function.Function2; import org.apache.spark.api.java.function.PairFunction; import org.apache.spark.sql.SparkSession; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.regex.Pattern; public final class JavaWordCount { private static final Pattern SPACE = Pattern.compile(" "); public static void main(String[] args) throws Exception { if (args.length < 1) { System.err.println("Usage: JavaWordCount <file>"); System.exit(1); } SparkSession spark = SparkSession .builder() .appName("JavaWordCount") .getOrCreate(); JavaRDD<String> lines = spark.read().textFile(args[0]).javaRDD(); JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() { @Override public Iterator<String> call(String s) { return Arrays.asList(SPACE.split(s)).iterator(); } }); JavaPairRDD<String, Integer> ones = words.mapToPair( new PairFunction<String, String, Integer>() { @Override public Tuple2<String, Integer> call(String s) { return new Tuple2<>(s, 1); } }); JavaPairRDD<String, Integer> counts = ones.reduceByKey( new Function2<Integer, Integer, Integer>() { @Override public Integer call(Integer i1, Integer i2) { return i1 + i2; } }); List<Tuple2<String, Integer>> output = counts.collect(); for (Tuple2<?,?> tuple : output) { System.out.println(tuple._1() + ": " + tuple._2()); } spark.stop(); } }