왜 spark 와 infinispan 왜 같이 쓰지

43
Spark + Infinspan (몰라도 한달이면 만큼은 있었다.) 정운기 / 개발자 쿠팡 2015 SEMINAR

Upload: ungi-jungungi

Post on 13-Jan-2017

979 views

Category:

Software


3 download

TRANSCRIPT

Page 1: 왜 Spark 와 infinispan 왜 같이 쓰지

Spark + Infinspan(몰라도 한달이면 이 만큼은 할 수 있었다.)

정운기 / 개발자쿠팡

2015 SEMINAR

Page 2: 왜 Spark 와 infinispan 왜 같이 쓰지
Page 3: 왜 Spark 와 infinispan 왜 같이 쓰지

시작 전 유의사항

발표자 상태초보가 정신줄을 놓치기 일보 직전

그래서질문 금지답답해도 참기

욕은 안 들리는 곳에서 하기

Page 4: 왜 Spark 와 infinispan 왜 같이 쓰지

몰라도 한달이면 이 만큼은 할 수 있었다.

정정합니다.

할 수 있을 줄 알았습니다.

Page 5: 왜 Spark 와 infinispan 왜 같이 쓰지

난 누구

남자 세상 JBUG그냥 멤버

마라톤 풀코스 5회 완주한 사람

닥치는 대로 다하는 쿠팡의 그냥 개발쟁이(현재 개인화 추천팀에서 근무중 ^^)

Page 6: 왜 Spark 와 infinispan 왜 같이 쓰지

이런 순서로 합니다.

• Infinispan (이런 녀석도 있었다.)

• Spark + Infinispan(왕 짱 좋은 스파크인데 뭐가 아쉬워서)

• 조금만 더 Infinispan(이런 녀석은 정말)

• 데모

Page 7: 왜 Spark 와 infinispan 왜 같이 쓰지

오픈소스 분산

인 메모리 기반 데이터 그리드 레드햇 2009

극도의 확장성고가용성

http://infinispan.org/about/

(infinispan.org)

Page 8: 왜 Spark 와 infinispan 왜 같이 쓰지

꽁짜

요즘은 기본이지 (빅데이터 시대에는 기본이지)

디스크 보다 빠르겠지좋은 거대기업노땅

(내가 안건 얼마 안되었는데 ....)

고무줄(마음대로 늘렸다 줄였다)

좀비(웬만해서 잘 안 죽는 구만)

http://infinispan.org/about/

이런 녀석

Page 9: 왜 Spark 와 infinispan 왜 같이 쓰지

요즘은

메모리가 싼 세상

Page 10: 왜 Spark 와 infinispan 왜 같이 쓰지

요즘은

속도가 돈보다 중요(왜냐하면 속도가 돈이니깐)

Page 11: 왜 Spark 와 infinispan 왜 같이 쓰지

그러니깐

Infinispan도 쓸만할 수 있는 세상

Page 12: 왜 Spark 와 infinispan 왜 같이 쓰지

거기다가

요즘 완전 짱 대세인 Spark

이 친구랑도 친하게 지내려고 노력함(Hadoop하고도)

Page 13: 왜 Spark 와 infinispan 왜 같이 쓰지

대세 스파크

Page 14: 왜 Spark 와 infinispan 왜 같이 쓰지

대세인 Spark가 뭐가 아쉬워서

Infinispan 을 쓰지?

Page 15: 왜 Spark 와 infinispan 왜 같이 쓰지

아쉽기보다는 같이 쓰면 좋을때가

있다

Page 16: 왜 Spark 와 infinispan 왜 같이 쓰지

아쉬움1

Spark Job 간의 데이터 공유에서 생기는 병목

1. Spark Job1에서 처리를 해서 어떤 결과를 만들어냄(근데 이걸 공유하고 싶어함)

2. 그래서 어딘가로 보냄3. 어딘가에 있는 걸 Spark

Job2에서 읽음

Job1

Result

Job2

Result

Result

Page 17: 왜 Spark 와 infinispan 왜 같이 쓰지

생각

빠르게 공유하고 싶다.- 빠른건 메모리

- 메모리 속도로 하면 좋겠구만

Page 18: 왜 Spark 와 infinispan 왜 같이 쓰지

아쉬움 해결1

메모리 속도로 데이터를 공유

1. spark Job 1번에 빠른 속도로 분석해냄

2. 그리고 열라 빠른 Infinispan에 내림

3. Infinispane에 있는 걸 Spark Job 2번에 열라빨리 읽어서 분석을 시작함

Job1

Result

Job2

Result

Result

Page 19: 왜 Spark 와 infinispan 왜 같이 쓰지

아쉬움2

메모리는 휘발성이라 계산하다 깨지면 모두 날라간다

data

data

CrashCrash

Page 20: 왜 Spark 와 infinispan 왜 같이 쓰지

생각

Spark 밖에 저장하면- 근데 빠르면 더 좋지

Page 21: 왜 Spark 와 infinispan 왜 같이 쓰지

아쉬움2 해결

메모리 속도로 Infinispan 넣어두면 안전

Crash

data

data

Page 22: 왜 Spark 와 infinispan 왜 같이 쓰지

spark-infinispan 정리

Key-Value RDD를

바로 Infinispan 에 넣을 수 있고

Infinispan 에 있는걸

RDD / DStream로 꺼내서 쓸 수 있다.

Page 23: 왜 Spark 와 infinispan 왜 같이 쓰지

Infinispan

초보 개발자 버전으로

요만큼만 더 보기

Page 24: 왜 Spark 와 infinispan 왜 같이 쓰지

(wikipedia )

https://en.wikipedia.org/wiki/Infinispan

2009년부터 만들고 있어요!

8.1.0.Final (2015/12/07) 버전까지

아파치 라이센스 2.0 (상용버전 JDG)

플랫폼에 의존적이지 않아요!

JVM만 있으면 됩니다.!

타입은 Data Grid

자바로 개발되었어요! (scala 소스도 있음)

개발자는 Red Hat 입니다.

Page 25: 왜 Spark 와 infinispan 왜 같이 쓰지

(infinispan.org)

언제 사용하는 거야?

● 캐쉬가 필요할 때

● 고성능의 NoSQL 데이터 저장소가 필요할 때

● 클러스터링 잘되고 고 가용성의 데이터 그리드가 필요할 때

http://infinispan.org/about/

Page 26: 왜 Spark 와 infinispan 왜 같이 쓰지

Infinispan

● Disk보다는 빠른 속도를 원할 때

● Realtime 처리와 같이 빠른 처리 속도가 필요할 때

● 반복해서 사용하는 데이터를 공유해서 사용하고 싶을 때

● Object를 저장하고 싶을 때

● Primitive Type을 저장하고 싶을 때

● Spark RDD 저장하거나 빼내고 싶을 때

단, key-value로 저장할 수 있는 것들을 ...

Page 27: 왜 Spark 와 infinispan 왜 같이 쓰지

Architecture

라이브러디 모드- 그냥 Jar 파일 하나 포함시켜서 쉽게 사용하면 된다.

- 그냥 Map인데더 많이 들어오면 옛날 넘들 지워지고시간지나면 알아서 지워주고동시에 두개가 같이 들어가는 것도 해결해 주고

- Guava Cache 쓰는 곳에 이 친구 쓰면 된다.

http://aosabook.org/en/posa/infinispan.html

Page 28: 왜 Spark 와 infinispan 왜 같이 쓰지

Architecture

Infinispan as a remote data grid- Infinispan instance 개별 실행해서클러스터를 구성한다.

- 다양한 프로토콜 연결 가능- Hot Rod, Memcached, REST

- Infinispan 노드는 독립적인 JVM

http://aosabook.org/en/posa/infinispan.html

Page 29: 왜 Spark 와 infinispan 왜 같이 쓰지

Infinispan hotrod

http://infinispan.org/docs/8.0.x/user_guide/user_guide.html

Page 30: 왜 Spark 와 infinispan 왜 같이 쓰지

Infinispan replication

http://infinispan.org/docs/8.0.x/user_guide/user_guide.html

Page 31: 왜 Spark 와 infinispan 왜 같이 쓰지

Infinispan distribution

http://infinispan.org/docs/8.0.x/user_guide/user_guide.html

Page 32: 왜 Spark 와 infinispan 왜 같이 쓰지

힘들었기 때문에 궁서체임다

데모라고 쓰고

삽질이라고 읽는다.

Page 33: 왜 Spark 와 infinispan 왜 같이 쓰지

힘들었기 때문에 궁서체임다

이제 부터는 삽질을 시작합니다.

cluster, docker, network ….

이런 거 필요 없다

그냥 돌아가기면 해도 기쁘다

Page 34: 왜 Spark 와 infinispan 왜 같이 쓰지

Spark 설치 (맥북에서)다운로드wget http://mirror.apache-kr.org/spark/spark-1.5.2/spark-1.5.2-bin-hadoop2.4.tgz

압축풀기tar zxvf spark-1.5.2-bin-hadoop2.4.tgz

실행 ./sbin/start-master.sh./sbin/start-slave.sh spark://localhost:7077

확인http://localhost:8080/

독립해서 돌려보기$SPARK_HOME/bin/spark-submit --class "패키지 포함 클래스명" --master spark://localhost:7077 jar_파일_경로$SPARK_HOME/bin/spark-submit --class "com.ungi.spark.SimpleApp" --master spark://localhost:7077 /Users/Runner/projects/spark-programming-sample/target/spark-programming-1.0-SNAPSHOT.jar

힘들었기 때문에 궁서체임다

Page 35: 왜 Spark 와 infinispan 왜 같이 쓰지

Infinispan 설치 (맥북에서)다운로드

wget http://downloads.jboss.org/infinispan/8.1.0.Final/infinispan-server-8.1.0.Final-bin.zip

압축풀기

tar zxvf infinispan-server-8.1.0.Final-bin.zip

실행 ./bin/domain.sh -b 192.168.215.239>> 본인 PC 아이피 넣음

확인

http://localhost:9990/

관리자등록

./bin/add-user.sh a > id > password > 한번더 password > yes > yes

힘들었기 때문에 궁서체임다

Page 36: 왜 Spark 와 infinispan 왜 같이 쓰지

Code로 돌려 보자(맥북에서)Intellij

- new project - maven- skd: 1.8 - maven-archetype-quickstart

- groupid: com.demo- artifactiId: spark-infinispan

- name: spark-infinispan-demopom.xml

<build> <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> </build>

힘들었기 때문에 궁서체임다

Page 37: 왜 Spark 와 infinispan 왜 같이 쓰지

pom.xml<!-- infinispan --> <dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-spark_2.10</artifactId> <version>0.2</version></dependency><dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-client-hotrod</artifactId> <version>8.1.0.Final</version></dependency>

<!-- spark --><dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.10</artifactId> <version>1.5.2</version></dependency><dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming_2.10</artifactId> <version>1.5.2</version></dependency>

new file -> test.scala 생성해서 scala 설정함

힘들었기 때문에 궁서체임다

Page 38: 왜 Spark 와 infinispan 왜 같이 쓰지

이렇게 설정은 끝 이제 개발만 하면 끝(그냥 간단한 데모)1. https://github.com/bldecide/spark_infinispan_demo

a. SimplePutGeti. Infinispan 에 넣었다 뺐다

b. SimpleSparkJobi. Infinispan에 데이터 넣고, RDD로 뽑아서 spark로 합구하기(reduce)

c. CreateRDDi. Infinispan에 데이터 있는거 RDD로 뽑아서

d. WordCount i. spark로 단어 세고 파일로 떨구기

e. WordCountInfinispani. spark로 단어 세고 Infinispan에 떨구기

f. WriteKeyValueRDDInfinispani. Key-Value RDD 만들고 Infinispan에 떨구기

g. RandomPuti. Infinspan에 1초마다 랜덤하게 넣기

h. CreatingDStreami. Infinispan에 들어오는걸 SparkStream 으로 받아보기

힘들었기 때문에 궁서체임다

Page 39: 왜 Spark 와 infinispan 왜 같이 쓰지

인위적 결론

spark Infinispan

Page 40: 왜 Spark 와 infinispan 왜 같이 쓰지

인위적 결론

조화가 필요

Page 41: 왜 Spark 와 infinispan 왜 같이 쓰지

인위적 결론

Spark 짱 좋지만 만능은 아니다.

+Infinispan 뭔가 아쉽지만

(아쉬운 부분은 나중에 해결 될꺼라는 강한 믿음으로…)

쓸만하다.

Page 42: 왜 Spark 와 infinispan 왜 같이 쓰지

진짜 결론삽질만이 정답이다.

Page 43: 왜 Spark 와 infinispan 왜 같이 쓰지

감사합니다Thank You!

다시 한번질문 금지