'IT Book'에 해당되는 글 8건
(Chapter 1) 08. Who, What :: 2015/01/30 18:30
Who use Spark, and for What?
누가 사용하고 어디에 사용하는가?
Spark는 cluster computing을 위한 범용 framework이기 때문에 폭 넓은 application에 사용할 수 있다. Preface에서 이 책의 독자로 Data Scientist, Engineer의 두 부류를 제시했다. 각 부류를 좀 더 면밀하게 살펴보고 그들이 어떻게 Spark를 사용하는지 알아보자. 두 부류가 사용하는 case를 간단하게 정리하자면 Data Science, Data Application으로 분류할 수 있다.
Data Science Task
Data Science는 지난 몇 년 동안 데이터 분석의 중심부에 위치해 왔다. 하지만, 표준화된 정의가 없기 때문에 여기서는 데이터를 분석하고 모델링하는 작업을 주로 하는 사람들을 Data Scientist라고 한다. Data Scientist는 SQL, 통계, 미래 예측 모델링 (machine learning), 일반적으로 Python, Matlab, R과 같은 약간의 프로그래밍을 경험한 사람들이다. Data Scientist는 때때로 Data wrangling이라고 부르는 분석할 수 있는 이해 가능한 데이터로 형식을 변환하는 기술에 대해서도 어느 정도 경험이 있는 사람들이다.
Data Scientist는 어떤 질문에 대한 답을 구하기 위해서, 통찰력을 발견하기 위해서 데이터를 분석하는데 스킬을 사용한다. 종종 특별한 분석을 위해서, 때때로 interactive shell을 사용하여 query의 결과나, 최소한의 시간으로 구현한 코드의 결과를 본다.
Spark의 속도와 simple API는 이러한 목적에 빛을 발한다. 그리고 built-in 라이브러리를 통해서 다양한 알고리즘을 적용할 수 있다. 때로 최초로 사용할 때, Data Scientist의 작업이 제품화이거나 확장, 어려운 작업이거나 data processing application을 튜닝하는 작업일 수 있다. Data Scientist의 초기 연구가 상품 추천 시스템 생성을 이끄는 것일 수도 있다.
Data Processing Applications
Spark를 사용하는 또 다른 경우는 Engineer 관점에서 사용하는 것일 수 있다. 이 경우 Data Processing Application을 만들기 위해 Spark를 사용하는 많은 분야의 소프트웨어 개발자를 생각해 볼 수 있다. 이런 개발자들은 software engineering에 대한 원리를 이해하고 있다. 캡슐화, 인터페이스 설계, OOP 에 대해서 알고 있을 것이다. 컴퓨터 공학을 전공하고, 소프트웨어 시스템 설계하고 빌드할 수 있는 능력이 있는 사람들이다.
Engineer를 위해서 Spark는 Cluster상에서 application을 병렬화하는 간단한 방법을 제공한다. 분산 프로그래밍에 대한 복잡한 면을 감추고, 네트워크 통신이나 fault tolerance에 대해서도 신경 쓸 필요가 없다. 모니터링과 검사, application 튜닝을 쉽게 할 수 있고, common task를 빠르게 구현할 수 있다. API의 모듈화된 특성에 따라 재사용 가능한 라이브러리로 로컬에서 테스트도 쉽게 할 수 있다.
Spark의 사용자들은 굉장히 다양한 기능들을 제공하기 때문에 data processing application을 위해서 쉽게 배우고 사용할 수 있다.
Spark History
Hadoop 기반 MapReduce가 interative computing job에 비효율적이라는 것을 알고, UC 버클리 RAD lab => AMLLab에서 연구 시작. 처음에는 interactive query, iterative algorithms를 빨리 실행하고 in-memory storage와 효율적인 fault recovery를 지원하자는 아이디어에서 출발함.
처음에는 MapReduce보다 10-20배 빠른 성능을 보임. 그 이후, machine learning 연구자들이 샌프란시스코 만의 교통 상황을 모니터링하고 예측하기 위해 Spark을 사용하기 시작함. 지금은 굉장히 빠른 시간 내에 사용하는 조직이 늘었음.
2011년도에 AMLLab 연구자들이 Shark(Hive on Spark), Spark Streaming을 개발하기 시작함.
(Chapter 1) 07. Cluster Manager :: 2015/01/30 15:57
Cluster Managers
Spark는 하나의 node에서 수천 개의 compute node로 효율적으로 성능을 높일 수 있도록 설계되었다.
Flexibility를 극대화하기 위하여 Spark는 Hadoop YARN, Apache Mesos, Standalone Scheduler로 불리는 Spark 자체의 간단한 cluster manager 등과 같은 각양각색의 cluster manager를 실행할 수 있다.
Spark를 맨 처음 설치했을 때는, Standalone Scheduler가 쉽게 시작하는 방법을 제공한다. 반대로 이미 YARN이나 Mesos Cluster가 설치되어 있다면, Spark는 이미 설치되어 있는 환경 상에서 application을 실행할 수 있도록 지원한다.
(Chapter 1) 06. GraphX :: 2015/01/30 15:56
GraphX
GraphX는 Spark 0.9에 추가된 graph를 다루는 라이브러리이다. 병렬 그래프 분석을 처리한다. Spark Streaming과 Spark SQL과 같이 GraphX도 RDD API를 확장하여 임의의 properties를 각 vertex and edge (꼭지점과 선)에 추가할 수 있다.
GraphX는 일반적인 그래프 알고리즘 (PageRank or Triangle Counting)을 포함하여 graph를 다루는 operation을 지원한다.
(Chapter 1) 05. MLlib :: 2015/01/30 15:55
MLlib
Spark는 MLlib라고 불리는 common machine learning (ML) 기능의 라이브러리를 제공한다. MLlib는 다양한 타입의 machine learning 알고리즘을 제공한다. (binary classification, regression, clustering, collaborative filtering, model evaluation, data import)
또한 generic gradient descent optimization algorithm과 같은 lower level ML primitive도 제공한다. 이 모든 method들은 cluster상에서 scale out 할 수 있도록 설계 되었다.
(Chapter 1) 04. Spark Streaming :: 2015/01/30 15:54
Spark Streaming
Spark Streaming은 live stream data 처리를 위한 Spark component이다. 예를 들어 live stream data는 웹 서버에 의해 만들어지는 log file이나 웹 서비스의 사용자에 의해 post되는 상태 업데이트 정보를 담고 있는 message queue를 의미한다.
Spark Streaming은 Spark Core의 RDD API와 밀접하게 매칭되는 data stream을 다룰 수 있는 API를 제공한다. 프로그래머는 API를 통해 메모리나 디스크에 저장된 데이터나 실시간 데이터를 다루는 프로젝트나 application을 쉽게 개발할 수 있다.
Spark Streaming은 Spark Core에서 제공하는 fault tolerance, throughput, scalability와 동일한 수준으로 제공하도록 설계되어 있다.