이전

리뷰 (1)

한줄평
평점 분포
  • 리뷰 총점10 100%
  • 리뷰 총점8 0%
  • 리뷰 총점6 0%
  • 리뷰 총점4 0%
  • 리뷰 총점2 0%
연령대별 평균 점수
  • 10대 0.0
  • 20대 0.0
  • 30대 0.0
  • 40대 10.0
  • 50대 0.0
리뷰 총점 종이책
[서평] 러닝 스파크 개정판
"[서평] 러닝 스파크 개정판" 내용보기
네이버 블로그 리뷰: https://blog.naver.com/rock1192/222795751324   이 책은 방대한 양의 데이터를 처리하는 애플리케이션을 확장하기 위해 스파크를 사용하는 전문가를 대상으로 한다   스파크의 정형화된 API를 사용하여 배치 및 스트리밍 모두에서 복잡한 데이터 탐색 및 분석을 수행하는 방법을 배우고, 대화형 쿼리에 스파크 SQL을 사용하며, 스파크의 내장 및 외부 데이터
"[서평] 러닝 스파크 개정판" 내용보기

네이버 블로그 리뷰: https://blog.naver.com/rock1192/222795751324

 

이 책은 방대한 양의 데이터를 처리하는 애플리케이션을 확장하기 위해 스파크를 사용하는 전문가를 대상으로 한다

 

스파크의 정형화된 API를 사용하여 배치 및 스트리밍 모두에서 복잡한 데이터 탐색 및 분석을 수행하는 방법을 배우고, 대화형 쿼리에 스파크 SQL을 사용하며, 스파크의 내장 및 외부 데이터 소스를 사용하여 추출, 변환 및 로드(extract, transform, and load, ETL) 하는 작업의 일부로 서로 다른 파일 형식으로 데이터를 일고, 다듬고, 쓸 수 있다

또한 스파크 및 오픈소스 델타 레이크(Delta Lake) 테이블 형식으로 신뢰할 수 있는 데이터 레이크를 구축할 수 있다

 

데이터 과학자와 머신러닝 엔지니어를 위해 스파크의 MLlib 라이브러리는 분산 머신러닝 모델을 구축하기 위해 많은 공통 알고리즘을 제공한다

MLlib을 사용하여 파이프라인 구축하는 방법분산 머신러닝을 위한 모범 사례스파크를 사용하여 단일 노드 모델을 확장하는 방법오픈소스 라이브러리 ML 플로우를 사용하여 이러한 모델을 관리 및 배포하는 방법을 다룬다

 

이 책은 다양한 워크로드를 위한 분석 엔진으로서 스파크를 배우는 데 중점을 두고 있지만 스파크가 지원하는 모든 언어를 다루지는 않는다

이 장의 대부분의 예제는 스칼라, 파이썬 및 SQL로 작성되었고, 필요한 경우 약간의 자바를 추가하였다

 

마지막으로 스파크는 분산 엔진이기 때문에 스파크 애플리케이션 개념을 이해하는 것이 중요하다

스파크 애플리케이션이 스파크의 분산 구성요소와 어떻게 상호작용하는지, 그리고 그 실행이 클러스터에서 병렬 작업으로 어떻게 나뉘어지는지를 안내할 것이다

또한 어떤 배포 모드가 어떤 환경에서 지원되는지도 다룬다

 

다루기로 선택한 많은 주제가 있지만, 집중하지 않기로 결정한 몇 가지 주제도 있다

여기에는 구형의 저수준 RDD(Resilient Distributed Dataset) API와 그래프 및 그래프 병렬 계산을 위한 스파크의 API인 GraphX가 포함된다

또한 스파크의 카탈리스트 옵티마이저를 확장하여 고유한 작업을 구현하는 방법고유한 카탈로그를 구현하는 방법 또는 고유한 DataSource V2 데이터 싱크 및 소스를 작성하는 방법과 같은 고급 주제도 다루지 않았다

이것들은 스파크의 일부이지만, 스파크 학습에 대한 입문서의 범위를 벗어난다

 

이를 대신해서 모든 구성 요소에 걸쳐 스파크의 정형화된 API와 스파크를 사용하여 구조화된 대규모 데이터를 처리하여 데이터 엔지니어링 또는 데이터 과학 작업을 수행하는 방법을 중심으로 책을 구성하였다

 

예제 코드

https://github.com/databricks/LearningSparkV2

 

사용된 소프트 웨어 및 구성

https://spark.apache.org/downloads.html

  • 아파치 스파크 3.0(아파치 하둡 2.7용으로 사전 구축됨)

  • JDK 1.8.0

 

 

 

 

1장에서는 아파치 스파크의 발전 과정을 살펴본다

아파치 스파크가 어떻게 생겨났고, 어떤 것으로 부터 영감을 받았는지, 그리고 어떻게 커뮤니티에서 실질적인 업계 표준인 빅데이터 통합 처리 엔진으로 채택되었는지 그 과정을 살펴본다

 

 

RDBMS 같은 전통적인 저장 시스템뿐만 아니라 어떤 프로그래밍 수단으로도 구글이 색인을 만들고 검색할 규모의 인터넷 문서를 다루는 것은 불가능 했다

새로운 접근 방식이 필요하여 필연적으로 구글 파일 시스템(Google File System, GFS)맵리듀스(MapReduce, MR)빅테이블(BigTable) 등을 만들어 내게 되었다

GFS가 클러스터 안에서 상용 서버에 장애 내구성이 있는 분산 파일 시스템을 제공한다면, 빅테이블은 GFS를 기반으로 구조화된 대규모 데이터의 저장 수단을 제공했다

맵리듀스는 함수형 프로그래밍 개념을 기반으로 하여 GFS와 빅테이블 위에서 대규모 데이터 분산 처리가 가능한 새로운 병렬 프로그래밍 패러다임을 소개했다

 

HDFS에서 돌아가는 맵리듀스 프레임워크에는 몇 가지 단점이 있었다

 

첫째, 번거로운 운영 복잡도로 인해 관리가 쉽지 않았다

둘째, 일반적인 배치 처리를 위한 맵리듀스 API는 장황하고 많은 양의 기본 셋업 코드를 필요로 했으며, 장애 대응은 불안정 했다

셋째, 방대한 배치 데이터 작업을 수행하면서 많은 MR 태스크가 필요해지면 각 태스크는 이후의 단계들을 위해 중간 과정의 데이터를 로컬 디스크에 써야 했다

이런 디스크 I/O의 반복적인 수행은 큰 타격이었으며, 거대한 MR을 처리하는 데 수 시간은 고사하고 수일까지 걸리는 경우도 있었다

마지막으로, 하둡 MR은 일반적인 배치 처리를 위한 대규모 작업에는 적당하지만 머신러닝이나 스트리밍, 상호 반응하는 SQL 계통의 질의 등 다른 워크로드와 연계해 쓰기에는 한계가 있다

 

 

아파치 스파크는 데이터 센터나 클라우드에서 대규모 분산 데이터 처리를 하기 위해 설계된 통합형 엔진이다

 

스파크는 중간 연산을 위해 메모리 저장소를 지원하여 하둡 맵리듀스보다 훨씬 빠르게 동작할 수 있다

스파크는 머신러닝(MLlib), 대화형 질의를 위한 SQL(스파크 SQL), 실시간 데이터 처리를 위한 스트리밍 처리(스파크 스트리밍), 그래프 처리(GraphX) 등을 위해 쉽게 사용 가능한 API들로 이루어진 라이브러리를 갖고 있다

 

스파크 설계 철학의 중심에는 네 개의 핵심 특성이 있다

  • 속도

  • 사용 편리성

  • 모듈성

  • 확장성

 

 

통합이라는 개념이 스파크에서만 특별한 것은 아니지만, 통합은 스파크에 있어서 설계 철학과 진화를 나타내는 핵심 개념이다

2016년 11월 ACM(Association for Computing Machinery)은 아파치 스파크를 인정하고 아파치 스파크 '빅데이터 처리를 위한 통합 엔진'이라고 설명한 논문 <Apache Spark: A Unified Engine For Big Data Processing>에 대해 원저자들에게 그 유명한 ACM 어워드를 수여하였다

수상 논문은 하나의 단일 분산 처리 엔진 위에서 다양한 워크로드를 처리할 수 있는 통합된 컴포넌트 스택으로 스파크가 스톰(Storm), 임팔라(Impala), 드레멜(Dremel), 프레겔(Pregel) 등 모든 개별적 배치 처리(batch processing), 그래프, 스트리밍, 질의 엔진 등을 대체할 수 있다는 점에 주목했다

 

 

스파크 프로그래밍을 살펴보기 전에 어떻게 스파크의 분산 아키텍처 위에서 모든 컴포넌트들이 같이 동작하면서 서로 통신하는지, 어떤식으로 배포가 가능한지 등을 알아둘 필요가 있다

개별 컴포넌트들을 보고 아키텍처에 어떻게 맞춰지는지 살펴보자

스파크 아키텍처를 넓은 범위에서 보면 하나의 스파크 애플리케이션은 스파크 클러스터의 병렬작업들을 조율하는 하나의 드라이버 프로그램으로 이루어진다

드라이버는 SparkSession 객체를 통해 클러스터의 분산 컴포넌트들(스파크 이그제큐터(executor)와 클러스터 매니저)에 접근한다

 

 

스파크의 매력적인 특징은 스파크가 여러 다른 환경에서 다른 설정으로 돌아갈 수 있도록 다양한 배포 모드를 지원한다는 것이다

클러스터 매니저는 어디서 실행되는지에 대한 자세한 정보 없이도(스파크의 이그제큐터를 관리 가능하고 자원 요청이 잘 수행되는 환경이라면) 돌아갈 수 있도록 추상화되어 있기 때문에 스파크는 아파치 하둡 얀이나 쿠버네티스 같은 대부분의 인기 있는 환경에 배포 가능하며 서로 다른 모드들에서 동작한다

모드

스파크 드라이버

스파크 이그제큐터

클러스터 매니저

로컬

랩톱이나 단일 서버 같은 머신에서 단일 JVM 위에서 실행

드라이버와 동일한 JVM 위에서 동작

동일한 호스트에서 실행

단독

클러스터의 아무 노드에서나 실행 가능

클러스터의 각 노드가 자체적인 이그제큐터 JVM을 실행

클러스터의 아무 호스트에나 할당 가능

얀(클라이언트)

클러스터 외부의 클라이언트에서 동작

얀의 노드 매니저의 컨테이너

얀의 리소스 매니저가 얀의 애플리케이션 마스터와 연계하여 노드 매니저에 이그제큐터를 위한 컨테이너들을 할당

얀(클러스터)

얀 애플리케이션 마스터에서 동작

얀(클러스터) 모드와 동일

얀(클러스터) 모드와 동일

쿠버네티스

쿠버네티스 팟(pod)에서 동작

각 워커가 자신의 팟 내에서 실행

쿠버네티스 마스터

개발자의 경험

개발자가 겪는 모든 기쁨 중 가장 매력적인 것 중의 하나는 생산성을 늘려 주고, 사용하기 쉽거나 이해하기 쉬운, 잘 구성된 API 집합이다

아파치 스파크의 원칙 중 하나는 데이터의 규모에 상관없이 스칼라, 자바, 파이썬, SQL, R 등 여러 언어에 걸쳐 사용하기 쉬운 API를 개발자에게 어필하는 것이다

스파크 2.x 이후로 주된 하나의 동기는 개발자가 익히느라 고생해야 하는 개념들의 개수를 줄여서 프레임워크를 일원화-단순화하는 것이었다

스파크는 2.x는 고수준 추상화 API들을 도메인 전용 언어로 구축하여 새롭게 소개해서 스파크를 더욱 표현력이 풍부하게 만들고 훌륭한 개발자 경험을 하게 해주었다

사용자는 연산을 어떻게 할지가 아니라 원하는 업무만을 표현하고, 스파크가 어떻게 최선의 결과를 낼 수 있는지 알게 해 주면 된다

스파크는 누가 사용하고 왜 사용하는가

그다지 놀랄 일은 아니지만, 빅데이터와 씨름하는 대부분의 개발자들은 데이터 엔지니어, 데이터 과학자, 머신러닝 엔지니어들이다

이들은 친숙한 프로그래밍 언어로 단일 엔진에서 다양한 애플리케이션을 구축해 돌릴 수 있기 때문에 스파크에 이끌린다

물론 개발자들은 동시에 다양한 역할을 수행할 수도 있으므로 때로는, 특히 스타트업이나 소규모 엔지니어 그룹이라면 동시에 과학자의 업무와 엔지니어의 업무를 같이 해야 할 경우도 있다

하지만 이 모든 업무들 안에서도 기반이 되는 것은 데이터(특히 대량의 데이터)다

 

 

인기 있는 스파크 사용 사례들

  • 클러스터 전체에 걸쳐 분산된 대규모 데이터세트의 병렬 처리

  • 데이터 탐색이나 시각화를 위한 일회성이나 대화형 질의 수행

  • MLlib를 이용해 머신러닝 모델을 구축, 훈련, 평가하기

  • 다양한 데이터 스트림으로부터 끝에서 끝까지 데이터 파이프라인 구현

  • 그래프 데이터세트와 소셜 네트워크(social network)분석

 

 

이 장에서는 스파크 셋업과 간단한 세 단계를 거쳐 첫 단독 애플리케이션을 작성할 수 있게 될 것이다

우리느 스파크 셸에서 모든 처리가 하나의 머신에서 이루어지는 로컬 모드를 사용할 것이다

이는 프레임워크를 익히면서 반복적인 스파크 수행이 가능하여 빠른 피드백을 얻을 수 있다

스파크 셸을 사용하여 실제의 복잡한 스파크 애플리케이션을 작성하기 전에, 소규모 데이터로 스파크 작업을 실험해볼 수 있지만 분산 처리의 이득을 보기 원하는 큰 데이터나 실무 작업에는 로컬 모드는 적당하지 않다

대신 YARN이나 쿠버네티스 배포 모드를 써야 할 것이다

스파크 셸은 스칼라, 파이썬, R만 지원하지만 스파크 애플리케이션은 자바를 포함해 지원하는 언어 어느 것으로나 작성 가능하고 쿼리는 스파크 SQL로 실행할 수 있다

 

 

앞에서 언급했던 것 처럼 대화형 셸로 동작하며 광범위하게 사용되는 pyspark, spark-shell, spark-sql, sparkR의 네 가지 인터프리터들이 포함되어 있어서 일회성 데이터 분석이 가능하다

파이썬, 스칼라, R, SQL이나 bash 같은 유닉스 셸을 써 봤다면 여러 가지 면에서 위의 대화형 셸들이 그것들을 모방한 덕에 익숙해 보일 것이다

이 셸들은 클러스터에 연결하고 분산 데이터를 스파크 워커 노드의 메모리에 로드할 수 있도록 확장 되어 왔다

기가바이트급 데이터를 다루든 작은 데이터세트를 다루든 스파크 셸은 스파크를 빨리 배우는 데에 적절하다

 

 

앞 장에서 얘기했듯이 스파크 연산들은 작업으로 표현된다

작업들은 태스크라고 불리는 저수준 RDD 바이트 코드로 변환되며 실행을 위해 스파크의 이그제큐터들에 분산된다

데이터 프레임을 써서 텍스트 파일을 읽고, 읽은 문자열을 보여주고 파일의 줄 수를 세는 짧은 예제를 보자

데이터 프레임의 show(10, false) 연산은 문자열을 자르지 않고 첫 번째 열 줄만 보여주게 된다

기본적으로 truncate 플래그는 true이다

 

 

실행해본 예제 코드 하부에서 무슨 일이 일어나는지 이해하기 위해서는 우선 스파크 애플리케이션의 핵심 개념들과 코드가 어떻게 스파크 실행기에서 태스크로 변환되고 실행되는지에 익숙해질 필요가 있다

애플리케이션

API를 써서 스파크 위에서 돌아가는 사용자 프로그램, 드라이버 프로그램과 클러스터의 실행기로 이루어진다

SparkSession

스파크 코어 기능들과 상호 작용할 수 있는 진입점을 제공하며 그 API로 프로그래밍을 할 수 있게 해주는 객체이다

스파크 셸에서 스파크 드라이버는 기본적으로 SparkSession을 제공하지만 스파크 애플리케이션에서는 사용자가 SparkSession 객체를 생성해서 써야 한다

잡(job)

스파크 액션 (예: save(), collect())에 대한 응답으로 생성되는 여러 태스크(task)로 이루어진 병렬 연산

스테이지(stage)

각 잡은 스테이지라 불리는 서로 의존성을 가지는 다수의 태스크 모음으로 나뉜다

태스크(task)

스파크 이그제큐터로 보내지는 작업 실행의 가장 기본적이 단위

 

 

분산 데이터의 스파크 연산은 트랜스포메이션(transformation)액션(action)으로 구분된다

트랜스 포메이션은 이미 불변성의 특징을 가진 원본 데이터를 수정하지 않고 하나의 스파크 데이터 프레임을 새로운 데이터 프레임으로 그 이름처럼 변형(transform)한다

다시 말해 select()filter() 같은 연산은 원본 데이터 프레임을 수정하지 않으며, 대신 새로운 데이터 프레임으로 연산 결과를 만들어 되돌려 준다

모든 트랜스 포메이션은 뒤늦게 평가된다

다시 말해 그 결과는 즉시 계산되는 게 아니라 계보(lineage)라 불리는 형태로 기록된다

기록된 리니지는 실행 계획에서 후반쯤에 스파크가 확실한 트랜스포메이션들끼리 재배열하거나 합치거나 해서 더 효율적으로 실행할 수 있도록 최적화하도록 한다

지연 평가액션이 실행되는 시점이나 데이터에 실제 접근하는 시점(디스크에서 읽거나 쓰는 시점)까지 실제 실행을 미루는 스파크의 전략이다

 

 

스파크는 그래픽 유저 인터페이스(graphical user interface, GUI)를 써서 스파크 애플리케이션을 살펴볼 수 있게 해주며 다양한 레벨(잡, 스테이지, 태스크 레벨)에서 확인 가능하다

스파크가 배포된 방식에 맞춰 드라이버가 웹 UI를 띄우게 되며 기본적으로 4040 포트를 사용하는데 여기서 다음과 같은 다양한 수치와 내용을 볼 수 있다

  • 스케쥴러의 스테이지와 태스크 목록

  • RDD 크기와 메모리 사용의 요약

  • 환경 정보

  • 실행 중인 이그제큐터 정보

  • 모든 스파크 SQL 쿼리

로컬 모드에서는 웹 브라우저를 써서 http://localhost:4040 혹은 머신의 주소를 통해 이 인터페이스에 접근할 수 있다

 

 

데이터브릭스 커뮤니티 에디션

데이터브릭스는 관리형 아파치 스파크 플랫폼을 클라우드에서 제공하는 회사이다

로컬 머신에서 로컬 모드로 실행하는 것 말고 이 책의 많은 예제들을 데이터브릭스 커뮤니티 에디션을 써서 실행해볼 수 있다

아파치 스파크를 배우는 도구로서 커뮤니티 에디션은 살펴볼 만한 많은 예제와 가이드를 갖고 있다

파이썬, R, 스칼라, SQL에서 자신만의 노트북을 쓸 수도 있고, 다른 주피터 같은 노트북을 읽어 들일 수도 있다

https://databricks.com/try

 

계정 가입을 위해서 위의 사이트로 가서 무료 사용 안내를 따라하면 된다

한번 등록되면 깃허브 저장소(https://github.com/databricks/LearningSparkV2)에서 이 책의 노트북을 읽어 들일 수 있다

 

 

스파크의 교과서로 유명한 책의 최신 개정판으로 이 책으로 스파크의 기본적인 내용을 공부하고 예제 실습을 통해 기초적인 사용법과 기본적인 활용법을 익힐 수 있다

대용량의 데이터를 가공하고 분석하고 머신러닝에 활용하고자 하는 엔지니어라면 필수적으로 익혀야되는 현존하는 최고의 통합형 엔진이 아닌가 한다

이제는 데이터의 양이 워낙 방대해 대규모 분산 데이터 처리는 선택이 아닌 필수인 시대이다

러닝 스파크 책을 통해 스파크 엔진의 사용법을 익히고 대규모 분산 데이터 처리에 스파크 엔진을 활용해보는 것을 고려해보는 것이 좋을 것 같다

r******1 2022.07.01. 신고 공감 0 댓글 0