Spark Overview ( 아파치스파크를써야하는이유 ) SK 주식회사 C&C 이상훈
빅데이터플랫폼 Spark Overview Spark 란? Spark Streaming 고급분석
빅데이터플랫폼
빅데이터플랫폼의필요성 Client UX Log HTTP Server WAS Biz Logic Data Legacy DW Report IoT Mobile Sensor Server Log External data Statistic Mart - 3-Tier 의웹기반서비스가가장보편화되어있음 ( 웹로그, 사용자클릭정보 ) - 고객정보를통한통계, 분석을위한 DW, BI, OLAP 등도입 - 비즈니스로직이 DBMS 영역으로이관되는경우 (Open API 가대표적 ) - Mobile( 스마트폰 ) 시장활황으로고객데이터가급격히증가 - 외부데이터와연동을통한고급 / 연계분석시도 - 센서, 사물인터넷등의데이터증가지속 -> 데이터베이스의확장또는새로운개념의 DB 필요
저장플랫폼 Client HTTP Server WAS Data DW Report MongoDB HDFS Hbase - 분산파일시스템 : 데이터를분산환경에분리하여저장 / 처리 / 요청할수있도록구성된파일시스템 - NoSQL : 구글의 BigTable 에기반한 Key/Value DB, Document DB 등 - 사용구분 : RDBMS NoSQL Hadoop HDFS 비즈니스데이타 ( 계좌, 고객등 ) 엄격한트랜잭션처리 (ACID) 다수의사용자에대해정합성과안정성보장 100% SQL Compliance 고비용 SNS, 블로그등의텍스트 Partial Consistency ->Delay 허용 유연성과효율성 특화된용도에맞게사용 RDBMS 와는보완관계 선택의폭이넓어짐 웹 / 센서로그등의 low density data Parallel Batch Processing 트랜잭션지원안함 데이터전처리및집계에적합 저비용 Copyright@2016 SK Holdings C&C Co.Ltd. All Rights Reserved.
수집 / 연동플랫폼 Client HTTP Server WAS Data DW Report External MongoDB HDFS Hbase Legacy - 수집 / 연동플랫폼 : 다양한다수의서버로부터데이터를수집하여다양한저장플랫폼에저장 - Flume : 설정및구성이비교적간단하여대표적인로그수집시스템으로이용, Fail-over, 유연성등대규모로그처리에적합한기능을가짐 - Sqoop : JDBC 기반으로다양한 DBMS 벤더와공동작업, 데이터처리하는 MR프로그램지원, Hive 와통합하여 SQL 기반환경으로편리하게이용가능, 안정적인성능보장 - Kafka : 대용량의실시간로그처리에특화된설계를통하여기존메시징시스템보다우수한 TPS - 기타데이터연동방법 : FTP, Fuse, webhdfs, Chukwa, HIHO 등 Copyright@2016 SK Holdings C&C Co.Ltd. All Rights Reserved.
배치처리 / 분석플랫폼 Client HTTP Server WAS Data DW Report Spark MLlib - 배치처리 / 분석플랫폼 : 초기의하둡기반플랫폼은배치처리에강점을가지고있었으나실시간 처리, 고급분석등의한계로인해관련에코시스템들이포함되고지속적인기능개선이일어남 - PIG, Hive : Hadoop 초기에 Mapreduce 의숙련시간을줄여비교적간단한기능을수행할수있도록 스크립트레벨의언어를제공, 초기활성화에기여함 - Mahout : MR 을이용해클러스터링, 분류, 분석작업등의병렬처리가능한기계학습라이브러리 - MLlib : Spark 를기반으로빌드된기계학습라이브러리 MR, PIG, Hive - SQL on Hadoop(Tajo, Impala,presto 등 ) : Hive 에단점을보완하기위한시도, hdfs 에저장된파일을 MR 이아닌별도의컴퓨팅플랫폼을이용하여질의실행 HDFS Mahout Tajo, Impala, Hive(Tez) Copyright@2016 SK Holdings C&C Co.Ltd. All Rights Reserved.
Hive 등장배경 기존시스템을전부.. MapReduce code 로전환한다면필요한시간은? 어떻게설계해야성능이나오지? 잦은수정이필요하다면? 한번만데이터뽑으면되는데 Big Data 기반 Platform 에서복잡한 MapReduce 프로그램을직접개발하지않고.. 기존 SQL 기반으로쉽게개발가능하다면..?!
Hive 란? HiveQL(SQL 과이슈 ) 를이용하여 MapReduce 를수행하도록도와주는오픈소스 Hadoop 에있는데이터에쉽게접근할수있으며데이터심화분석을위한사전분석작업이나리포팅작업으로많이사용됨 각종함수뿐만아니라복잡한분석을위한 UDF 지원
Hive 아키텍쳐
RDBMS 와 Hive 의차이점 - 쿼리응답속도가 ( 작은데이터기준 ) 느림 - 레코드단위 Insert, delete or update - 지원하지않음 - 게다가 Transaction 도지원하지않음 - 그래서 case문등을이용해서복잡하게구현해야함 ( 속도도더느림 ) - 통계정보도바로확인할수없음 - 인풋데이터의오류를바로확인할수없음
Schema On WRITE (RDBMS) - Create schema - CREATE TABLE customer(id string, name string,...); - Add data - BULK INSERT custormer FROM "c:\data\customer" WITH filedterminator='"," ; - Quer y - SELECT id, name FROM custormer;
Schema On WRITE (RDBMS) - Create schema - CREATE TABLE customer(id string, name string,...); - Add data - BULK INSERT custormer FROM "c:\data\customer" WITH filedterminator='"," ; - Quer y - SELECT id, name FROM custormer; - SQL에서는테이블스키마를선언하기전까지는데이터를넣을수없음 - 테이블스키마가변경되게되면테이블을 drop하고데이터를 reload시켜야함 - 작은데이터에서는문제없음 - 그러나, 수백 TB라면? 그리고 foreing key가변경되었다면?
Schema On READ (Hive) - Create schema - CREATE (EXTERNAL) TABLE customer(id string, name string,...) - LOAD THE DATA - hdfs dfs -copyfromlocal /data/ /user/hadoop/customer - Quer y - SELECT id, name FROM custormer
Schema On READ (Hive) - Create schema - CREATE (EXTERNAL) TABLE customer(id string, name string,...) - LOAD THE DATA - hdfs dfs -copyfromlocal /data/ /user/hadoop/customer - Quer y - SELECT id, name FROM custormer - SQL 에서는테이블스키마를선언하기전에도데이터를 hdfs 에넣을수있음 => RDBMS 대비부족한점이있어도 Hive 를써야하는이유 : 빅데이터는데이터사이즈가클 뿐만아니라비정형데이터도많기때문에데이터타입이나컬럼들이분석함에따라자주바뀜.
실시간처리 / 분석플랫폼 Client HTTP Server WAS Data DW Report Redis HDFS - 실시간처리 / 분석플랫폼 : 데이터종류에따라다양한형태의에코시스템을최적화조합하여데이터 수집, 처리, 전송이모두실시간으로이루어지도록구성 - Message Queue : 실시간으로수집된데이터를 Streaming 전송, 실시간처리를위한첫단추임. Kafka, Storm 등이 MQ 기능을포함하고있음. - Storm : 로컬및분산모드지원, Hadoop 프로세스를메모리상에서처리한다고생각하면간단함 - Spark Streaming : 실시간데이터를대규모, 고성능, 장애허용가능하게스트리밍을처리하는핵심 Spark API 의확장판 Storm Spark streaming - Redis : In-Memory Key-Value DB 라빠른속도가강점, 실시간처리에적합
관리 / 운영플랫폼 Client HTTP Server WAS Data DW Report MR, PIG, Hive Mahout HDFS Tajo, Impala, Hive(Tez) Oozie Zookeeper Ambari - 관리운영플랫폼 : 하둡에코시스템이갈수록복잡해짐에따라프로세스관리및클러스터관리의필요성이대두되면서관련된오픈소스프로젝트들이등장 - Ambari : 마법사기반설치지원, 하둡서비스와구성요소의세부구성, metrics 수집및시스템경고에대한 Nagios, Ganglia 포함, 상세 Job 진단및문제해결도구, 클러스터히트맵 - Oozie : MR, Pig, Hive 등을구현한프로세스들의Workflow 를디자인하고실행하게해줌. XML 형식으로프로세스를디자인하므로복잡한프로세스적용에어려움 - 디자인 UI 가필요함 - Zookeeper : 분산환경서버들간에상호조정이필요한다양한서비스를제공. 분산동시처리, 서버들간의동기화, fail-over 로무중단서비스, 서버들간환경설정관리기능등제공
Apache Ambari ( HDP )
Lambda Architecture
너무복잡한기술들 Lambda Architecture 너무많은오픈소스 관리하기어려움 더빠른속도가필요 Etc Window Function Machine Learning Analytics
Spark 란?
Spark 란? 대용량 Data Processing 을위한빠르고 General 한엔진 Hadoop MapReduce 와비슷한개념의새로운 Computing Framework Written in Scala, Java, Python (Mostly in Scala) Apache License 2.0 Developers: U.C Berkeley, AMPLab, ASF In-memory Cluster Computing 기능을제공 Apache 에서가장활발한 3 개프로젝트중하나 Spark 1.6.2 Version Released recently
설계목표 Low latency (interactive) queries on historical data 과거데이터들을빠르게처리해대화형질의가가능하도록함. Low Latency가가능해야데이터탐색 - 분석 탐색 분석의반복과정을통해제대로된데이터분석을할수있음 Low latency queries on live data(streaming) 실시간으로들어오는데이터를분석할수있어야함. 스파크는실시간스트리밍처리 분석도가능하도록설계하였음.
설계목표 Sophisticated data processing 복잡한분석도가능해야함. Anomaly detection, Trend analysis 등복잡한분석도가능해야좀더나은의사결정을할수있다고생각했음. 머하웃 (Mahout) 이나 R과같은프로젝트의목표와비슷하나반복처리, 병렬처리에훨씬강력함.
Unified Platform
Fast
Fast
Simple
지원언어 스파크는상당부분이스칼라 (Scala) 라는객체지향성격과함수형성격을모두가지는언어로프로그래밍되어있음. 스칼라만지원하는것은아니라기본적으로스칼라와더불어자바, 파이썬을지원함. 자바는가장범용적인언어중하나이고맵리듀스와같이많은오픈소스들이자바를기반으로프로그램을만들수있도록하고있음. 또한파이썬은최근간결성과다양한기능으로사용자가많아지고있음
지원언어 스파크에서 3 가지언어를대부분지원하지만, 모든기능을 3 가지언어에대해동일하게지원하지는않음. 버전마다다르지만 Spark SQL 과의연계, 스트리밍, MLlib 의각종 Matrix 는스칼라를우선지원 또한셀환경은스칼라와파이썬만지원한다. 가급적이면스칼라를권장하고자바나파이썬을사용할경우, 사용하려는기능을제공하는지미리확인해야해야함
빅데이터에코시스템과호환 Spark의뛰어난전략 하둡 하둡 2.0 완벽한호환 HDFS 및하둡에코시스템 (Hbase, Casandra, Hive 등 ) 과의호환 Yarn과의호환 ETC Amazon EC2 R RDBMS Tableau
How Fast? RDDs (Resilient Distributed Datasets) 클러스터전체에서공유되는데이터형태로대부분메모리에올라가있음 병렬로처리될수있는 Immutable (read-only), partitioned 된 elements 의집합 데이터를수정할수있게되면데이터유실시복구가어려움. 대신새로운메모리를확보하여새로운값할당. Update 무시 Cache
Fault Tolerance? RDDs (Resilient Distributed Datasets) Fault Tolerance Lineage 를이용한데이터복구 Need not exist in physical storage RDDs 는메모리에분산임시저장하기때문에데이터처리시디스크를사용하지않음. 그러나, 데이터복구시매우안정적인저장공간으로부터 (ex> HDFS) 데이터를복원하기시작함. Laziness : 모든작업은여러작업을설정해두고마지막 Operation 함수수행시계산
Spark 데이터흐름
Spark SQL Introduction 과거의 Shark (SQL on Spark) 는개발중단하고 SparkSQL로프로젝트가생성되었음 Spark 프로그램과 SQL 쿼리를혼합하여 Seamless 하게사용가능 Hive 테이블, Parquet 파일, JSON 파일과같은여러소스에서 Data Access 가능 기존의 Hive frontend 와 Metastore 를재사용하여기존의 Hive 데이터, 쿼리, UDFs 을그대로사용가능 JDBC 혹은 ODBC를통해서버모드를포함하여기존 BI Tool 과의연동도가능 DataFrame API(1.4), DataSet API(1.6)
Iterative operations on MapReduce
Interactive operations on MapReduce
Iterative operations on Spark RDD
Iterative operations on Spark RDD
스파크 Streaming
Spark Streaming
Flume 다양한소스에서발생한대량의로그데이터를중앙데이터스토어. 효과적으로수집집계 (aggregating) 하거나이동시킬수있는신뢰할수있는분산시스템. 스트림지향의데이터플로우를기반으로하며지정된모든서버로부터로그를수집. 하둡 HDFS 와같은중앙저장소에적재하여분석하는시스템을구축해야할때적합. 데이터소스를커스터마이징할수있기때문에로그데이터수집에제한되지않음. 소셜미디어데이터, 이메일메세지등다량의이벤트데이터를전송하는데에사용할수있음.
Kafka LinkedIn에서개발된대용량실시간처리를위한고성능분산메시징시스템 큰기업이갖고있을모든실시간데이터피드들을처리하는통합플랫폼 실시간로그집계와같은높은볼륨의이벤트피드들을위한높은처리량을갖아야함 오프라인시스템으로부터주기적인데이터로딩을지원하기위해, 많은데이터백로그들을처리할수있어야함 구식메시징 use-case들을처리하기위해서, low-latency 전송을처리할수있어야함 새로운피드나유래된피드들을생성하기위해분할, 분산, 실시간처리을지원함 다른시스템으로스트림을전송할때에, 장비장애의 fault-tolerance 보장
Spark Streaming Overview Scalable, High-throughput, Fault-tolerant stream processing 을가능하게함. Kafka, Flume, Twitter, TCP sockets 등여러가지소스를사용할수있음. Map, Reduce, Join, Window 같은 High Level 기능들을사용하여 Processing 할수있음. Process 된 Data 는 File system, Database 등에저장될수있음.
How does it work? 실시간으로들어오는 data stream 은 batch 단위로나뉘어지고나뉘어진 batch 단위의 data 는 Spark 엔진에의해서 processing 된뒤에최종 final stream 이생성됨. Spark streaming 은 Discretized stream 혹은 Dstream 이라고하는 High-level abstraction 을제공한다. DStream 은여러 input 소스에서부터생성될수있음. DStream 은연속적인 RDD라고볼수있음. DStream 내 RDD는일정한인터벌시간내존재하는 Data 가들어있음.
Spark Streaming 예제 Line을 split 을통해 words 로바꿈. val words = lines.flatmap(_.split( )) Wordcount 를 DStream 의 API 인 map과 reduce 를통해서수행. val paris = words.map(word => (word, 1)) val wrodcounts = pairs.reducebykey(_ + _)
Window Operations Windowed computation 기능을제공하는데이것은 sliding window 내의데이터를 transform 하기위해서임. Window-based operation을수행하기위해서는 2개의파라미터가필요. Window length window 사이즈 Slide interval window-based operation 이수행되는인터벌
Fault-tolerance and Zero Data Loss
Improvements to Kafka integration
Visualizations for Understanding Spark Streaming Applications
Combine batch
Combine machine learning
Combine SQL
고급분석
Tungsten execution engine Spark 성능 bottleneck 은? I/O 나 network bandwidth? 실제로 CPU 와 memory 에서더욱 bottleneck 발생! 하드웨어의 CPU, Memory 등에서도최대한뽑을수있는새로운아키텍쳐가필요 Project Tungsten Memory Management and Binary Processing Cache-aware computation Code generation: using code generation to exploit modern compilers and CPUs DataFrame(1.4), Dataset(1.6)
DataFrame 기술적인개선으로보이지만분석을위한개선!
Spark 2.0 Performance optimizations Custom encoders Python Support. Unification of DataFrames with Datasets Static DataFrames -> Countinous DataFrames
MLlib, SparkML 보편적인 Machine Learning 알고리즘과유틸리티를 Spark 로구현한프로젝트 Goal is to make practical machine learning scalable and easy. 2 가지패키지 spark.mllib contains the original API built on top of RDDs. spark.ml : provides higher level API built on top of DataFrames for constructing ML pipelines. 제공내용 Classification and regression Collaborative filtering Clustering Dimensionality reduction Optimization
Zeppelin
Zeppelin 출처 : Craig Lukasik
R 분산처리방법 데이터베이스연결 RHadoop SparkR Spark 1.4 버전부터정식으로포함된패키지
R 의한계및필요기능 기본적으로 R 은단일쓰레드를사용하여싱글코어, 싱글머신에서작동함 하드웨어에따라처리할수있는데이터크기가한정되어있음 ( 주로 Ram 크기 ) DW 등큰데이터에바로접근해야할경우가있음
R 분산처리방법 유료 Revolution R Enterprise + AzureR 가장 R 표준에가까움 Azure 의클라우드컴퓨팅을활용할수있음 Oracle R Enterprise R 의명령어를그대로사용하면서오라클의데이터에접속할수있음 R 언어의함수는오라클내부에서병렬실행이되도록질의로변환됨 IBM Netezza, SAP HANA 등..
R 분산처리방법 Parallel 패키지 내장된멀티코어패키지 멀티쓰레드지원과메모리를해결할수있음 Snow 패키지 내장된분산처리패키지 설정이복잡하다는단점이있음
R 분산처리방법 데이터베이스연결 RHadoop SparkR Spark 1.4 버전부터정식으로포함된패키지
Auto scaling scikit-learn with Spark
Deep Learning using Spark
학습방법 Databricks Blog Spark 를만든사람들이창업한회사 (Databricks) Spark 글들의좋은내용들이다수올라옴 발표자료그림의상당수출처는 Databricks Blog Spark Summit 대부분의발표자료와동영상공유 책 이미과거버전이라자세한기술보다는기본익히기는좋음 Learning Spark, Advanced Analytics with Spark 등
Q&A