Upload
ungi-jungungi
View
979
Download
3
Embed Size (px)
Citation preview
Spark + Infinspan(몰라도 한달이면 이 만큼은 할 수 있었다.)
정운기 / 개발자쿠팡
2015 SEMINAR
시작 전 유의사항
발표자 상태초보가 정신줄을 놓치기 일보 직전
그래서질문 금지답답해도 참기
욕은 안 들리는 곳에서 하기
몰라도 한달이면 이 만큼은 할 수 있었다.
정정합니다.
할 수 있을 줄 알았습니다.
난 누구
남자 세상 JBUG그냥 멤버
마라톤 풀코스 5회 완주한 사람
닥치는 대로 다하는 쿠팡의 그냥 개발쟁이(현재 개인화 추천팀에서 근무중 ^^)
이런 순서로 합니다.
• Infinispan (이런 녀석도 있었다.)
• Spark + Infinispan(왕 짱 좋은 스파크인데 뭐가 아쉬워서)
• 조금만 더 Infinispan(이런 녀석은 정말)
• 데모
오픈소스 분산
인 메모리 기반 데이터 그리드 레드햇 2009
극도의 확장성고가용성
http://infinispan.org/about/
(infinispan.org)
꽁짜
요즘은 기본이지 (빅데이터 시대에는 기본이지)
디스크 보다 빠르겠지좋은 거대기업노땅
(내가 안건 얼마 안되었는데 ....)
고무줄(마음대로 늘렸다 줄였다)
좀비(웬만해서 잘 안 죽는 구만)
http://infinispan.org/about/
이런 녀석
요즘은
메모리가 싼 세상
요즘은
속도가 돈보다 중요(왜냐하면 속도가 돈이니깐)
그러니깐
Infinispan도 쓸만할 수 있는 세상
거기다가
요즘 완전 짱 대세인 Spark
이 친구랑도 친하게 지내려고 노력함(Hadoop하고도)
대세 스파크
대세인 Spark가 뭐가 아쉬워서
Infinispan 을 쓰지?
아쉽기보다는 같이 쓰면 좋을때가
있다
아쉬움1
Spark Job 간의 데이터 공유에서 생기는 병목
1. Spark Job1에서 처리를 해서 어떤 결과를 만들어냄(근데 이걸 공유하고 싶어함)
2. 그래서 어딘가로 보냄3. 어딘가에 있는 걸 Spark
Job2에서 읽음
Job1
Result
Job2
Result
Result
생각
빠르게 공유하고 싶다.- 빠른건 메모리
- 메모리 속도로 하면 좋겠구만
아쉬움 해결1
메모리 속도로 데이터를 공유
1. spark Job 1번에 빠른 속도로 분석해냄
2. 그리고 열라 빠른 Infinispan에 내림
3. Infinispane에 있는 걸 Spark Job 2번에 열라빨리 읽어서 분석을 시작함
Job1
Result
Job2
Result
Result
아쉬움2
메모리는 휘발성이라 계산하다 깨지면 모두 날라간다
data
data
CrashCrash
생각
Spark 밖에 저장하면- 근데 빠르면 더 좋지
아쉬움2 해결
메모리 속도로 Infinispan 넣어두면 안전
Crash
data
data
spark-infinispan 정리
Key-Value RDD를
바로 Infinispan 에 넣을 수 있고
Infinispan 에 있는걸
RDD / DStream로 꺼내서 쓸 수 있다.
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 입니다.
(infinispan.org)
언제 사용하는 거야?
● 캐쉬가 필요할 때
● 고성능의 NoSQL 데이터 저장소가 필요할 때
● 클러스터링 잘되고 고 가용성의 데이터 그리드가 필요할 때
http://infinispan.org/about/
Infinispan
● Disk보다는 빠른 속도를 원할 때
● Realtime 처리와 같이 빠른 처리 속도가 필요할 때
● 반복해서 사용하는 데이터를 공유해서 사용하고 싶을 때
● Object를 저장하고 싶을 때
● Primitive Type을 저장하고 싶을 때
● Spark RDD 저장하거나 빼내고 싶을 때
단, key-value로 저장할 수 있는 것들을 ...
Architecture
라이브러디 모드- 그냥 Jar 파일 하나 포함시켜서 쉽게 사용하면 된다.
- 그냥 Map인데더 많이 들어오면 옛날 넘들 지워지고시간지나면 알아서 지워주고동시에 두개가 같이 들어가는 것도 해결해 주고
- Guava Cache 쓰는 곳에 이 친구 쓰면 된다.
http://aosabook.org/en/posa/infinispan.html
Architecture
Infinispan as a remote data grid- Infinispan instance 개별 실행해서클러스터를 구성한다.
- 다양한 프로토콜 연결 가능- Hot Rod, Memcached, REST
- Infinispan 노드는 독립적인 JVM
http://aosabook.org/en/posa/infinispan.html
Infinispan hotrod
http://infinispan.org/docs/8.0.x/user_guide/user_guide.html
Infinispan replication
http://infinispan.org/docs/8.0.x/user_guide/user_guide.html
Infinispan distribution
http://infinispan.org/docs/8.0.x/user_guide/user_guide.html
힘들었기 때문에 궁서체임다
데모라고 쓰고
삽질이라고 읽는다.
힘들었기 때문에 궁서체임다
이제 부터는 삽질을 시작합니다.
cluster, docker, network ….
이런 거 필요 없다
그냥 돌아가기면 해도 기쁘다
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
힘들었기 때문에 궁서체임다
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
힘들었기 때문에 궁서체임다
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>
힘들었기 때문에 궁서체임다
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 설정함
힘들었기 때문에 궁서체임다
이렇게 설정은 끝 이제 개발만 하면 끝(그냥 간단한 데모)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 으로 받아보기
힘들었기 때문에 궁서체임다
인위적 결론
spark Infinispan
인위적 결론
조화가 필요
인위적 결론
Spark 짱 좋지만 만능은 아니다.
+Infinispan 뭔가 아쉽지만
(아쉬운 부분은 나중에 해결 될꺼라는 강한 믿음으로…)
쓸만하다.
진짜 결론삽질만이 정답이다.
감사합니다Thank You!
다시 한번질문 금지