SlideShare a Scribd company logo
1 of 50
Download to read offline
Spark/Shark
          Daegeun Kim (dani.kim@geekple.com)




Friday, January 18, 13
README

                영어를 못하는 사람이 영문 자료를 보면서 작성되었습니다.
                         논문, 프로젝트 페이지 등 (영어 못하는 사람이 저예요.)
                논문이나 기타 문서에 있는 정보더라도 소스코드를 본 것 위
                주로 설명합니다.
                         물론 소스코드를 잘못 해석했을 수 도 있으니 참고!
                단기간에 보고 작성된 것이라 오류가 있을 수 있습니다.




Friday, January 18, 13
Agenda
                Spark
                         Granularity / 간단한 소개
                         RDD / Lineage / Fault-Tolerant
                         High-level Operators / Storage / Cache
                Shark
                         Architecture
                         Features / Cache



Friday, January 18, 13
Spark



Friday, January 18, 13
Spark
                맵리듀스와 같은 클러스터 컴퓨팅 시스템이다.
                병렬 연산을 위한 High-Level 명령 세트를 제공한다.
                         map, filter, join, ... (RDD bulk operation)
                작업분배 및 Fault-Tolerance 에대한 걱정을 줄인다.
                대부분 코드는 스칼라(Scala)로 작성되었다.
                퍼모먼스향상을 위해 인메모리로 데이터를 유지할 수 있다.
                         그 핵심에 RDD가 있다.



Friday, January 18, 13
들어가기에 앞서 ...?




Friday, January 18, 13
Granularity



Friday, January 18, 13
Coarse-grained vs Fine-grained



          상대적인 개념

Friday, January 18, 13
Fine-grained



                세밀하고 잘게 쪼갠 것을 의미




Friday, January 18, 13
Coarse-grained


                Fine-grained 보다 적고 좀 더 큰 것을 의미
                좀 더 뭉뚱그린 개념




Friday, January 18, 13
Granularity

                현 슬라이드 주제를 빗대어 비유하면
                         Coarse-grained : Shark랑 Spark에대해 조사해~!
                         Fine-grained
                           Hive를 대체할 수 있는거임? / 하둡과 다른 점은 뭐임?
                           백배 빠르다는데 그게 진짜임? / ...

                또 다른 예?
                         Coarse: 이체해!, Fine: 출금!, 입금!


Friday, January 18, 13
Hadoop을 대체할 수 있나?

                Spark의 목적은 Hadoop의 Map/Reduce와는 다르다.
                Iterative Algorithms에 더 중점을 뒀고
                         반복적인 데이터마이닝에서 M/R보다 높은 성능을 지닌다.
                         스팸 필터링, 자연어 분석, 도로 교통 예측 등
                결론은 모든 부분을 대체할 수는 없다.
                         하지만 Spark는 DataFlow 처리 및 Iterative
                         Algorithms 처리 등을 적절히 수용하고 있다.



Friday, January 18, 13
하둡이 가지는 문제점

                Iterative Algorithms 관점!
                각 이터레이션별 중간데이터는 HDFS에 쓰기와 읽기가 반복
                되고 복제되면서 디스크 I/O가 많이 발생한다.
                         중간파일이 복제되면서 네트워크 I/O도 발생




Friday, January 18, 13
RDD
                Resilient Distributed DataSet (탄력적인 분산 데이터셋)
                효율적인 Fault-Tolerance 요구사항을 충족을 위해
                         제한된 공유 메모리 형태를 가지며,
                         Coarse-grained Transformations! 기반으로 되어있다.
                read-only 이며 스토리지에 있는 데이터를 통해 생성
                또는 다른 RDD를 기반으로 변형된 RDD를 생성한다.
                High-Level 명령 세트를 제공 (map, filter, join 등)



Friday, January 18, 13
Distributed Shared Memory


                보통의 Key-Value 스토어
                데이터 공유방식은 Fine-grained updates 방식으로
                         임의의 데이터를 쓰기 혹은 읽기 등! (설명이 아리까리한데? :-( 죄송...   )

                RDD처럼 효율적이면서 Fault-Tolerance 구현이 어렵다.
                         뒤에 Lineage에서 더 자세히 언급합니다. :-)




Friday, January 18, 13
RDD Operators
                RDD를 이용한 연산에 사용되는 오퍼레이션 세트!
                모든 오퍼레이션은 Bulk 오퍼레이션이다.
                RDD가 Read-only이므로 읽거나 또 다른 RDD로 변환만
                가능하다.
                Operator는 새로운 RDD를 생성을 의미합니다.
                         실제로 수행되지 않아요! (Lineage Graph 생성)
                Action은 드라이버(여기서는 shell같은 클라이언트 어플)
                에게 결과를 주거나 결과를 어딘가 저장할 때 사용합니다.
                         실제로 연산이 진행됩니다.

Friday, January 18, 13
지원하는 High-Level Ops.
                map           join
                                             Actions
                filter        cogroup
                                             count
                flatMap       crossProduct
                                             collect
                sample        mapValues
                                             reduce
                groupByKey    sort
                                             lookup
                reduceByKey   partitionBy
                                             save
                union         ...



Friday, January 18, 13
Pig를 보신 분은 이해하기 쉽습니다. 표기법이 스칼라 문법이라서 헷갈릴
          수 있는데 이 것까지 설명하면 너무 많....
Friday, January 18, 13
Lineage

          사전적 의미로 혈통, 핏줄, 일족, 가계와 같은 의미를 지닌다.

Friday, January 18, 13
Lineage Graph                                                               HadoopRDD



                                                                                      FilteredRDD



          단순 예제.                                                                      MappedRDD



          val messages = spark.textFile(“hdfs://...”)
          val errors = messages.filter(_.contains(“ERROR”))
          val category = errors.map(_.split(“,”)(3))

          이해를 돕고자 보충 설명하면 (밑줄(_)은 scala의 placeholder 문법입니다.)
          _.contains(“ERROR”) 는 func anonymousFunc1(String line) { return line.contains(“ERROR”) } <= 이해를 위한 가짜코드
          _.split(“,”)(3) 는 func anonymousFunc2(String line) { return line.split(“,”)[3] } <= 이해를 위한 가짜코드




Friday, January 18, 13
Fault-Tolerant

                Lineage Graph로 잃어버린 RDD를 재구성 가능하다.
                         프로그램을 처음부터 다시 시작할 필요 없다.
                         불필요한 체크포인트 등의 불필요한 오버헤드를 줄인다.
                          복제와 같은...
                         물론, 안전하게 유지하도록 체크포인트 기능을 제공한다.
                          StorageLevel 참고 및 checkpoint 메서드 참고.

          물론 최초 소스는 안전한 스토리지에 있어야 한다. (이전 슬라이드에 언급했듯 RDD는 스토리지 및 또 다른 RDD
          에의해 생성된다.)


Friday, January 18, 13
Stage / Dependencies / Scheduler




                이 부분은 생략합니다.




Friday, January 18, 13
Storage
                RDD는 선택적으로 persist하게 유지할 수 있다.
                         In-memory Storage (Deserialzed Java Objects)
                         In-memory Storage (Serialized data)
                         On-disk Storage
                (disk, memory, deserialize, replication)




Friday, January 18, 13
Storage Level

                DISK_ONLY / DISK_ONLY_2
                MEMORY_ONLY / MEMORY_ONLY_2
                MEMORY_ONLY_SER / MEMORY_ONLY_SER_2
                MEMORY_AND_DISK / MEMORY_AND_DISK_2
                MEMORY_AND_DISK_SER
                MEMORY_AND_DISK_SER_2

          _2 가 붙은 것은 2개 복제본을 유지를 의미하며, _ONLY는 다른 스토리지는 쓰지 않는 것을 의미
          _SER 는 객체를 Serialize 한 후 저장하겠다는 것을 의미한다.


Friday, January 18, 13
Deserialized Java Objects
                     vs Serialize to Bytes




Friday, January 18, 13
Deserialized Java Objects


                CPU연산이 적어 빠르다.
                메모리 사용률에 있어 매우 비효율적이다.
                GC 오버헤드가 심하다.




Friday, January 18, 13
Serialize to Bytes


                메모리 효율이 매우 좋다.
                GC가 보다 효율적이나
                serialized/deserialize 과정에서 CPU 사용이 높다.




Friday, January 18, 13
Java Objects vs Bytes


                메모리 효율 = Bytes (x3)
                CPU 효율 = Java Objects (x5)
                GC 효율 = Bytes




Friday, January 18, 13
Cache!

             val messages = spark.textFile(“hdfs://...”)
             val cached = messages.cache() // or persist()
             val errors = cached.filter(_.contains(“ERROR”))
             val info = cached.filter(_.contains(“INFO”))




          cache 메서드 또는 persist 메서드를 통해서 캐쉬할 수 있습니다. cache 메서드는 MEMORY_ONLY 스토리지
          레벨이며 persist는 다른 레벨로 설정할 수 있다.


Friday, January 18, 13
실습
                > val rows = sc.textFile("hdfs://tpch-1:9000/tpch/lineitem")
                > rows.count # took 3.80104688 s
                11997996
                > val cached = rows.cached()
                > cached.count # took 3.19858059 s
                > cached.count # took 0.119807971 s
                > cached.filter(_.contains("TRUCK")).count # took 0.439822487 s
                1714622




Friday, January 18, 13
Shark



Friday, January 18, 13
Shark
                Spark 상에서 Hive 구현 (물론 하이브 라이브러리 이용)
                Spark의 특징으로 가지는 특징
                         Apache M/R과는 다르게 Task 실행 오버헤드는 없다.
                         각 스텝별 중간 데이터가 HDFS와 같은 스토어에 저장되
                         지 않는다. 복제 및 Disk IO 등 오버헤드
                         메모리로 커버가능한 크기는 셔플 퍼포먼스 개선
                          이건 코드를 못 찾아서 장담 못함


Friday, January 18, 13
Architecture


Friday, January 18, 13
http://www.slideshare.net/Hadoop_Summit/spark-and-shark

Friday, January 18, 13
http://www.slideshare.net/Hadoop_Summit/spark-and-shark

Friday, January 18, 13
Architecture

                이용할 수 있을 만큼 하이브 것을 이용했다.
                         CLI, Thrift Server, JDBC, Metastore 등
                Thrift 또한 이용했음은 외부시스템은 클라이언트 라이브러
                리가 변경되지 않는다는 의미.
                         Spark만큼 RDD 활용이 유연하지 않다.




Friday, January 18, 13
Features
                Shark Feature는 곧 Hive Feature.
                         Hive UDF, UDAF, SerDe 등 가능. Impala는 안됨.
                         대부분의 하이브 쿼리 지원
                Apache M/R기반이 아닌 Spark 상에서 동작.
                         In-memory RDD를 활용해서 성능향상을 꾀할 수 있음.
                CTAS (CREATE TABLE as SELECT ...) 을 통해 캐싱
                         RDD의 persist를 호출하는 역할 (TableRDD)



Friday, January 18, 13
Unsupported Features
                ADD FILE
                STREAMTABLE
                Outer join with non-equi join filter
                Table Statistics
                Table buckets
                Automatically convert joins to mapjoins
                Sort-merge mapjoins
          예전 자료를 본 것이라 구현이 된 Feature가 있을 수 있습니다.


Friday, January 18, 13
Unsupported Features
                Partitions with different input formats
                Unique joins
                Writing to two or more tables in a single SELECT
                INSERT
                Archiving data
                Virtual columns (INPUT_FILE_NAME,
                BLOCK_OFFSET_INSIDE_FILE)
                Merge small file from output
          예전 자료를 본 것이라 구현이 된 Feature가 있을 수 있습니다.


Friday, January 18, 13
Efficient In-Memory Stroage
                Columnar Memory Storage 개발 (shark)
                         Spark의 Memory Storage 상에서 구동
                공간절약과 읽기 성능 개선 효과 (shark)
                         Complex Types => single byte array (shark)
                         Other Types => java primitive type (shark)
                대략 Data 270m => JavaObj: 971m, Serialized : 289m
                CPU-Efficient compression (shark)
                         dictionary encoding (Text 대상)
                         bit packing (byte, short, int)

              ColumnarSerDe 구현을 참고하세요.
Friday, January 18, 13
Shark Cache
                [Table name]_cached
                CTAS와 Table Properties를 이용한 방법
                         “shark.cache”: true or false
                         “shark.cache.storageLevel”: memory or disk
                           이전 슬라이드 중 Storage Level을 참고하세요.
                같은 테이블도 세션이 다르면 캐쉬된 테이블 접근 불가.
                개인적으로 spark는 마음에 들지만 shark는 부족해 보임.



Friday, January 18, 13
Shark Cache
                create table lineitem_cached as select * from
                lineitem where l_shipmode = ‘TRUCK’;
                select count(*) from lineitem_cached;


                create table lineitem2 tblproperties(“shark.cache” =
                “true”, “shark.storageLevel” = “MEMORY_ONLY_2”)
                as ...
                select count(*) from lineitem2;



Friday, January 18, 13
Shark Shell

                제공 메서드
                         sql2rdd
                         sql2console
                         sql
                이걸 이용하면 굳이 CTAS를 쓸 필요는 없다. 자체가 RDD이
                므로 persist 메서드 이용하면 됩니다. (TableRDD)




Friday, January 18, 13
주의: 아직 결론을 내기엔 내공이 부
           족하여 소스분석 및 벤치마크 테스
             트가 더 진행되어야 합니다.




Friday, January 18, 13
TPC-H Benchmark


          외부에 공개하기엔 정확하지 않아 이 슬라이드에서는 빠집니다.


Friday, January 18, 13
결론
                Shark가 Hive를 대체할 수 있는가에대해서 고민에서 시작
                         그래서 TPC-H 데이터로 벤치마크한 것
                모니터링과 디버깅이 너무 힘들다. 이제 좀 적응 한 것 같다.
                         멈추는 현상도 발생하고 가끔 워커가 죽기도 하고 리커버
                         리가 안되기도 하고 다양한 케이스를 만났다.
                Shark는 추천하지 않지만 Spark는 추천
                하이브는 좀 더 느려도 성공적으로 끝나지만 얘들은 뭔가 변
                수가 많다. (제 실력이 부족한 변수가 치명적)


Friday, January 18, 13
결론

                RDD는 인메모리로 잘 관리하지만 부수적으로 생기는 파일
                이 많다. (이건 다음 슬라이드에 ...)
                         디스크 사용량이 꽤 많은 것 같다.
                         자동으로 끝나면 지워주면 좋으련만.
                ...




Friday, January 18, 13
뭔가 막 이상함... 빵구남.




Friday, January 18, 13
질의 응답!



Friday, January 18, 13
끝



Friday, January 18, 13

More Related Content

What's hot

The nosql echossytem
The nosql echossytemThe nosql echossytem
The nosql echossytem종석 박
 
Reduce testing time by Multiprocessing in python
Reduce testing time by Multiprocessing in pythonReduce testing time by Multiprocessing in python
Reduce testing time by Multiprocessing in pythonSangJune Ahn
 
컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷중선 곽
 
cassandra overview & spark to cassandra
cassandra overview & spark to cassandra cassandra overview & spark to cassandra
cassandra overview & spark to cassandra SuseongPark
 
Programming skills 1부
Programming skills 1부Programming skills 1부
Programming skills 1부JiHyung Lee
 
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...hoondong kim
 
NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기Hoyoung Choi
 
프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법중선 곽
 
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅DongMin Choi
 
Zeppelin(제플린) 서울시립대학교 데이터 마이닝연구실 활용사례
Zeppelin(제플린) 서울시립대학교 데이터 마이닝연구실 활용사례Zeppelin(제플린) 서울시립대학교 데이터 마이닝연구실 활용사례
Zeppelin(제플린) 서울시립대학교 데이터 마이닝연구실 활용사례Taejun Kim
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준NAVER D2
 
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기Wonha Ryu
 

What's hot (12)

The nosql echossytem
The nosql echossytemThe nosql echossytem
The nosql echossytem
 
Reduce testing time by Multiprocessing in python
Reduce testing time by Multiprocessing in pythonReduce testing time by Multiprocessing in python
Reduce testing time by Multiprocessing in python
 
컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷
 
cassandra overview & spark to cassandra
cassandra overview & spark to cassandra cassandra overview & spark to cassandra
cassandra overview & spark to cassandra
 
Programming skills 1부
Programming skills 1부Programming skills 1부
Programming skills 1부
 
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
 
NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기NoSQL 위에서 MMORPG 개발하기
NoSQL 위에서 MMORPG 개발하기
 
프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법
 
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
[NDC 2018] 신입 개발자가 알아야 할 윈도우 메모리릭 디버깅
 
Zeppelin(제플린) 서울시립대학교 데이터 마이닝연구실 활용사례
Zeppelin(제플린) 서울시립대학교 데이터 마이닝연구실 활용사례Zeppelin(제플린) 서울시립대학교 데이터 마이닝연구실 활용사례
Zeppelin(제플린) 서울시립대학교 데이터 마이닝연구실 활용사례
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준
 
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기
 

Viewers also liked

FRENDS 발표자료 - 취미 개발기
FRENDS 발표자료 - 취미 개발기FRENDS 발표자료 - 취미 개발기
FRENDS 발표자료 - 취미 개발기Daegeun Kim
 
Kubernetes on GCP
Kubernetes on GCPKubernetes on GCP
Kubernetes on GCPDaegeun Kim
 
SIP-17 Type Dynamic
SIP-17 Type DynamicSIP-17 Type Dynamic
SIP-17 Type DynamicDaegeun Kim
 
스칼라
스칼라스칼라
스칼라Daegeun Kim
 
HCatalog & Templeton
HCatalog & TempletonHCatalog & Templeton
HCatalog & TempletonDaegeun Kim
 
Indoor취미를 첫경험 해보는 사람들을 위한 원스톱 서비스
Indoor취미를 첫경험 해보는 사람들을 위한 원스톱 서비스Indoor취미를 첫경험 해보는 사람들을 위한 원스톱 서비스
Indoor취미를 첫경험 해보는 사람들을 위한 원스톱 서비스현철 문
 
토마킷 사업 소개서
토마킷 사업 소개서토마킷 사업 소개서
토마킷 사업 소개서현철 문
 
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)Brian Hong
 
왜 레진코믹스는 구글앱엔진을 선택했나
왜 레진코믹스는 구글앱엔진을 선택했나왜 레진코믹스는 구글앱엔진을 선택했나
왜 레진코믹스는 구글앱엔진을 선택했나소리 강
 
[Osx dev] server essential lesson 10. configuring os x server to provide de...
[Osx dev] server essential   lesson 10. configuring os x server to provide de...[Osx dev] server essential   lesson 10. configuring os x server to provide de...
[Osx dev] server essential lesson 10. configuring os x server to provide de...EungShik (Henry) Kim
 
윈속 네트워크 프로그래밍
윈속 네트워크 프로그래밍윈속 네트워크 프로그래밍
윈속 네트워크 프로그래밍진화 손
 
[Td 2015]windows 10 엔터프라이즈 시나리오 part II 보안 및 관리(권순만)
[Td 2015]windows 10 엔터프라이즈 시나리오 part II   보안 및 관리(권순만)[Td 2015]windows 10 엔터프라이즈 시나리오 part II   보안 및 관리(권순만)
[Td 2015]windows 10 엔터프라이즈 시나리오 part II 보안 및 관리(권순만)Sang Don Kim
 
Apache Sqoop: A Data Transfer Tool for Hadoop
Apache Sqoop: A Data Transfer Tool for HadoopApache Sqoop: A Data Transfer Tool for Hadoop
Apache Sqoop: A Data Transfer Tool for HadoopCloudera, Inc.
 
Guide To Mobile App UI
Guide To Mobile App UI Guide To Mobile App UI
Guide To Mobile App UI Yun Jin Kim
 

Viewers also liked (20)

FRENDS 발표자료 - 취미 개발기
FRENDS 발표자료 - 취미 개발기FRENDS 발표자료 - 취미 개발기
FRENDS 발표자료 - 취미 개발기
 
Kubernetes on GCP
Kubernetes on GCPKubernetes on GCP
Kubernetes on GCP
 
SIP-17 Type Dynamic
SIP-17 Type DynamicSIP-17 Type Dynamic
SIP-17 Type Dynamic
 
스칼라
스칼라스칼라
스칼라
 
Logical clocks
Logical clocksLogical clocks
Logical clocks
 
Gerrit
GerritGerrit
Gerrit
 
HCatalog & Templeton
HCatalog & TempletonHCatalog & Templeton
HCatalog & Templeton
 
Indoor취미를 첫경험 해보는 사람들을 위한 원스톱 서비스
Indoor취미를 첫경험 해보는 사람들을 위한 원스톱 서비스Indoor취미를 첫경험 해보는 사람들을 위한 원스톱 서비스
Indoor취미를 첫경험 해보는 사람들을 위한 원스톱 서비스
 
토마킷 사업 소개서
토마킷 사업 소개서토마킷 사업 소개서
토마킷 사업 소개서
 
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
아마존 클라우드와 함께한 1개월, 쿠키런 사례중심 (KGC 2013)
 
왜 레진코믹스는 구글앱엔진을 선택했나
왜 레진코믹스는 구글앱엔진을 선택했나왜 레진코믹스는 구글앱엔진을 선택했나
왜 레진코믹스는 구글앱엔진을 선택했나
 
프로젝트 발표 영상
프로젝트 발표 영상프로젝트 발표 영상
프로젝트 발표 영상
 
[Osx dev] server essential lesson 10. configuring os x server to provide de...
[Osx dev] server essential   lesson 10. configuring os x server to provide de...[Osx dev] server essential   lesson 10. configuring os x server to provide de...
[Osx dev] server essential lesson 10. configuring os x server to provide de...
 
What is mdm
What is mdmWhat is mdm
What is mdm
 
윈속 네트워크 프로그래밍
윈속 네트워크 프로그래밍윈속 네트워크 프로그래밍
윈속 네트워크 프로그래밍
 
[Td 2015]windows 10 엔터프라이즈 시나리오 part II 보안 및 관리(권순만)
[Td 2015]windows 10 엔터프라이즈 시나리오 part II   보안 및 관리(권순만)[Td 2015]windows 10 엔터프라이즈 시나리오 part II   보안 및 관리(권순만)
[Td 2015]windows 10 엔터프라이즈 시나리오 part II 보안 및 관리(권순만)
 
bsk_3_1_2
bsk_3_1_2bsk_3_1_2
bsk_3_1_2
 
Apache Sqoop: A Data Transfer Tool for Hadoop
Apache Sqoop: A Data Transfer Tool for HadoopApache Sqoop: A Data Transfer Tool for Hadoop
Apache Sqoop: A Data Transfer Tool for Hadoop
 
201412 epp mdm_시온
201412 epp mdm_시온201412 epp mdm_시온
201412 epp mdm_시온
 
Guide To Mobile App UI
Guide To Mobile App UI Guide To Mobile App UI
Guide To Mobile App UI
 

Spark and Shark

  • 1. Spark/Shark Daegeun Kim (dani.kim@geekple.com) Friday, January 18, 13
  • 2. README 영어를 못하는 사람이 영문 자료를 보면서 작성되었습니다. 논문, 프로젝트 페이지 등 (영어 못하는 사람이 저예요.) 논문이나 기타 문서에 있는 정보더라도 소스코드를 본 것 위 주로 설명합니다. 물론 소스코드를 잘못 해석했을 수 도 있으니 참고! 단기간에 보고 작성된 것이라 오류가 있을 수 있습니다. Friday, January 18, 13
  • 3. Agenda Spark Granularity / 간단한 소개 RDD / Lineage / Fault-Tolerant High-level Operators / Storage / Cache Shark Architecture Features / Cache Friday, January 18, 13
  • 5. Spark 맵리듀스와 같은 클러스터 컴퓨팅 시스템이다. 병렬 연산을 위한 High-Level 명령 세트를 제공한다. map, filter, join, ... (RDD bulk operation) 작업분배 및 Fault-Tolerance 에대한 걱정을 줄인다. 대부분 코드는 스칼라(Scala)로 작성되었다. 퍼모먼스향상을 위해 인메모리로 데이터를 유지할 수 있다. 그 핵심에 RDD가 있다. Friday, January 18, 13
  • 8. Coarse-grained vs Fine-grained 상대적인 개념 Friday, January 18, 13
  • 9. Fine-grained 세밀하고 잘게 쪼갠 것을 의미 Friday, January 18, 13
  • 10. Coarse-grained Fine-grained 보다 적고 좀 더 큰 것을 의미 좀 더 뭉뚱그린 개념 Friday, January 18, 13
  • 11. Granularity 현 슬라이드 주제를 빗대어 비유하면 Coarse-grained : Shark랑 Spark에대해 조사해~! Fine-grained Hive를 대체할 수 있는거임? / 하둡과 다른 점은 뭐임? 백배 빠르다는데 그게 진짜임? / ... 또 다른 예? Coarse: 이체해!, Fine: 출금!, 입금! Friday, January 18, 13
  • 12. Hadoop을 대체할 수 있나? Spark의 목적은 Hadoop의 Map/Reduce와는 다르다. Iterative Algorithms에 더 중점을 뒀고 반복적인 데이터마이닝에서 M/R보다 높은 성능을 지닌다. 스팸 필터링, 자연어 분석, 도로 교통 예측 등 결론은 모든 부분을 대체할 수는 없다. 하지만 Spark는 DataFlow 처리 및 Iterative Algorithms 처리 등을 적절히 수용하고 있다. Friday, January 18, 13
  • 13. 하둡이 가지는 문제점 Iterative Algorithms 관점! 각 이터레이션별 중간데이터는 HDFS에 쓰기와 읽기가 반복 되고 복제되면서 디스크 I/O가 많이 발생한다. 중간파일이 복제되면서 네트워크 I/O도 발생 Friday, January 18, 13
  • 14. RDD Resilient Distributed DataSet (탄력적인 분산 데이터셋) 효율적인 Fault-Tolerance 요구사항을 충족을 위해 제한된 공유 메모리 형태를 가지며, Coarse-grained Transformations! 기반으로 되어있다. read-only 이며 스토리지에 있는 데이터를 통해 생성 또는 다른 RDD를 기반으로 변형된 RDD를 생성한다. High-Level 명령 세트를 제공 (map, filter, join 등) Friday, January 18, 13
  • 15. Distributed Shared Memory 보통의 Key-Value 스토어 데이터 공유방식은 Fine-grained updates 방식으로 임의의 데이터를 쓰기 혹은 읽기 등! (설명이 아리까리한데? :-( 죄송... ) RDD처럼 효율적이면서 Fault-Tolerance 구현이 어렵다. 뒤에 Lineage에서 더 자세히 언급합니다. :-) Friday, January 18, 13
  • 16. RDD Operators RDD를 이용한 연산에 사용되는 오퍼레이션 세트! 모든 오퍼레이션은 Bulk 오퍼레이션이다. RDD가 Read-only이므로 읽거나 또 다른 RDD로 변환만 가능하다. Operator는 새로운 RDD를 생성을 의미합니다. 실제로 수행되지 않아요! (Lineage Graph 생성) Action은 드라이버(여기서는 shell같은 클라이언트 어플) 에게 결과를 주거나 결과를 어딘가 저장할 때 사용합니다. 실제로 연산이 진행됩니다. Friday, January 18, 13
  • 17. 지원하는 High-Level Ops. map join Actions filter cogroup count flatMap crossProduct collect sample mapValues reduce groupByKey sort lookup reduceByKey partitionBy save union ... Friday, January 18, 13
  • 18. Pig를 보신 분은 이해하기 쉽습니다. 표기법이 스칼라 문법이라서 헷갈릴 수 있는데 이 것까지 설명하면 너무 많.... Friday, January 18, 13
  • 19. Lineage 사전적 의미로 혈통, 핏줄, 일족, 가계와 같은 의미를 지닌다. Friday, January 18, 13
  • 20. Lineage Graph HadoopRDD FilteredRDD 단순 예제. MappedRDD val messages = spark.textFile(“hdfs://...”) val errors = messages.filter(_.contains(“ERROR”)) val category = errors.map(_.split(“,”)(3)) 이해를 돕고자 보충 설명하면 (밑줄(_)은 scala의 placeholder 문법입니다.) _.contains(“ERROR”) 는 func anonymousFunc1(String line) { return line.contains(“ERROR”) } <= 이해를 위한 가짜코드 _.split(“,”)(3) 는 func anonymousFunc2(String line) { return line.split(“,”)[3] } <= 이해를 위한 가짜코드 Friday, January 18, 13
  • 21. Fault-Tolerant Lineage Graph로 잃어버린 RDD를 재구성 가능하다. 프로그램을 처음부터 다시 시작할 필요 없다. 불필요한 체크포인트 등의 불필요한 오버헤드를 줄인다. 복제와 같은... 물론, 안전하게 유지하도록 체크포인트 기능을 제공한다. StorageLevel 참고 및 checkpoint 메서드 참고. 물론 최초 소스는 안전한 스토리지에 있어야 한다. (이전 슬라이드에 언급했듯 RDD는 스토리지 및 또 다른 RDD 에의해 생성된다.) Friday, January 18, 13
  • 22. Stage / Dependencies / Scheduler 이 부분은 생략합니다. Friday, January 18, 13
  • 23. Storage RDD는 선택적으로 persist하게 유지할 수 있다. In-memory Storage (Deserialzed Java Objects) In-memory Storage (Serialized data) On-disk Storage (disk, memory, deserialize, replication) Friday, January 18, 13
  • 24. Storage Level DISK_ONLY / DISK_ONLY_2 MEMORY_ONLY / MEMORY_ONLY_2 MEMORY_ONLY_SER / MEMORY_ONLY_SER_2 MEMORY_AND_DISK / MEMORY_AND_DISK_2 MEMORY_AND_DISK_SER MEMORY_AND_DISK_SER_2 _2 가 붙은 것은 2개 복제본을 유지를 의미하며, _ONLY는 다른 스토리지는 쓰지 않는 것을 의미 _SER 는 객체를 Serialize 한 후 저장하겠다는 것을 의미한다. Friday, January 18, 13
  • 25. Deserialized Java Objects vs Serialize to Bytes Friday, January 18, 13
  • 26. Deserialized Java Objects CPU연산이 적어 빠르다. 메모리 사용률에 있어 매우 비효율적이다. GC 오버헤드가 심하다. Friday, January 18, 13
  • 27. Serialize to Bytes 메모리 효율이 매우 좋다. GC가 보다 효율적이나 serialized/deserialize 과정에서 CPU 사용이 높다. Friday, January 18, 13
  • 28. Java Objects vs Bytes 메모리 효율 = Bytes (x3) CPU 효율 = Java Objects (x5) GC 효율 = Bytes Friday, January 18, 13
  • 29. Cache! val messages = spark.textFile(“hdfs://...”) val cached = messages.cache() // or persist() val errors = cached.filter(_.contains(“ERROR”)) val info = cached.filter(_.contains(“INFO”)) cache 메서드 또는 persist 메서드를 통해서 캐쉬할 수 있습니다. cache 메서드는 MEMORY_ONLY 스토리지 레벨이며 persist는 다른 레벨로 설정할 수 있다. Friday, January 18, 13
  • 30. 실습 > val rows = sc.textFile("hdfs://tpch-1:9000/tpch/lineitem") > rows.count # took 3.80104688 s 11997996 > val cached = rows.cached() > cached.count # took 3.19858059 s > cached.count # took 0.119807971 s > cached.filter(_.contains("TRUCK")).count # took 0.439822487 s 1714622 Friday, January 18, 13
  • 32. Shark Spark 상에서 Hive 구현 (물론 하이브 라이브러리 이용) Spark의 특징으로 가지는 특징 Apache M/R과는 다르게 Task 실행 오버헤드는 없다. 각 스텝별 중간 데이터가 HDFS와 같은 스토어에 저장되 지 않는다. 복제 및 Disk IO 등 오버헤드 메모리로 커버가능한 크기는 셔플 퍼포먼스 개선 이건 코드를 못 찾아서 장담 못함 Friday, January 18, 13
  • 36. Architecture 이용할 수 있을 만큼 하이브 것을 이용했다. CLI, Thrift Server, JDBC, Metastore 등 Thrift 또한 이용했음은 외부시스템은 클라이언트 라이브러 리가 변경되지 않는다는 의미. Spark만큼 RDD 활용이 유연하지 않다. Friday, January 18, 13
  • 37. Features Shark Feature는 곧 Hive Feature. Hive UDF, UDAF, SerDe 등 가능. Impala는 안됨. 대부분의 하이브 쿼리 지원 Apache M/R기반이 아닌 Spark 상에서 동작. In-memory RDD를 활용해서 성능향상을 꾀할 수 있음. CTAS (CREATE TABLE as SELECT ...) 을 통해 캐싱 RDD의 persist를 호출하는 역할 (TableRDD) Friday, January 18, 13
  • 38. Unsupported Features ADD FILE STREAMTABLE Outer join with non-equi join filter Table Statistics Table buckets Automatically convert joins to mapjoins Sort-merge mapjoins 예전 자료를 본 것이라 구현이 된 Feature가 있을 수 있습니다. Friday, January 18, 13
  • 39. Unsupported Features Partitions with different input formats Unique joins Writing to two or more tables in a single SELECT INSERT Archiving data Virtual columns (INPUT_FILE_NAME, BLOCK_OFFSET_INSIDE_FILE) Merge small file from output 예전 자료를 본 것이라 구현이 된 Feature가 있을 수 있습니다. Friday, January 18, 13
  • 40. Efficient In-Memory Stroage Columnar Memory Storage 개발 (shark) Spark의 Memory Storage 상에서 구동 공간절약과 읽기 성능 개선 효과 (shark) Complex Types => single byte array (shark) Other Types => java primitive type (shark) 대략 Data 270m => JavaObj: 971m, Serialized : 289m CPU-Efficient compression (shark) dictionary encoding (Text 대상) bit packing (byte, short, int) ColumnarSerDe 구현을 참고하세요. Friday, January 18, 13
  • 41. Shark Cache [Table name]_cached CTAS와 Table Properties를 이용한 방법 “shark.cache”: true or false “shark.cache.storageLevel”: memory or disk 이전 슬라이드 중 Storage Level을 참고하세요. 같은 테이블도 세션이 다르면 캐쉬된 테이블 접근 불가. 개인적으로 spark는 마음에 들지만 shark는 부족해 보임. Friday, January 18, 13
  • 42. Shark Cache create table lineitem_cached as select * from lineitem where l_shipmode = ‘TRUCK’; select count(*) from lineitem_cached; create table lineitem2 tblproperties(“shark.cache” = “true”, “shark.storageLevel” = “MEMORY_ONLY_2”) as ... select count(*) from lineitem2; Friday, January 18, 13
  • 43. Shark Shell 제공 메서드 sql2rdd sql2console sql 이걸 이용하면 굳이 CTAS를 쓸 필요는 없다. 자체가 RDD이 므로 persist 메서드 이용하면 됩니다. (TableRDD) Friday, January 18, 13
  • 44. 주의: 아직 결론을 내기엔 내공이 부 족하여 소스분석 및 벤치마크 테스 트가 더 진행되어야 합니다. Friday, January 18, 13
  • 45. TPC-H Benchmark 외부에 공개하기엔 정확하지 않아 이 슬라이드에서는 빠집니다. Friday, January 18, 13
  • 46. 결론 Shark가 Hive를 대체할 수 있는가에대해서 고민에서 시작 그래서 TPC-H 데이터로 벤치마크한 것 모니터링과 디버깅이 너무 힘들다. 이제 좀 적응 한 것 같다. 멈추는 현상도 발생하고 가끔 워커가 죽기도 하고 리커버 리가 안되기도 하고 다양한 케이스를 만났다. Shark는 추천하지 않지만 Spark는 추천 하이브는 좀 더 느려도 성공적으로 끝나지만 얘들은 뭔가 변 수가 많다. (제 실력이 부족한 변수가 치명적) Friday, January 18, 13
  • 47. 결론 RDD는 인메모리로 잘 관리하지만 부수적으로 생기는 파일 이 많다. (이건 다음 슬라이드에 ...) 디스크 사용량이 꽤 많은 것 같다. 자동으로 끝나면 지워주면 좋으련만. ... Friday, January 18, 13
  • 48. 뭔가 막 이상함... 빵구남. Friday, January 18, 13