SlideShare une entreprise Scribd logo
1  sur  75
강동현
2016-12-22 1
Apache Spark 소개 및 실습
목표
• 빅데이터 분석 플랫폼의 출현 배경을 이해한다.
• Spark와 Hadoop 과의 차이점을 이해한다.
• Spark의 구조에 대해 이해한다.
• Spark를 설치하고 사용하는 방법을 익힌다.
2016-12-22 2
목차
1. 빅데이터
2. Apache Hadoop & Hadoop eco-system
3. Resilient Distributed Dataset
4. Spark 개요
5. [실습]Spark 설치
6. [실습]Spark 예제 실행
2016-12-22 3
1. 빅데이터
2016-12-22 4
빅데이터란?
– A bunch of data?
– An industry?
– An expertise?
– A trend?
– A cliche?
2016-12-22 5
빅데이터란?
• 정의
– 빅데이터(big data)란 기존 데이터베이스 관리도구로 데이터를 수
집, 저장, 관리, 분석할 수 있는 역량을 넘어서는 대량의 정형 또는
비정형 데이터 집합 및 이러한 데이터(를 저장하고 이)로부터 가치
를 추출하고 결과를 분석하는 기술을 의미한다.
• 특징
– 3V (Volume + Velocity + Variety)
Source: https://ko.wikipedia.org/wiki/%EB%B9%85_%EB%8D%B0%EC%9D%B4%ED%84%B0
2016-12-22 6
빅데이터의 활용
– 유저 행동 분석
– 트렌드 토픽 추적
– 유저-토픽 모델링
– 타게팅 광고
– 추천시스템
– AB-테스트 분석
– And more...
2016-12-22 7
사실 제일 중요한 파트
computer
빅데이터 이전의 데이터 처리
• Word Counting Example
– 1 computer
– Input file 준비(1KB ~ 10GB)
– 프로그램 코딩 & 실행( C++, Java, python, …)
– Output 보기
wordCount Program
(java, c++, python, … )
Input
file
Output
file
Input File
A Apple is red.
A Banana is yellow.
A Cat is cute.
…
Output File
A 3
Apple 1
is 3
…
처리해야 할 데이터의
양이 많아져도
속도와 정확성이
보장 될까?
2016-12-22 8
3V?
Volume
Velocity
http://www.slideshare.net/deview/215-67608986
2016-12-22 9
3V?
Volume
Variety
Velocity
http://www.slideshare.net/deview/214-67608573
2016-12-22 10
How big is big?
– 2008: Google processes 20 PB a day
– 2009: Facebook has 2.5 PB user data + 15 TB/day
– 2009: eBay has 6.5 PB user data + 50 TB/day
– 2011: Yahoo! has 180-200 PB of data
– 2012: Facebook ingests 500 TB/day
2016-12-22 11
Scale out의 필요성
• Scale up의 한계
– 데이터 크기의 문제
• Terabytes, Petabytes 데이터의 저장 및 관리
– 데이터 처리의 문제
• multiprocessing의 한계
– 비용의 문제
이미지 출처 : http://blog.naver.com/islove8587/220548900044
2016-12-22 12
2. Apache Hadoop &
Hadoop eco-system
2016-12-22 13
Apache Hadoop
• 2005년, Doug Cutting과 Mike Cafarella in Yahoo!
• “the Nutch search engine”의 서브프로젝트로 시작
– HDFS - 2003 – Google File System
– MapReduce - 2004 – MapReduce : Simplified Data Processing
on Large Clusters
Source: https://en.wikipedia.org/wiki/Apache_Hadoop
2016-12-22 14
Apache Hadoop
• Apache software foundation의 최상위 프로젝트
• open-source software for reliable, scalable, distributed
computing.
• 2016. 8. 25 stable release 2.7.3
• 2016. 9. 03 alpha1 release 3.0.0
• 2013년, Hadoop 2 발표
– HDFS module의 비약적인 향상
– YARN 의 등장
• 2016년 9월, Hadoop 3 발표
– HDFS 저장 효율 증가
– Multiple Stanby Namenode, heap 튜닝 기능
– MapReduce 성능 향상
http://hadoop.apache.org/
2016-12-22 15
Hadoop 모듈
• Hadoop Common
– Hadoop 실행 시 다른 모듈들을 지원하기 위한 공통 유틸들
• Hadoop Distributed File System (HDFS™)
– high-throughput을 보장하는 분산 파일 시스템
• Hadoop MapReduce
– 대용량의 병렬 데이터를 배치 연산할 수 있게 해주는 모듈
• Hadoop YARN
– 클러스터의 자원관리 및 스케쥴링을 담당하는 프레임워크
– 2013 - Apache Hadoop YARN: Yet Another Resource Negotiator
2016-12-22 16
http://hortonworks.com/hadoop/yarn/
Hadoop Eco-system
Hortonworks, 2014.
Hadoop Yarn architecture
17
Hadoop Eco-system
Hadoop eco-system
(cluster를 위한 OS?? ㅎㅎ??)
http://blrunner.com/99
18
빅데이터 분석 시스템 구축
lambda-architecture
http://lambda-architecture.net
2016-12-22 19
빅데이터 분석 시스템 구축 – spark 이전
• 분석할 데이터의 특성에 따라 사용 가능한 플랫폼이 다름
– 배치처리 분석을 위해서는 hadoop 사용
– 스트림 데이터 분석에서는 storm 사용
• 결과분석 등의 추가 작업을 위해서는 Third party package들과의
연동이 필요함
– Hbase 등의 NoSQL DB와의 연동을 통해 데이터를 관리
– Hive, mahout 등의 추가 package를 통해서 SQL분석, ML 이 가능
2016-12-22 20
익숙해져야 할 인터페이스가 너무 많고 복잡하네...
Hadoop의 데이터 처리
• Word Counting Example
– Computer cluster
– Input File
– Hadoop MR application
• Map/Reduce function
– Output File(hdfs)
Computing Node
read Write
Write
read
Map function
Reduce function
2016-12-22 21
Hadoop의 데이터 처리
• DISK 기반 데이터 처리의 문제점
– 데이터 처리 시간 외에도 read/write 연산에 추가 시간 소요
– 반복 쿼리 작업 수행 시 중간 결과물도 DISK에 read/write 반복
• Iteration 작업에 적합하지 않음
– 동일 Data에 대해서 작업할 때, 매번 Read 연산이 필요
DISK 기반 데이터 처리
2016-12-22 22
Hadoop의 disk 기반 데이터 처리는 효율이 떨어지네..
3. Resilient Distributed Dataset
2016-12-22 23
인메모리 기반의 데이터 프로세싱
• Spark 이전에는 RAM 기반으로 분산처리 해보려는 시도가 없었을까?
• Piccolo(Ram 기반)의 데이터 프로세싱
– Fine-grained update 지원
• (ex> DBMS에서 table의 특정 element만 update 하는 것과 유사)
– Fault-tolerance가 성능을 저하
• RAM 상의 데이터 셋이 망가짐을 대비해 replicating
• replicating만으로는 불안하므로 disk에 checkpointing
• replicating 하는 동안 연산을 멈춰야하며, checkpointing 시에는 더욱 시간이 오래 걸림
• 뭔가 부족한 느낌..
• Hadoop(Disk 기반)의 데이터 프로세싱
– Fine-grained update 지원하지 않음
• file to file로의 변경만 지원하며 변경된 파일을 새로 씀
• Modify가 불가능한 파일 시스템
• (ex> DBMS 변환이 필요할 경우 update는 사용할 수 없고,
“create table as (select ~~~)” query를 통해 새로운 table을 만드는 것과 유사)
• 둘을 섞어볼까?
2016-12-22 24
http://www.slideshare.net/yongho/rdd-paper-review
인메모리 기반 데이터 프로세싱
프레임워크 Apahce Hadoop Piccolo
데이터 저장 공간 HDD/SDD RAM
프로세싱 속도 느림 빠름
Fine grained
update
미지원 지원
Fault-tolerance
-상대적으로 쉬움
-성능에 영향 X
-상대적으로 복잡
-성능 저하의 원인
분산처리 지원 지원
2016-12-22 25
Apahce Spark
RAM
빠름
미지원
-상대적으로 쉬움
-성능에 영향 X
미지원
지원
Reliable
Scalable
Fast
인메모리 기반 데이터 프로세싱
• 단계-단계 사이에 read/write 작업이 사라짐
=> 반복 작업의 효율이 증가함
2016-12-22 26
인메모리 기반 데이터 프로세싱
• 매 쿼리때마다 input을 처음부터 read해왔던 문제가 사라짐
=>동일 데이터 셋에 대한 데이터 변환/질의 처리 효율이 증가함
2016-12-22 27
Resilient Distributed Datasets
• Resilient Distributed Datasets
– Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster
Computing
– 인메모리 기반 데이터 처리
– Spark 에서는 내부적으로 연산하는 데이터들을 모두 RDD 타입으로 처리
– Spark application 개발은 아래의 3가지에 대한 이해를 바탕으로 시작
• RDD
• RDD 변환 API (Scala / Python/ java / R interface)
• RDD 변환 API 로 만들어진 SQL/ML/graph/stream Library
(Scala / Python/ java / R interface)
– Immutable, partitioned collections of record
– 변하지 않는, 분산된 레코드들의 집합
• Immutable : 만들어진 뒤엔 변하지 않아
• Partitioned : 데이터 셋을 잘게 잘라서 분산
2016-12-22 28
분산처리는 어떻게?? scalability, reliability 어떻게 보장해?
=> 어떻게 만들었는지 알면 또 만들 수 있겠네?
=> 가장 효율적으로 클러스터 노드에 분산시켜 보자
disk 기반 데이터 처리의 성능 문제
간단한 인터페이스 지원
Spark application 예제
2016-12-22 29
Hadoop MapReduce 기반 Word Count 예제
Spark 기반 Word Count 예제
코드와 실례로 보기
lambda expression 에 대해 알아야 함
(java기준 설명)
함수형 프로그래밍에도 관심있다면
글1, 글2 도 보면 좋을 듯
Spark application 예제
• scala spark 예제 : word counting
scala> textFile = sc.textFile("README.md")
scala> words = textFile.flatMap(line => line.split(" ")) //(transformation)
scala> mapWords = words.map(word => (word, 1)). //(transformation)
scala> redWords = mapWords.reduceByKey((a, b) => a + b) //(transformation)
scala> collection = redWords.Collect() //(action)
2016-12-22 30
[(#, 4),
(Apache, 24),
(Spark,16), ( ,68),
(help, 1),
(storage, 1),
(Hadoop,3),
…]
File :
README.md
[RDD<String> :
textFile
RDD<String> :
words
RDD<(String,int)> :
words
# Apache Spark
Spark is a fast and general…
high-level APIs in Scala, Java…
supports general computation…
rich set of higher-level tools,…
MLlib for machine learning, …
and Spark Streaming for….
…
RDD<(String,int)> :
words
#
Apache
Spark
Spark
is
a
fast
and
…
(#,1)
(Apache ,1)
(Spark ,1)
(,1)
(Spark ,1)
(is ,1)
(a ,1)
(fast ,1)
(and ,1)
…
(#, 4)
(Apache, 24)
(Spark,16)
( ,68)
(help, 1)
(storage, 1)
(Hadoop,3)
…
flatMap map
reduce
ByKey
collect
array[(String,int)] :
collection
Data
Src
output
Spark application 예제
• scala spark 예제 : line counting
scala> textFile = sc.textFile("README.md")
scala> SparkLine = textFile.filter(line => line.contains("Spark")) //(transformation)
scala> lineCnt = SparkLine.count() //(action)
2016-12-22 31
File :
README.md
RDD<String> :
SparkLine
int :
lineCnt
19# Apache Spark
Spark is a fast and general…
high-level APIs in Scala, Java…
supports general computation…
rich set of higher-level tools,…
MLlib for machine learning, …
and Spark Streaming for….
<http://spark.apache.org/>
…
RDD<String>:
TextFile
# Apache Spark
Spark is a fast and general…
and Spark Streaming for….
<http://spark.apache.org/>
…
Filter Count
Data
Src
output
• RDD를 제어하는 API operation은 크게 2개의 타입
– Transformation : RDD에서 새로운 RDD를 생성하는 함수
– Action : RDD에서 RDD가 아닌 타입의 data로 변환하는 하는 함수들
• operation의 순서를 기록해 DAG로 표현한 것을 Lineage라 부름
RDD operation
RDD Operation
2016-12-22 32
• Narrow Dependencies
– 변환 후의 파티션이 하나의 파티션으로
매핑되는 경우
– 해당 작업이 다 한 노드에서 처리 가능
– 네트워크를 타지 않음
(메모리의 속도로 동작)
– 파시션이 부셔져도 노드에서 다 복원 가능
• Wide Dependencies
– 변환 후의 파티션이 여러 파티션으로
매핑 되는 경우
– 부셔지면 재계산 비용이 비싸다
– 셔플이 일어나야 하는 작업들
– 일반적으로 네트워크를 타는 경우가 많음
RDD Operation
2016-12-22 33
Dependency type
Partition
• 하나의 RDD는 여러 개의 파티션으로 나뉘어짐
• 성능에 유효한 영향을 줌
• 파티션의 개수, 파티셔너는 선택 가능
• 기본파티셔너 (Hash,range) 외에도 사용자가 정의한 파티셔너를 사용가능
Lineage
1. fault-tolerant 확보
– 계보(lineage)만 기록해두면 동일한 RDD를 생성할 수 있음
– RDD의 copy를 보관하기 보다, Lineage만 보관해도 복구가 가능
– 일부 계산 코스트가 큰 RDD는 디스크에 Check pointing
2. Lazy-execution이 가능해짐
– 인터프리터에서 Transformation 명령어를 읽어 들일 때는 단순히 lineage만 생성
– Action 명령어가 읽히면, 쌓여있던 lineage를 실행
Lineage의 예시
2016-12-22 34
reliablity 확보
Lineage
3. Job scheduling에 활용 가능
– Lineage가 어느 정도 그려진 상태에서는 현재 자원(source data)이 배치된 상황과 앞으
로 배치될 상황 및 dependency 등을 미리 계산해서 작업 분산이 가능해진다.
2016-12-22 35
scalability 확보
4. Apache Spark
2016-12-22 36
Apache Spark란?
• 인메모리 기반의 대용량 데이터 고속 처리 엔진
• 범용의 분산 클러스터 컴퓨팅 프레임워크
• JAVA, Python, scala,R을 기반으로 구동
• 2009년 UC Berkely AMPLab에서 시작된 오픈소스 프로젝트
• 2013년 아파치 프로젝트 선정
• 2014년 아파치 최상위 프로젝트 선정
• 2016년 Stable release 2.0.1
http://spark.apache.org/
2016-12-22 37
특장점
• 인메모리 데이터 처리
– 하둡의 맵리듀스 작업처리 속보보다 100배 빠른 성능 구현
• 단일 시스템 내에서 데이터 batch/Stream 처리, SQL 및 Machine
Learning, Graph processing을 지원
• JAVA, scala, python, R 인터페이스 제공
• Standalone은 물론 YARN, mesos 등의
클러스터 리소스 관리 패키지를 통해 다양한 환경에서 구동가능
• 8000개 이상의 노드 추가 가능한 scalability 확보
• HDFS, cassandra, Hbase, S3 등 다양한 데이터의 활용 가능
2016-12-22 38
Spark 아키텍쳐
• 분산 클러스터 컴퓨팅 환경 구축을 위해 3가지 환경을 지원
– 자체적인 standalone scheduler 환경 구축 (싱글 노드)
– YARN, Mesos와 같은 클러스터 관리 패키지 연동을 통한 클러스터 리소스 관리 및
환경 구축
• Spark Core
– 메인 컴포넌트로 배치 단위의 RDD에 연산을 가해 데이터를 처리하는 작업을 수행
• 공식지원 추가 라이브러리
– Spark Core를 기반으로 SQL 분석, 스트리밍 처리, Machine Learning, Graph
Processing을 모두 지원
2016-12-22 39
3. Apache Spark - MLlib
2016-12-22 40
컴포넌트 - Spark MLlib
• 스파크 기반의 scalable 머신러닝 라이브러리
• Java, Scala, Python, R 모든 인터페이스에서 사용 가능
• 일반적인 MR 프로세싱 보다 100배 가량 빠른 성능
• Spark의 ML Pipeline 개념은 Python module scikit-learn
기반
• 일반적인 ML 알고리즘과 utilities들을 포함하고 있음
– linear SVM and logistic regression
– classification and regression tree
– random forest and gradient-boosted trees
– clustering via k-means, Gaussian mixtures, and power iteration clustering
– topic modeling via latent Dirichlet allocation
– linear regression with L1- and L2-regularization
– multinomial naive Bayes
– frequent itemset mining via FP-growth
– basic statistics
– feature transformations
– …
2016-12-22 41
3. Apache Spark - graphX
2016-12-22 42
컴포넌트- Spark GraphX
• GraphX는 스파크 상에서 분산형 그래프 프로세싱이 가능하게 해주
는 프레임워크
• Vertex RDD/Edge RDD라는 명칭으로 확장된 형태의 RDD type을
다룸
• Pregel을 기반으로한 그래프 처리 API를 제공
– Pregel은 구글에서 개발한 그래프 처리 아키텍쳐
– subgraph, joinVertices, and aggregateMessages 등의 연산 지원
• 간단한 그래프 분석을 위한 그래프 알고리즘과 그래프 빌더가 포함
2016-12-22 43
3. Apache Spark - Spark Streaming
2016-12-22 44
컴포넌트 - Spark Streaming
• Spark Core의 확장
– 스파크에서 Scalable, High-
throughput, Fault-tolerant한 스트림
처리가 가능하게 해줌
• 스트림을 데이터를 Mini-batch 사
이즈로 쪼개어 RDD처럼 처리
– Discretized Stream(DStream)이라는
개념으로 데이터 추상화
• 스트림 데이터에 실시간으로
map, reduce, join, window와 같
은 함수 적용 가능
• 다양한 방식의 Data I/O를 지원
– Kafka, Flume, Twitter 등 다양한 소스
의 데이터를 받아들일 수 있음.
– 처리된 데이터는 실시간으로 HDFS,
DB, 대시보드 등으로 보내질 수 있음.
Spark Streaming 활용도
Spark Streaming과 Spark core의 관계
Mini-batch 개념도
2016-12-22 45
3. Apache Spark - Spark SQL
2016-12-22 46
컴포넌트 - Spark SQL
• 스파크 프로젝트 내에서 SQL이나 HiveQL과 같은 쿼리 작업이
가능하게 해주는 라이브러리
• Java, Python, Scala, R 모든 인터페이스에서 사용 가능
• DataFrame & DataSet이라는 새로운 RDD-like 타입을 다룸
– DataFrame & DataSet 은 테이블과 비슷한 형태로 Row objects들의 집합
• DataFrame & DataSet 은 다양한 Input source를 지원
– 존재하던 RDD
– JSON 데이터 셋
– HiveQL 쿼리를 실행한 결과
– ODBC/JCBC 서버와의 연동
2016-12-22 47
Tungsten execution engine
• 스파크의 bottleneck은?
• I/O나 network bandwidth가 아님
– High bandwidth SSD & striped HDD의 등장
– 10Gbps network의 등장
• CPU 와 memory에서 bottleneck 현상이 발생
– 기본적인 processing workload와 함께
– Disk I/O를 최소화하기 위한 input data pruning workload
– Shuffle을 위한 serialization과 hashing이 특히 key bottleneck
• CPU와 memory의 효율을 높여야…
– 하드웨어의 한계에 가깝게 성능을 뽑아올 수 있는 System Engine이 필요!
• Project Tungsten
– Spark 1.4부터 DataFrame에 적용
– spark 1.6에서 Dataset으로 확장 참고:
1. Project Tungsten – databrick
2. https://issues.apache.org/jira/browse/SPARK-7075
Tungsten execution engine
• Memory Management and Binary Processing
– JVM object 모델과 garbage collection의 overhead가 큼
=>장기적으로 data를 저장할 경우 Java objects 보다는 binary format으로 저장
– 메모리를 좀더 명확하게 관리할 필요가 있음
=> denser in-memory data format을 적용하여 메모리 사용률을 최소화 함
더 나은 memory accounting (size of bytes) 기술 적용(기존엔 Heuristics 기반)
– 이를 기반으로 하면서 domain semantics을 최대한 반영한
data processing을 지원해야 함
=>binary format의 in memory data에 대해서도 data type을 이해하는 operator를 지원
(serialization/deserialization 없이 data processing)
• Cache-aware Computation
– sorting and hashing for aggregations, joins, and shuffle의 성능이 향상이 필요
=>memory hierarchy를 활용하는 algorithm과 data structure
• Code Generation
– expression evaluation, DataFrame/SQL operators, serializer의 성능 향상이 필
요
=>modern compilers and CPUs의 성능을 제대로 활용할 수 있는 code generation
Catalyst optimizer
– Catalyst의 구동 (In Spark SQL) ( 자세한 사항은 paper 참고)
– Tree 구조를 기반으로 optimization
– 크게 4단계로 진행
– extensible design
• 새로운 optimization techniques과 feature들의 추가가 용이
• 외부 개발자가 optimizer를 확장하여 사용하기 용이
Catalyst의
Optimization Phase
그림 출처: Catalyst Optimizer - databrick
Tree로 표현된
Query plan
그림 출처: Deep Dive Into Catalyst
컴포넌트 - Spark SQL / RDD와 DataFrame
2016-12-22 51
• RDD 연산
– Case1 (pseudo-code)
≫ Rdd
.filter(line -> isString(line.split(‘,’).get(0)))
.map(line =>( line.split(‘,’).get(0) +
line.split(‘,’).get(1) +
(line.split(‘,’).get(2)+10))
Profile.csv
id,name,age
1201,stish,25
1202,kishna,28
1203,amith,39
1204,javed,23
1205,prudvi,23
DataFrame df
+----+------+--------+
| age | id | name |
+----+------+--------+
| 25 | 1201 | satish |
| 28 | 1202 | krishna|
| 39 | 1203 | amith |
| 23 | 1204 | javed |
| 23 | 1205 | prudvi |
+----+------+--------+
• DataFrame 연산
– case1 (pseudo-code)
≫ df.select($“id", $"name", $"age" + 10)
– case2 (pseudo-code)
≫ df.createOrReplaceTempView(“profile")
≫ spark.sql("SELECT id, name, age+10 FROM profile”)
• Input file
RDD<string> rdd
id,name,age
1201,stish,25
1202,kishna,28
1203,amith,39
1204,javed,23
1205,prudvi,23
컴포넌트 - Spark SQL / RDD와 DataFrame
DataFrames / SQL
Structured Binary Data (Tungsten)
• High level relational operation 사용 가능
• Catalyst optimization 적용 가능
• Lower memory pressure
• Memory accounting (avoid OOMs)
• Faster sorting / hashing / serialization
RDDs
Collections of Native JVM Objects
• 로직 상에 특정 data type 표현이 용이
• Compile-time type-safety 보장
• 함수형 프로그래밍 가능
• 두 타입 간의 변환은 지원 되지만..
– 높은 변환 cost
– 변환을 위한 boilerplate(표준 문안, 규칙) 숙지 필요
• 둘의 장점을 합쳐놓은 API를 제공할 수 있을까?
– Catalyst optimizer & Tungsten execution engine의 장점을 활용할 수 있어야 함
– Domain object의 type을 이해할 수 있고 이를 활용할 수 있어야 함
성능 ↑안전성 & 유연성 ↑
2016-12-22 52
컴포넌트 - Spark SQL / Dataset
– RDD와 DataFrame의 장점만 취해 만든 interface API
– http://spark.apache.org/docs/latest/api/java/org/apache/spark/sql/Dataset.html
 특장점
 Fast
 Typesafe
 Support for a variety of object models
 Java Compatible
 Interoperates with DataFrames
Dataset
Structured Binary Data (Tungsten)
• High level relational operation 사용 가능
• Catalyst optimization 적용 가능
• Lower memory pressure
• Memory accounting (avoid OOMs)
• Faster sorting / hashing / serialization
• 로직 상에 특정 data type 표현이 용이
• Compile-time type-safety 보장
• 함수형 프로그래밍 가능
그림 출처: technicaltidbit.blogspot.kr/
2016-12-22 53
컴포넌트 - Spark SQL / Dataset
• structured/semi-structured Data 분석 => Dataset으로
구분 RDD DataFrame Dataset
성능 비교적 느림 빠름 빠름
메모리 관리 누수 존재 최적화 최적화
Type-safety 보장 보장되지 않음 보장
분석 확장성 유연함 제한적 유연함
RDD-Dataset의
WordCount 예제의
실행 시간 비교
RDD-Dataset의
캐싱 시 memory
사용량 비교
그림 출처: Introducing Spark Datasets- databrick
2016-12-22 54
컴포넌트 - Spark SQL / DataSet
2016-12-22 55
• DataSet 연산
– case1 (pseudo-code)
≫ ds.map(p ->p.setAge(p.getAge+10))
– case2 (pseudo-code)
≫ ds.createOrReplaceTempView(“profile")
≫ spark.sql("SELECT id, name, age+10 FROM profile”)
Profile.csv
id,name,age
1201,stish,25
1202,kishna,28
1203,amith,39
1204,javed,23
1205,prudvi,23
• Input file
DataSet<Profile> ds
+----+------+--------+
| age | id | name |
+----+------+--------+
| 25 | 1201 | satish |
| 28 | 1202 | krishna|
| 39 | 1203 | amith |
| 23 | 1204 | javed |
| 23 | 1205 | prudvi |
+----+------+--------+
Apache Spark2.0
• API usability
– Dataset, DataFrame
• SQL 2003 support
• performance improvements
• structured streaming
• R UDF 지원
http://spark.apache.org/
2016-12-22 56
5. [실습] Spark standalone 설치
2016-12-22 57
실습 환경 정보
본 문서의 실습 환경 정보
• OS : Centos 7.0
• Java version : JDK 8
• Spark version : Spark 2.0.1 release
• 예제 언어 : scala, python
2016-12-22 58
사전 환경 설정(생략)
• JDK 설치(1.8 이상일 경우 스킵)
– Java SE development kit 의 약자 자바 프로그램을 개발하기
위해 필요한 라이브러리 들의 모음
– Java Runtime Environment(자바 프로그램을 실행하기 위한 모듈들)
를 포함하고 있음
– 본 링크 에서 OS 별 최신버전의 jdk를 다운로드 후 아래와 같이 설치
2016-12-22 59
$ cd /usr
$ mkdir java
$ cd /usr/java
// “/usr/java/” 경로에 준비된 jdk1.X.X_XX.tar 옮기기
$ mv {JDK 다운로드 경로}/ jdk-{version}-linux-x64.tar.gz /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
사전 환경 설정(생략)
• JAVA_HOME 변수 설정
- 공용 변수 저장 파일의 가장 하단부에 환경변수 추가 후 저장
- 설치한 버전의 java가 확인되면 완료
2016-12-22 60
$ 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)
• http://spark.apache.org/downloads.html 링크에 접속한다.
1. Spark의 가장 최신 release를 선택한다.
2. “Pre-built for Hadoop 2.7 and later”를 선택
(구축된 Hadoop cluster를 사용할 계획이라면 구축된 Hadoop의 버전을 선택한다.)
3. Direct Download를 선택한다.
(“select Apache Mirror”를 선택하면 국내 저장소를 통해 빠르게 다운로드 가능하다.)
4. 링크를 클릭하여 다운로드 받는다.
Spark Standalone 설치
2016-12-22 61
Spark Standalone 설치
• Spark를 계정 홈 경로에 설치
– spark-2.0.1-bin-hadoop2.7.tgz 파일을 /home/{user} 에 저장
– cd ~ 명령어로 계정 홈 폴더에 이동한다.
– tar -xvf spark-2.0.1-bin-hadoop2.7.tgz 명령어로 압축을 푼다.
2016-12-22 62
Spark Standalone 설치
• Spark Shell 실행 해보기
– cd ~/spark-2.0.1-bin-hadoop2.7 명령어로 스파크 홈 폴더에 이동
– bin/spark-shell 명령어를 입력하여 스파크가 실행 되는 것을 확인한다. (scala용)
– bin/pyspark 명령어를 입력하여 스파크가 실행 되는 것을 확인한다. (python용)
2016-12-22 63
6. [실습] Spark 예제 실행
2016-12-22 64
Spark Standalone 실습
2016-12-22 65
• Spark 실행 방법
1. scala, python의 interface를 가지는 spark shell을 이용한 interactive 분석
– Apache zeppelin을 통한 interactive한 분석이 가능
– Apache zeppelin의 노트북 기능을 활용한 code 공유도 가능
2. Spark application을 작성하여 런칭
– Python 어플리케이션 개발
– Java, scala 어플리케이션 개발
Spark Standalone 실습
2016-12-22 66
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-22 67
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-22 68
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-22 69
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-22 70
Interactive Analysis with the Spark Shell 문제
• (1) [1,2,3,4,5,6,7,8,9] list에서 홀수인 자연수들의 제곱 합을 구하세요.
• (2) “README.md” 파일의 총 word의 개수를 출력하세요
• (3) “README.md” 파일에서 총 ‘k’가 들어가는 word의 개수를 출력하세요
2016-12-22 71
Submitting Spark Applications
• spark-submit 을 통한 실행
1. 간단한 python application의 경우
– Vim등의 텍스트 에디터를 이용하여 python code를 작성
– cd ~/spark-2.0.1-bin-hadoop2.7 명령어로 스파크 홈 폴더에 이동
– 아래의 명령어를 통해 작성한 test.py spark 어플리케이션을 실행
2016-12-22 72
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
...
Submitting Spark Applications
• spark-submit 을 통한 실행
2. Scala나 java로 application을 작성할 경우
– 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-22 73
추가 자료
• Facebook 그룹
– 스사모 (한국 스파크 사용자 모임) - 인메모리 컴퓨팅
• https://www.facebook.com/groups/sparkkoreauser/
– 제플린과 친구들 - 빅데이터 비행단
• https://www.facebook.com/groups/AapacheZeppelinFanKorea/
– 통계분석연구회(Statistics Analysis Study)
• https://www.facebook.com/groups/statsas
– R Korea - KRSG(Korean R Study Group)
• https://www.facebook.com/groups/krstudy
– 생활코딩
• https://www.facebook.com/groups/codingeverybody/
– 한국데이터사이언스학회(Korean Association of Data Science)
• https://www.facebook.com/groups/datasci/?ref=group_browse_ne
w
2016-12-22 74
QnA
2016-12-22 75
Rigoruroewpreowprwopwro[qwerqw11
eqweqwe

Contenu connexe

Tendances

Rocks db state store in structured streaming
Rocks db state store in structured streamingRocks db state store in structured streaming
Rocks db state store in structured streamingBalaji Mohanam
 
Top 5 Mistakes When Writing Spark Applications
Top 5 Mistakes When Writing Spark ApplicationsTop 5 Mistakes When Writing Spark Applications
Top 5 Mistakes When Writing Spark ApplicationsSpark Summit
 
SQream DB, GPU-accelerated data warehouse
SQream DB, GPU-accelerated data warehouseSQream DB, GPU-accelerated data warehouse
SQream DB, GPU-accelerated data warehouseNAVER Engineering
 
Hudi architecture, fundamentals and capabilities
Hudi architecture, fundamentals and capabilitiesHudi architecture, fundamentals and capabilities
Hudi architecture, fundamentals and capabilitiesNishith Agarwal
 
Spark로 알아보는 빅데이터 처리
Spark로 알아보는 빅데이터 처리Spark로 알아보는 빅데이터 처리
Spark로 알아보는 빅데이터 처리Jeong-gyu Kim
 
Apache Iceberg: An Architectural Look Under the Covers
Apache Iceberg: An Architectural Look Under the CoversApache Iceberg: An Architectural Look Under the Covers
Apache Iceberg: An Architectural Look Under the CoversScyllaDB
 
Optimizing Delta/Parquet Data Lakes for Apache Spark
Optimizing Delta/Parquet Data Lakes for Apache SparkOptimizing Delta/Parquet Data Lakes for Apache Spark
Optimizing Delta/Parquet Data Lakes for Apache SparkDatabricks
 
AWS EMR Cost optimization
AWS EMR Cost optimizationAWS EMR Cost optimization
AWS EMR Cost optimizationSANG WON PARK
 
Advanced Apache Spark Meetup Project Tungsten Nov 12 2015
Advanced Apache Spark Meetup Project Tungsten Nov 12 2015Advanced Apache Spark Meetup Project Tungsten Nov 12 2015
Advanced Apache Spark Meetup Project Tungsten Nov 12 2015Chris Fregly
 
The Rise of ZStandard: Apache Spark/Parquet/ORC/Avro
The Rise of ZStandard: Apache Spark/Parquet/ORC/AvroThe Rise of ZStandard: Apache Spark/Parquet/ORC/Avro
The Rise of ZStandard: Apache Spark/Parquet/ORC/AvroDatabricks
 
Sizing MongoDB Clusters
Sizing MongoDB Clusters Sizing MongoDB Clusters
Sizing MongoDB Clusters MongoDB
 
Spark shuffle introduction
Spark shuffle introductionSpark shuffle introduction
Spark shuffle introductioncolorant
 
Building large scale transactional data lake using apache hudi
Building large scale transactional data lake using apache hudiBuilding large scale transactional data lake using apache hudi
Building large scale transactional data lake using apache hudiBill Liu
 
A Deep Dive into Stateful Stream Processing in Structured Streaming with Tath...
A Deep Dive into Stateful Stream Processing in Structured Streaming with Tath...A Deep Dive into Stateful Stream Processing in Structured Streaming with Tath...
A Deep Dive into Stateful Stream Processing in Structured Streaming with Tath...Databricks
 
A Thorough Comparison of Delta Lake, Iceberg and Hudi
A Thorough Comparison of Delta Lake, Iceberg and HudiA Thorough Comparison of Delta Lake, Iceberg and Hudi
A Thorough Comparison of Delta Lake, Iceberg and HudiDatabricks
 
Amazon S3 Best Practice and Tuning for Hadoop/Spark in the Cloud
Amazon S3 Best Practice and Tuning for Hadoop/Spark in the CloudAmazon S3 Best Practice and Tuning for Hadoop/Spark in the Cloud
Amazon S3 Best Practice and Tuning for Hadoop/Spark in the CloudNoritaka Sekiyama
 
Learn Apache Spark: A Comprehensive Guide
Learn Apache Spark: A Comprehensive GuideLearn Apache Spark: A Comprehensive Guide
Learn Apache Spark: A Comprehensive GuideWhizlabs
 
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안SANG WON PARK
 
Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...
Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...
Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...Simplilearn
 

Tendances (20)

Rocks db state store in structured streaming
Rocks db state store in structured streamingRocks db state store in structured streaming
Rocks db state store in structured streaming
 
Top 5 Mistakes When Writing Spark Applications
Top 5 Mistakes When Writing Spark ApplicationsTop 5 Mistakes When Writing Spark Applications
Top 5 Mistakes When Writing Spark Applications
 
SQream DB, GPU-accelerated data warehouse
SQream DB, GPU-accelerated data warehouseSQream DB, GPU-accelerated data warehouse
SQream DB, GPU-accelerated data warehouse
 
Hudi architecture, fundamentals and capabilities
Hudi architecture, fundamentals and capabilitiesHudi architecture, fundamentals and capabilities
Hudi architecture, fundamentals and capabilities
 
Spark로 알아보는 빅데이터 처리
Spark로 알아보는 빅데이터 처리Spark로 알아보는 빅데이터 처리
Spark로 알아보는 빅데이터 처리
 
Apache Iceberg: An Architectural Look Under the Covers
Apache Iceberg: An Architectural Look Under the CoversApache Iceberg: An Architectural Look Under the Covers
Apache Iceberg: An Architectural Look Under the Covers
 
Optimizing Delta/Parquet Data Lakes for Apache Spark
Optimizing Delta/Parquet Data Lakes for Apache SparkOptimizing Delta/Parquet Data Lakes for Apache Spark
Optimizing Delta/Parquet Data Lakes for Apache Spark
 
AWS EMR Cost optimization
AWS EMR Cost optimizationAWS EMR Cost optimization
AWS EMR Cost optimization
 
Advanced Apache Spark Meetup Project Tungsten Nov 12 2015
Advanced Apache Spark Meetup Project Tungsten Nov 12 2015Advanced Apache Spark Meetup Project Tungsten Nov 12 2015
Advanced Apache Spark Meetup Project Tungsten Nov 12 2015
 
The Rise of ZStandard: Apache Spark/Parquet/ORC/Avro
The Rise of ZStandard: Apache Spark/Parquet/ORC/AvroThe Rise of ZStandard: Apache Spark/Parquet/ORC/Avro
The Rise of ZStandard: Apache Spark/Parquet/ORC/Avro
 
Spark tuning
Spark tuningSpark tuning
Spark tuning
 
Sizing MongoDB Clusters
Sizing MongoDB Clusters Sizing MongoDB Clusters
Sizing MongoDB Clusters
 
Spark shuffle introduction
Spark shuffle introductionSpark shuffle introduction
Spark shuffle introduction
 
Building large scale transactional data lake using apache hudi
Building large scale transactional data lake using apache hudiBuilding large scale transactional data lake using apache hudi
Building large scale transactional data lake using apache hudi
 
A Deep Dive into Stateful Stream Processing in Structured Streaming with Tath...
A Deep Dive into Stateful Stream Processing in Structured Streaming with Tath...A Deep Dive into Stateful Stream Processing in Structured Streaming with Tath...
A Deep Dive into Stateful Stream Processing in Structured Streaming with Tath...
 
A Thorough Comparison of Delta Lake, Iceberg and Hudi
A Thorough Comparison of Delta Lake, Iceberg and HudiA Thorough Comparison of Delta Lake, Iceberg and Hudi
A Thorough Comparison of Delta Lake, Iceberg and Hudi
 
Amazon S3 Best Practice and Tuning for Hadoop/Spark in the Cloud
Amazon S3 Best Practice and Tuning for Hadoop/Spark in the CloudAmazon S3 Best Practice and Tuning for Hadoop/Spark in the Cloud
Amazon S3 Best Practice and Tuning for Hadoop/Spark in the Cloud
 
Learn Apache Spark: A Comprehensive Guide
Learn Apache Spark: A Comprehensive GuideLearn Apache Spark: A Comprehensive Guide
Learn Apache Spark: A Comprehensive Guide
 
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
 
Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...
Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...
Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...
 

En vedette

Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106SangHoon Lee
 
2.apache spark 실습
2.apache spark 실습2.apache spark 실습
2.apache spark 실습동현 강
 
Zeppelin(Spark)으로 데이터 분석하기
Zeppelin(Spark)으로 데이터 분석하기Zeppelin(Spark)으로 데이터 분석하기
Zeppelin(Spark)으로 데이터 분석하기SangWoo Kim
 
스파크와 이클립스_연동하기
스파크와 이클립스_연동하기스파크와 이클립스_연동하기
스파크와 이클립스_연동하기Dohyung Park
 
Data mining with differential privacy
Data mining with differential privacy Data mining with differential privacy
Data mining with differential privacy Wei-Yuan Chang
 
빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지
빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지
빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지위키북스
 
EclairJS = Node.Js + Apache Spark
EclairJS = Node.Js + Apache SparkEclairJS = Node.Js + Apache Spark
EclairJS = Node.Js + Apache SparkJen Aman
 
Spark & Zeppelin을 활용한 머신러닝 실전 적용기
Spark & Zeppelin을 활용한 머신러닝 실전 적용기Spark & Zeppelin을 활용한 머신러닝 실전 적용기
Spark & Zeppelin을 활용한 머신러닝 실전 적용기Taejun Kim
 
Visualize network anomaly detection by using k means clustering algorithm
Visualize network anomaly detection by using k means clustering algorithmVisualize network anomaly detection by using k means clustering algorithm
Visualize network anomaly detection by using k means clustering algorithmIJCNCJournal
 
BigData, Hadoop과 Node.js, R2
BigData, Hadoop과 Node.js, R2BigData, Hadoop과 Node.js, R2
BigData, Hadoop과 Node.js, R2고포릿 default
 
지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기Ted Won
 
Spark 소개 1부
Spark 소개 1부Spark 소개 1부
Spark 소개 1부Jinho Yoo
 
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
 
TensorFrames: Google Tensorflow on Apache Spark
TensorFrames: Google Tensorflow on Apache SparkTensorFrames: Google Tensorflow on Apache Spark
TensorFrames: Google Tensorflow on Apache SparkDatabricks
 
Spark 소개 2부
Spark 소개 2부Spark 소개 2부
Spark 소개 2부Jinho Yoo
 
빅데이터분석실습 농산물중급분야 V0.9
빅데이터분석실습 농산물중급분야 V0.9빅데이터분석실습 농산물중급분야 V0.9
빅데이터분석실습 농산물중급분야 V0.9Han Woo PARK
 
하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다민철 정민철
 

En vedette (20)

Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
Spark overview 이상훈(SK C&C)_스파크 사용자 모임_20141106
 
2.apache spark 실습
2.apache spark 실습2.apache spark 실습
2.apache spark 실습
 
Zeppelin(Spark)으로 데이터 분석하기
Zeppelin(Spark)으로 데이터 분석하기Zeppelin(Spark)으로 데이터 분석하기
Zeppelin(Spark)으로 데이터 분석하기
 
스파크와 이클립스_연동하기
스파크와 이클립스_연동하기스파크와 이클립스_연동하기
스파크와 이클립스_연동하기
 
Data mining with differential privacy
Data mining with differential privacy Data mining with differential privacy
Data mining with differential privacy
 
빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지
빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지
빅데이터 분석을 위한 스파크 2 프로그래밍 : 대용량 데이터 처리부터 머신러닝까지
 
BigData, Hadoop과 Node.js
BigData, Hadoop과 Node.jsBigData, Hadoop과 Node.js
BigData, Hadoop과 Node.js
 
EclairJS = Node.Js + Apache Spark
EclairJS = Node.Js + Apache SparkEclairJS = Node.Js + Apache Spark
EclairJS = Node.Js + Apache Spark
 
Gearman
GearmanGearman
Gearman
 
Spark & Zeppelin을 활용한 머신러닝 실전 적용기
Spark & Zeppelin을 활용한 머신러닝 실전 적용기Spark & Zeppelin을 활용한 머신러닝 실전 적용기
Spark & Zeppelin을 활용한 머신러닝 실전 적용기
 
Visualize network anomaly detection by using k means clustering algorithm
Visualize network anomaly detection by using k means clustering algorithmVisualize network anomaly detection by using k means clustering algorithm
Visualize network anomaly detection by using k means clustering algorithm
 
SPARK SQL
SPARK SQLSPARK SQL
SPARK SQL
 
BigData, Hadoop과 Node.js, R2
BigData, Hadoop과 Node.js, R2BigData, Hadoop과 Node.js, R2
BigData, Hadoop과 Node.js, R2
 
지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기
 
Spark 소개 1부
Spark 소개 1부Spark 소개 1부
Spark 소개 1부
 
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
 
TensorFrames: Google Tensorflow on Apache Spark
TensorFrames: Google Tensorflow on Apache SparkTensorFrames: Google Tensorflow on Apache Spark
TensorFrames: Google Tensorflow on Apache Spark
 
Spark 소개 2부
Spark 소개 2부Spark 소개 2부
Spark 소개 2부
 
빅데이터분석실습 농산물중급분야 V0.9
빅데이터분석실습 농산물중급분야 V0.9빅데이터분석실습 농산물중급분야 V0.9
빅데이터분석실습 농산물중급분야 V0.9
 
하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다
 

Similaire à Apache spark 소개 및 실습

[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제NAVER D2
 
Cloudera session seoul - Spark bootcamp
Cloudera session seoul - Spark bootcampCloudera session seoul - Spark bootcamp
Cloudera session seoul - Spark bootcampSang-bae Lim
 
빅데이터, big data
빅데이터, big data빅데이터, big data
빅데이터, big dataH K Yoon
 
데이터 레이크 알아보기(Learn about Data Lake)
데이터 레이크 알아보기(Learn about Data Lake)데이터 레이크 알아보기(Learn about Data Lake)
데이터 레이크 알아보기(Learn about Data Lake)SeungYong Baek
 
빅데이터 기술 현황과 시장 전망(2014)
빅데이터 기술 현황과 시장 전망(2014)빅데이터 기술 현황과 시장 전망(2014)
빅데이터 기술 현황과 시장 전망(2014)Channy Yun
 
sparklyr을 활용한 R 분산 처리
sparklyr을 활용한 R 분산 처리sparklyr을 활용한 R 분산 처리
sparklyr을 활용한 R 분산 처리Sang-bae Lim
 
Expanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoExpanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoMatthew (정재화)
 
Expanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoExpanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoGruter
 
Daum’s Business Analytics Use-cases based on Bigdata technology (2012)
Daum’s Business Analytics Use-cases based on Bigdata technology (2012)Daum’s Business Analytics Use-cases based on Bigdata technology (2012)
Daum’s Business Analytics Use-cases based on Bigdata technology (2012)Channy Yun
 
Apache Htrace overview (20160520)
Apache Htrace overview (20160520)Apache Htrace overview (20160520)
Apache Htrace overview (20160520)Steve Min
 
DataWorks Summit 2017
DataWorks Summit 2017DataWorks Summit 2017
DataWorks Summit 2017Daesung Park
 
[AI & DevOps] BigData Scale Production AI 서비스를 위한 최상의 플랫폼 아키텍처
[AI & DevOps] BigData Scale Production AI 서비스를 위한 최상의 플랫폼 아키텍처[AI & DevOps] BigData Scale Production AI 서비스를 위한 최상의 플랫폼 아키텍처
[AI & DevOps] BigData Scale Production AI 서비스를 위한 최상의 플랫폼 아키텍처hoondong kim
 
Spark machine learning & deep learning
Spark machine learning & deep learningSpark machine learning & deep learning
Spark machine learning & deep learninghoondong kim
 
2013 빅데이터 및 API 기술 현황과 전망- 윤석찬
2013 빅데이터 및 API 기술 현황과 전망- 윤석찬2013 빅데이터 및 API 기술 현황과 전망- 윤석찬
2013 빅데이터 및 API 기술 현황과 전망- 윤석찬Channy Yun
 
Spark은 왜 이렇게 유명해지고 있을까?
Spark은 왜 이렇게  유명해지고 있을까?Spark은 왜 이렇게  유명해지고 있을까?
Spark은 왜 이렇게 유명해지고 있을까?KSLUG
 
Spark_Overview_qna
Spark_Overview_qnaSpark_Overview_qna
Spark_Overview_qna현철 박
 

Similaire à Apache spark 소개 및 실습 (20)

Apache Spark
Apache SparkApache Spark
Apache Spark
 
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
[D2 COMMUNITY] Spark User Group - 스파크를 통한 딥러닝 이론과 실제
 
Cloudera session seoul - Spark bootcamp
Cloudera session seoul - Spark bootcampCloudera session seoul - Spark bootcamp
Cloudera session seoul - Spark bootcamp
 
빅데이터, big data
빅데이터, big data빅데이터, big data
빅데이터, big data
 
데이터 레이크 알아보기(Learn about Data Lake)
데이터 레이크 알아보기(Learn about Data Lake)데이터 레이크 알아보기(Learn about Data Lake)
데이터 레이크 알아보기(Learn about Data Lake)
 
빅데이터 기술 현황과 시장 전망(2014)
빅데이터 기술 현황과 시장 전망(2014)빅데이터 기술 현황과 시장 전망(2014)
빅데이터 기술 현황과 시장 전망(2014)
 
(Apacje Spark)아파치 스파크 개요, 소개, 스파크란?
(Apacje Spark)아파치 스파크 개요, 소개, 스파크란?(Apacje Spark)아파치 스파크 개요, 소개, 스파크란?
(Apacje Spark)아파치 스파크 개요, 소개, 스파크란?
 
sparklyr을 활용한 R 분산 처리
sparklyr을 활용한 R 분산 처리sparklyr을 활용한 R 분산 처리
sparklyr을 활용한 R 분산 처리
 
Expanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoExpanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with Tajo
 
Expanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoExpanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with Tajo
 
Daum’s Business Analytics Use-cases based on Bigdata technology (2012)
Daum’s Business Analytics Use-cases based on Bigdata technology (2012)Daum’s Business Analytics Use-cases based on Bigdata technology (2012)
Daum’s Business Analytics Use-cases based on Bigdata technology (2012)
 
Apache Htrace overview (20160520)
Apache Htrace overview (20160520)Apache Htrace overview (20160520)
Apache Htrace overview (20160520)
 
Learning spark ch1-2
Learning spark ch1-2Learning spark ch1-2
Learning spark ch1-2
 
DataWorks Summit 2017
DataWorks Summit 2017DataWorks Summit 2017
DataWorks Summit 2017
 
[AI & DevOps] BigData Scale Production AI 서비스를 위한 최상의 플랫폼 아키텍처
[AI & DevOps] BigData Scale Production AI 서비스를 위한 최상의 플랫폼 아키텍처[AI & DevOps] BigData Scale Production AI 서비스를 위한 최상의 플랫폼 아키텍처
[AI & DevOps] BigData Scale Production AI 서비스를 위한 최상의 플랫폼 아키텍처
 
Spark machine learning & deep learning
Spark machine learning & deep learningSpark machine learning & deep learning
Spark machine learning & deep learning
 
2013 빅데이터 및 API 기술 현황과 전망- 윤석찬
2013 빅데이터 및 API 기술 현황과 전망- 윤석찬2013 빅데이터 및 API 기술 현황과 전망- 윤석찬
2013 빅데이터 및 API 기술 현황과 전망- 윤석찬
 
Spark은 왜 이렇게 유명해지고 있을까?
Spark은 왜 이렇게  유명해지고 있을까?Spark은 왜 이렇게  유명해지고 있을까?
Spark은 왜 이렇게 유명해지고 있을까?
 
NoSQL
NoSQLNoSQL
NoSQL
 
Spark_Overview_qna
Spark_Overview_qnaSpark_Overview_qna
Spark_Overview_qna
 

Apache spark 소개 및 실습

  • 2. 목표 • 빅데이터 분석 플랫폼의 출현 배경을 이해한다. • Spark와 Hadoop 과의 차이점을 이해한다. • Spark의 구조에 대해 이해한다. • Spark를 설치하고 사용하는 방법을 익힌다. 2016-12-22 2
  • 3. 목차 1. 빅데이터 2. Apache Hadoop & Hadoop eco-system 3. Resilient Distributed Dataset 4. Spark 개요 5. [실습]Spark 설치 6. [실습]Spark 예제 실행 2016-12-22 3
  • 5. 빅데이터란? – A bunch of data? – An industry? – An expertise? – A trend? – A cliche? 2016-12-22 5
  • 6. 빅데이터란? • 정의 – 빅데이터(big data)란 기존 데이터베이스 관리도구로 데이터를 수 집, 저장, 관리, 분석할 수 있는 역량을 넘어서는 대량의 정형 또는 비정형 데이터 집합 및 이러한 데이터(를 저장하고 이)로부터 가치 를 추출하고 결과를 분석하는 기술을 의미한다. • 특징 – 3V (Volume + Velocity + Variety) Source: https://ko.wikipedia.org/wiki/%EB%B9%85_%EB%8D%B0%EC%9D%B4%ED%84%B0 2016-12-22 6
  • 7. 빅데이터의 활용 – 유저 행동 분석 – 트렌드 토픽 추적 – 유저-토픽 모델링 – 타게팅 광고 – 추천시스템 – AB-테스트 분석 – And more... 2016-12-22 7 사실 제일 중요한 파트
  • 8. computer 빅데이터 이전의 데이터 처리 • Word Counting Example – 1 computer – Input file 준비(1KB ~ 10GB) – 프로그램 코딩 & 실행( C++, Java, python, …) – Output 보기 wordCount Program (java, c++, python, … ) Input file Output file Input File A Apple is red. A Banana is yellow. A Cat is cute. … Output File A 3 Apple 1 is 3 … 처리해야 할 데이터의 양이 많아져도 속도와 정확성이 보장 될까? 2016-12-22 8
  • 11. How big is big? – 2008: Google processes 20 PB a day – 2009: Facebook has 2.5 PB user data + 15 TB/day – 2009: eBay has 6.5 PB user data + 50 TB/day – 2011: Yahoo! has 180-200 PB of data – 2012: Facebook ingests 500 TB/day 2016-12-22 11
  • 12. Scale out의 필요성 • Scale up의 한계 – 데이터 크기의 문제 • Terabytes, Petabytes 데이터의 저장 및 관리 – 데이터 처리의 문제 • multiprocessing의 한계 – 비용의 문제 이미지 출처 : http://blog.naver.com/islove8587/220548900044 2016-12-22 12
  • 13. 2. Apache Hadoop & Hadoop eco-system 2016-12-22 13
  • 14. Apache Hadoop • 2005년, Doug Cutting과 Mike Cafarella in Yahoo! • “the Nutch search engine”의 서브프로젝트로 시작 – HDFS - 2003 – Google File System – MapReduce - 2004 – MapReduce : Simplified Data Processing on Large Clusters Source: https://en.wikipedia.org/wiki/Apache_Hadoop 2016-12-22 14
  • 15. Apache Hadoop • Apache software foundation의 최상위 프로젝트 • open-source software for reliable, scalable, distributed computing. • 2016. 8. 25 stable release 2.7.3 • 2016. 9. 03 alpha1 release 3.0.0 • 2013년, Hadoop 2 발표 – HDFS module의 비약적인 향상 – YARN 의 등장 • 2016년 9월, Hadoop 3 발표 – HDFS 저장 효율 증가 – Multiple Stanby Namenode, heap 튜닝 기능 – MapReduce 성능 향상 http://hadoop.apache.org/ 2016-12-22 15
  • 16. Hadoop 모듈 • Hadoop Common – Hadoop 실행 시 다른 모듈들을 지원하기 위한 공통 유틸들 • Hadoop Distributed File System (HDFS™) – high-throughput을 보장하는 분산 파일 시스템 • Hadoop MapReduce – 대용량의 병렬 데이터를 배치 연산할 수 있게 해주는 모듈 • Hadoop YARN – 클러스터의 자원관리 및 스케쥴링을 담당하는 프레임워크 – 2013 - Apache Hadoop YARN: Yet Another Resource Negotiator 2016-12-22 16 http://hortonworks.com/hadoop/yarn/
  • 18. Hadoop Eco-system Hadoop eco-system (cluster를 위한 OS?? ㅎㅎ??) http://blrunner.com/99 18
  • 19. 빅데이터 분석 시스템 구축 lambda-architecture http://lambda-architecture.net 2016-12-22 19
  • 20. 빅데이터 분석 시스템 구축 – spark 이전 • 분석할 데이터의 특성에 따라 사용 가능한 플랫폼이 다름 – 배치처리 분석을 위해서는 hadoop 사용 – 스트림 데이터 분석에서는 storm 사용 • 결과분석 등의 추가 작업을 위해서는 Third party package들과의 연동이 필요함 – Hbase 등의 NoSQL DB와의 연동을 통해 데이터를 관리 – Hive, mahout 등의 추가 package를 통해서 SQL분석, ML 이 가능 2016-12-22 20 익숙해져야 할 인터페이스가 너무 많고 복잡하네...
  • 21. Hadoop의 데이터 처리 • Word Counting Example – Computer cluster – Input File – Hadoop MR application • Map/Reduce function – Output File(hdfs) Computing Node read Write Write read Map function Reduce function 2016-12-22 21
  • 22. Hadoop의 데이터 처리 • DISK 기반 데이터 처리의 문제점 – 데이터 처리 시간 외에도 read/write 연산에 추가 시간 소요 – 반복 쿼리 작업 수행 시 중간 결과물도 DISK에 read/write 반복 • Iteration 작업에 적합하지 않음 – 동일 Data에 대해서 작업할 때, 매번 Read 연산이 필요 DISK 기반 데이터 처리 2016-12-22 22 Hadoop의 disk 기반 데이터 처리는 효율이 떨어지네..
  • 23. 3. Resilient Distributed Dataset 2016-12-22 23
  • 24. 인메모리 기반의 데이터 프로세싱 • Spark 이전에는 RAM 기반으로 분산처리 해보려는 시도가 없었을까? • Piccolo(Ram 기반)의 데이터 프로세싱 – Fine-grained update 지원 • (ex> DBMS에서 table의 특정 element만 update 하는 것과 유사) – Fault-tolerance가 성능을 저하 • RAM 상의 데이터 셋이 망가짐을 대비해 replicating • replicating만으로는 불안하므로 disk에 checkpointing • replicating 하는 동안 연산을 멈춰야하며, checkpointing 시에는 더욱 시간이 오래 걸림 • 뭔가 부족한 느낌.. • Hadoop(Disk 기반)의 데이터 프로세싱 – Fine-grained update 지원하지 않음 • file to file로의 변경만 지원하며 변경된 파일을 새로 씀 • Modify가 불가능한 파일 시스템 • (ex> DBMS 변환이 필요할 경우 update는 사용할 수 없고, “create table as (select ~~~)” query를 통해 새로운 table을 만드는 것과 유사) • 둘을 섞어볼까? 2016-12-22 24 http://www.slideshare.net/yongho/rdd-paper-review
  • 25. 인메모리 기반 데이터 프로세싱 프레임워크 Apahce Hadoop Piccolo 데이터 저장 공간 HDD/SDD RAM 프로세싱 속도 느림 빠름 Fine grained update 미지원 지원 Fault-tolerance -상대적으로 쉬움 -성능에 영향 X -상대적으로 복잡 -성능 저하의 원인 분산처리 지원 지원 2016-12-22 25 Apahce Spark RAM 빠름 미지원 -상대적으로 쉬움 -성능에 영향 X 미지원 지원 Reliable Scalable Fast
  • 26. 인메모리 기반 데이터 프로세싱 • 단계-단계 사이에 read/write 작업이 사라짐 => 반복 작업의 효율이 증가함 2016-12-22 26
  • 27. 인메모리 기반 데이터 프로세싱 • 매 쿼리때마다 input을 처음부터 read해왔던 문제가 사라짐 =>동일 데이터 셋에 대한 데이터 변환/질의 처리 효율이 증가함 2016-12-22 27
  • 28. Resilient Distributed Datasets • Resilient Distributed Datasets – Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing – 인메모리 기반 데이터 처리 – Spark 에서는 내부적으로 연산하는 데이터들을 모두 RDD 타입으로 처리 – Spark application 개발은 아래의 3가지에 대한 이해를 바탕으로 시작 • RDD • RDD 변환 API (Scala / Python/ java / R interface) • RDD 변환 API 로 만들어진 SQL/ML/graph/stream Library (Scala / Python/ java / R interface) – Immutable, partitioned collections of record – 변하지 않는, 분산된 레코드들의 집합 • Immutable : 만들어진 뒤엔 변하지 않아 • Partitioned : 데이터 셋을 잘게 잘라서 분산 2016-12-22 28 분산처리는 어떻게?? scalability, reliability 어떻게 보장해? => 어떻게 만들었는지 알면 또 만들 수 있겠네? => 가장 효율적으로 클러스터 노드에 분산시켜 보자 disk 기반 데이터 처리의 성능 문제 간단한 인터페이스 지원
  • 29. Spark application 예제 2016-12-22 29 Hadoop MapReduce 기반 Word Count 예제 Spark 기반 Word Count 예제 코드와 실례로 보기 lambda expression 에 대해 알아야 함 (java기준 설명) 함수형 프로그래밍에도 관심있다면 글1, 글2 도 보면 좋을 듯
  • 30. Spark application 예제 • scala spark 예제 : word counting scala> textFile = sc.textFile("README.md") scala> words = textFile.flatMap(line => line.split(" ")) //(transformation) scala> mapWords = words.map(word => (word, 1)). //(transformation) scala> redWords = mapWords.reduceByKey((a, b) => a + b) //(transformation) scala> collection = redWords.Collect() //(action) 2016-12-22 30 [(#, 4), (Apache, 24), (Spark,16), ( ,68), (help, 1), (storage, 1), (Hadoop,3), …] File : README.md [RDD<String> : textFile RDD<String> : words RDD<(String,int)> : words # Apache Spark Spark is a fast and general… high-level APIs in Scala, Java… supports general computation… rich set of higher-level tools,… MLlib for machine learning, … and Spark Streaming for…. … RDD<(String,int)> : words # Apache Spark Spark is a fast and … (#,1) (Apache ,1) (Spark ,1) (,1) (Spark ,1) (is ,1) (a ,1) (fast ,1) (and ,1) … (#, 4) (Apache, 24) (Spark,16) ( ,68) (help, 1) (storage, 1) (Hadoop,3) … flatMap map reduce ByKey collect array[(String,int)] : collection Data Src output
  • 31. Spark application 예제 • scala spark 예제 : line counting scala> textFile = sc.textFile("README.md") scala> SparkLine = textFile.filter(line => line.contains("Spark")) //(transformation) scala> lineCnt = SparkLine.count() //(action) 2016-12-22 31 File : README.md RDD<String> : SparkLine int : lineCnt 19# Apache Spark Spark is a fast and general… high-level APIs in Scala, Java… supports general computation… rich set of higher-level tools,… MLlib for machine learning, … and Spark Streaming for…. <http://spark.apache.org/> … RDD<String>: TextFile # Apache Spark Spark is a fast and general… and Spark Streaming for…. <http://spark.apache.org/> … Filter Count Data Src output
  • 32. • RDD를 제어하는 API operation은 크게 2개의 타입 – Transformation : RDD에서 새로운 RDD를 생성하는 함수 – Action : RDD에서 RDD가 아닌 타입의 data로 변환하는 하는 함수들 • operation의 순서를 기록해 DAG로 표현한 것을 Lineage라 부름 RDD operation RDD Operation 2016-12-22 32
  • 33. • Narrow Dependencies – 변환 후의 파티션이 하나의 파티션으로 매핑되는 경우 – 해당 작업이 다 한 노드에서 처리 가능 – 네트워크를 타지 않음 (메모리의 속도로 동작) – 파시션이 부셔져도 노드에서 다 복원 가능 • Wide Dependencies – 변환 후의 파티션이 여러 파티션으로 매핑 되는 경우 – 부셔지면 재계산 비용이 비싸다 – 셔플이 일어나야 하는 작업들 – 일반적으로 네트워크를 타는 경우가 많음 RDD Operation 2016-12-22 33 Dependency type Partition • 하나의 RDD는 여러 개의 파티션으로 나뉘어짐 • 성능에 유효한 영향을 줌 • 파티션의 개수, 파티셔너는 선택 가능 • 기본파티셔너 (Hash,range) 외에도 사용자가 정의한 파티셔너를 사용가능
  • 34. Lineage 1. fault-tolerant 확보 – 계보(lineage)만 기록해두면 동일한 RDD를 생성할 수 있음 – RDD의 copy를 보관하기 보다, Lineage만 보관해도 복구가 가능 – 일부 계산 코스트가 큰 RDD는 디스크에 Check pointing 2. Lazy-execution이 가능해짐 – 인터프리터에서 Transformation 명령어를 읽어 들일 때는 단순히 lineage만 생성 – Action 명령어가 읽히면, 쌓여있던 lineage를 실행 Lineage의 예시 2016-12-22 34 reliablity 확보
  • 35. Lineage 3. Job scheduling에 활용 가능 – Lineage가 어느 정도 그려진 상태에서는 현재 자원(source data)이 배치된 상황과 앞으 로 배치될 상황 및 dependency 등을 미리 계산해서 작업 분산이 가능해진다. 2016-12-22 35 scalability 확보
  • 37. Apache Spark란? • 인메모리 기반의 대용량 데이터 고속 처리 엔진 • 범용의 분산 클러스터 컴퓨팅 프레임워크 • JAVA, Python, scala,R을 기반으로 구동 • 2009년 UC Berkely AMPLab에서 시작된 오픈소스 프로젝트 • 2013년 아파치 프로젝트 선정 • 2014년 아파치 최상위 프로젝트 선정 • 2016년 Stable release 2.0.1 http://spark.apache.org/ 2016-12-22 37
  • 38. 특장점 • 인메모리 데이터 처리 – 하둡의 맵리듀스 작업처리 속보보다 100배 빠른 성능 구현 • 단일 시스템 내에서 데이터 batch/Stream 처리, SQL 및 Machine Learning, Graph processing을 지원 • JAVA, scala, python, R 인터페이스 제공 • Standalone은 물론 YARN, mesos 등의 클러스터 리소스 관리 패키지를 통해 다양한 환경에서 구동가능 • 8000개 이상의 노드 추가 가능한 scalability 확보 • HDFS, cassandra, Hbase, S3 등 다양한 데이터의 활용 가능 2016-12-22 38
  • 39. Spark 아키텍쳐 • 분산 클러스터 컴퓨팅 환경 구축을 위해 3가지 환경을 지원 – 자체적인 standalone scheduler 환경 구축 (싱글 노드) – YARN, Mesos와 같은 클러스터 관리 패키지 연동을 통한 클러스터 리소스 관리 및 환경 구축 • Spark Core – 메인 컴포넌트로 배치 단위의 RDD에 연산을 가해 데이터를 처리하는 작업을 수행 • 공식지원 추가 라이브러리 – Spark Core를 기반으로 SQL 분석, 스트리밍 처리, Machine Learning, Graph Processing을 모두 지원 2016-12-22 39
  • 40. 3. Apache Spark - MLlib 2016-12-22 40
  • 41. 컴포넌트 - Spark MLlib • 스파크 기반의 scalable 머신러닝 라이브러리 • Java, Scala, Python, R 모든 인터페이스에서 사용 가능 • 일반적인 MR 프로세싱 보다 100배 가량 빠른 성능 • Spark의 ML Pipeline 개념은 Python module scikit-learn 기반 • 일반적인 ML 알고리즘과 utilities들을 포함하고 있음 – linear SVM and logistic regression – classification and regression tree – random forest and gradient-boosted trees – clustering via k-means, Gaussian mixtures, and power iteration clustering – topic modeling via latent Dirichlet allocation – linear regression with L1- and L2-regularization – multinomial naive Bayes – frequent itemset mining via FP-growth – basic statistics – feature transformations – … 2016-12-22 41
  • 42. 3. Apache Spark - graphX 2016-12-22 42
  • 43. 컴포넌트- Spark GraphX • GraphX는 스파크 상에서 분산형 그래프 프로세싱이 가능하게 해주 는 프레임워크 • Vertex RDD/Edge RDD라는 명칭으로 확장된 형태의 RDD type을 다룸 • Pregel을 기반으로한 그래프 처리 API를 제공 – Pregel은 구글에서 개발한 그래프 처리 아키텍쳐 – subgraph, joinVertices, and aggregateMessages 등의 연산 지원 • 간단한 그래프 분석을 위한 그래프 알고리즘과 그래프 빌더가 포함 2016-12-22 43
  • 44. 3. Apache Spark - Spark Streaming 2016-12-22 44
  • 45. 컴포넌트 - Spark Streaming • Spark Core의 확장 – 스파크에서 Scalable, High- throughput, Fault-tolerant한 스트림 처리가 가능하게 해줌 • 스트림을 데이터를 Mini-batch 사 이즈로 쪼개어 RDD처럼 처리 – Discretized Stream(DStream)이라는 개념으로 데이터 추상화 • 스트림 데이터에 실시간으로 map, reduce, join, window와 같 은 함수 적용 가능 • 다양한 방식의 Data I/O를 지원 – Kafka, Flume, Twitter 등 다양한 소스 의 데이터를 받아들일 수 있음. – 처리된 데이터는 실시간으로 HDFS, DB, 대시보드 등으로 보내질 수 있음. Spark Streaming 활용도 Spark Streaming과 Spark core의 관계 Mini-batch 개념도 2016-12-22 45
  • 46. 3. Apache Spark - Spark SQL 2016-12-22 46
  • 47. 컴포넌트 - Spark SQL • 스파크 프로젝트 내에서 SQL이나 HiveQL과 같은 쿼리 작업이 가능하게 해주는 라이브러리 • Java, Python, Scala, R 모든 인터페이스에서 사용 가능 • DataFrame & DataSet이라는 새로운 RDD-like 타입을 다룸 – DataFrame & DataSet 은 테이블과 비슷한 형태로 Row objects들의 집합 • DataFrame & DataSet 은 다양한 Input source를 지원 – 존재하던 RDD – JSON 데이터 셋 – HiveQL 쿼리를 실행한 결과 – ODBC/JCBC 서버와의 연동 2016-12-22 47
  • 48. Tungsten execution engine • 스파크의 bottleneck은? • I/O나 network bandwidth가 아님 – High bandwidth SSD & striped HDD의 등장 – 10Gbps network의 등장 • CPU 와 memory에서 bottleneck 현상이 발생 – 기본적인 processing workload와 함께 – Disk I/O를 최소화하기 위한 input data pruning workload – Shuffle을 위한 serialization과 hashing이 특히 key bottleneck • CPU와 memory의 효율을 높여야… – 하드웨어의 한계에 가깝게 성능을 뽑아올 수 있는 System Engine이 필요! • Project Tungsten – Spark 1.4부터 DataFrame에 적용 – spark 1.6에서 Dataset으로 확장 참고: 1. Project Tungsten – databrick 2. https://issues.apache.org/jira/browse/SPARK-7075
  • 49. Tungsten execution engine • Memory Management and Binary Processing – JVM object 모델과 garbage collection의 overhead가 큼 =>장기적으로 data를 저장할 경우 Java objects 보다는 binary format으로 저장 – 메모리를 좀더 명확하게 관리할 필요가 있음 => denser in-memory data format을 적용하여 메모리 사용률을 최소화 함 더 나은 memory accounting (size of bytes) 기술 적용(기존엔 Heuristics 기반) – 이를 기반으로 하면서 domain semantics을 최대한 반영한 data processing을 지원해야 함 =>binary format의 in memory data에 대해서도 data type을 이해하는 operator를 지원 (serialization/deserialization 없이 data processing) • Cache-aware Computation – sorting and hashing for aggregations, joins, and shuffle의 성능이 향상이 필요 =>memory hierarchy를 활용하는 algorithm과 data structure • Code Generation – expression evaluation, DataFrame/SQL operators, serializer의 성능 향상이 필 요 =>modern compilers and CPUs의 성능을 제대로 활용할 수 있는 code generation
  • 50. Catalyst optimizer – Catalyst의 구동 (In Spark SQL) ( 자세한 사항은 paper 참고) – Tree 구조를 기반으로 optimization – 크게 4단계로 진행 – extensible design • 새로운 optimization techniques과 feature들의 추가가 용이 • 외부 개발자가 optimizer를 확장하여 사용하기 용이 Catalyst의 Optimization Phase 그림 출처: Catalyst Optimizer - databrick Tree로 표현된 Query plan 그림 출처: Deep Dive Into Catalyst
  • 51. 컴포넌트 - Spark SQL / RDD와 DataFrame 2016-12-22 51 • RDD 연산 – Case1 (pseudo-code) ≫ Rdd .filter(line -> isString(line.split(‘,’).get(0))) .map(line =>( line.split(‘,’).get(0) + line.split(‘,’).get(1) + (line.split(‘,’).get(2)+10)) Profile.csv id,name,age 1201,stish,25 1202,kishna,28 1203,amith,39 1204,javed,23 1205,prudvi,23 DataFrame df +----+------+--------+ | age | id | name | +----+------+--------+ | 25 | 1201 | satish | | 28 | 1202 | krishna| | 39 | 1203 | amith | | 23 | 1204 | javed | | 23 | 1205 | prudvi | +----+------+--------+ • DataFrame 연산 – case1 (pseudo-code) ≫ df.select($“id", $"name", $"age" + 10) – case2 (pseudo-code) ≫ df.createOrReplaceTempView(“profile") ≫ spark.sql("SELECT id, name, age+10 FROM profile”) • Input file RDD<string> rdd id,name,age 1201,stish,25 1202,kishna,28 1203,amith,39 1204,javed,23 1205,prudvi,23
  • 52. 컴포넌트 - Spark SQL / RDD와 DataFrame DataFrames / SQL Structured Binary Data (Tungsten) • High level relational operation 사용 가능 • Catalyst optimization 적용 가능 • Lower memory pressure • Memory accounting (avoid OOMs) • Faster sorting / hashing / serialization RDDs Collections of Native JVM Objects • 로직 상에 특정 data type 표현이 용이 • Compile-time type-safety 보장 • 함수형 프로그래밍 가능 • 두 타입 간의 변환은 지원 되지만.. – 높은 변환 cost – 변환을 위한 boilerplate(표준 문안, 규칙) 숙지 필요 • 둘의 장점을 합쳐놓은 API를 제공할 수 있을까? – Catalyst optimizer & Tungsten execution engine의 장점을 활용할 수 있어야 함 – Domain object의 type을 이해할 수 있고 이를 활용할 수 있어야 함 성능 ↑안전성 & 유연성 ↑ 2016-12-22 52
  • 53. 컴포넌트 - Spark SQL / Dataset – RDD와 DataFrame의 장점만 취해 만든 interface API – http://spark.apache.org/docs/latest/api/java/org/apache/spark/sql/Dataset.html  특장점  Fast  Typesafe  Support for a variety of object models  Java Compatible  Interoperates with DataFrames Dataset Structured Binary Data (Tungsten) • High level relational operation 사용 가능 • Catalyst optimization 적용 가능 • Lower memory pressure • Memory accounting (avoid OOMs) • Faster sorting / hashing / serialization • 로직 상에 특정 data type 표현이 용이 • Compile-time type-safety 보장 • 함수형 프로그래밍 가능 그림 출처: technicaltidbit.blogspot.kr/ 2016-12-22 53
  • 54. 컴포넌트 - Spark SQL / Dataset • structured/semi-structured Data 분석 => Dataset으로 구분 RDD DataFrame Dataset 성능 비교적 느림 빠름 빠름 메모리 관리 누수 존재 최적화 최적화 Type-safety 보장 보장되지 않음 보장 분석 확장성 유연함 제한적 유연함 RDD-Dataset의 WordCount 예제의 실행 시간 비교 RDD-Dataset의 캐싱 시 memory 사용량 비교 그림 출처: Introducing Spark Datasets- databrick 2016-12-22 54
  • 55. 컴포넌트 - Spark SQL / DataSet 2016-12-22 55 • DataSet 연산 – case1 (pseudo-code) ≫ ds.map(p ->p.setAge(p.getAge+10)) – case2 (pseudo-code) ≫ ds.createOrReplaceTempView(“profile") ≫ spark.sql("SELECT id, name, age+10 FROM profile”) Profile.csv id,name,age 1201,stish,25 1202,kishna,28 1203,amith,39 1204,javed,23 1205,prudvi,23 • Input file DataSet<Profile> ds +----+------+--------+ | age | id | name | +----+------+--------+ | 25 | 1201 | satish | | 28 | 1202 | krishna| | 39 | 1203 | amith | | 23 | 1204 | javed | | 23 | 1205 | prudvi | +----+------+--------+
  • 56. Apache Spark2.0 • API usability – Dataset, DataFrame • SQL 2003 support • performance improvements • structured streaming • R UDF 지원 http://spark.apache.org/ 2016-12-22 56
  • 57. 5. [실습] Spark standalone 설치 2016-12-22 57
  • 58. 실습 환경 정보 본 문서의 실습 환경 정보 • OS : Centos 7.0 • Java version : JDK 8 • Spark version : Spark 2.0.1 release • 예제 언어 : scala, python 2016-12-22 58
  • 59. 사전 환경 설정(생략) • JDK 설치(1.8 이상일 경우 스킵) – Java SE development kit 의 약자 자바 프로그램을 개발하기 위해 필요한 라이브러리 들의 모음 – Java Runtime Environment(자바 프로그램을 실행하기 위한 모듈들) 를 포함하고 있음 – 본 링크 에서 OS 별 최신버전의 jdk를 다운로드 후 아래와 같이 설치 2016-12-22 59 $ cd /usr $ mkdir java $ cd /usr/java // “/usr/java/” 경로에 준비된 jdk1.X.X_XX.tar 옮기기 $ mv {JDK 다운로드 경로}/ jdk-{version}-linux-x64.tar.gz /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
  • 60. 사전 환경 설정(생략) • JAVA_HOME 변수 설정 - 공용 변수 저장 파일의 가장 하단부에 환경변수 추가 후 저장 - 설치한 버전의 java가 확인되면 완료 2016-12-22 60 $ 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)
  • 61. • http://spark.apache.org/downloads.html 링크에 접속한다. 1. Spark의 가장 최신 release를 선택한다. 2. “Pre-built for Hadoop 2.7 and later”를 선택 (구축된 Hadoop cluster를 사용할 계획이라면 구축된 Hadoop의 버전을 선택한다.) 3. Direct Download를 선택한다. (“select Apache Mirror”를 선택하면 국내 저장소를 통해 빠르게 다운로드 가능하다.) 4. 링크를 클릭하여 다운로드 받는다. Spark Standalone 설치 2016-12-22 61
  • 62. Spark Standalone 설치 • Spark를 계정 홈 경로에 설치 – spark-2.0.1-bin-hadoop2.7.tgz 파일을 /home/{user} 에 저장 – cd ~ 명령어로 계정 홈 폴더에 이동한다. – tar -xvf spark-2.0.1-bin-hadoop2.7.tgz 명령어로 압축을 푼다. 2016-12-22 62
  • 63. Spark Standalone 설치 • Spark Shell 실행 해보기 – cd ~/spark-2.0.1-bin-hadoop2.7 명령어로 스파크 홈 폴더에 이동 – bin/spark-shell 명령어를 입력하여 스파크가 실행 되는 것을 확인한다. (scala용) – bin/pyspark 명령어를 입력하여 스파크가 실행 되는 것을 확인한다. (python용) 2016-12-22 63
  • 64. 6. [실습] Spark 예제 실행 2016-12-22 64
  • 65. Spark Standalone 실습 2016-12-22 65 • Spark 실행 방법 1. scala, python의 interface를 가지는 spark shell을 이용한 interactive 분석 – Apache zeppelin을 통한 interactive한 분석이 가능 – Apache zeppelin의 노트북 기능을 활용한 code 공유도 가능 2. Spark application을 작성하여 런칭 – Python 어플리케이션 개발 – Java, scala 어플리케이션 개발
  • 66. Spark Standalone 실습 2016-12-22 66 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/
  • 67. 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-22 67
  • 68. 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-22 68
  • 69. 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-22 69
  • 70. 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-22 70
  • 71. Interactive Analysis with the Spark Shell 문제 • (1) [1,2,3,4,5,6,7,8,9] list에서 홀수인 자연수들의 제곱 합을 구하세요. • (2) “README.md” 파일의 총 word의 개수를 출력하세요 • (3) “README.md” 파일에서 총 ‘k’가 들어가는 word의 개수를 출력하세요 2016-12-22 71
  • 72. Submitting Spark Applications • spark-submit 을 통한 실행 1. 간단한 python application의 경우 – Vim등의 텍스트 에디터를 이용하여 python code를 작성 – cd ~/spark-2.0.1-bin-hadoop2.7 명령어로 스파크 홈 폴더에 이동 – 아래의 명령어를 통해 작성한 test.py spark 어플리케이션을 실행 2016-12-22 72 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 ...
  • 73. Submitting Spark Applications • spark-submit 을 통한 실행 2. Scala나 java로 application을 작성할 경우 – 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-22 73
  • 74. 추가 자료 • Facebook 그룹 – 스사모 (한국 스파크 사용자 모임) - 인메모리 컴퓨팅 • https://www.facebook.com/groups/sparkkoreauser/ – 제플린과 친구들 - 빅데이터 비행단 • https://www.facebook.com/groups/AapacheZeppelinFanKorea/ – 통계분석연구회(Statistics Analysis Study) • https://www.facebook.com/groups/statsas – R Korea - KRSG(Korean R Study Group) • https://www.facebook.com/groups/krstudy – 생활코딩 • https://www.facebook.com/groups/codingeverybody/ – 한국데이터사이언스학회(Korean Association of Data Science) • https://www.facebook.com/groups/datasci/?ref=group_browse_ne w 2016-12-22 74