아파치 스파크

아파치 스파크 는 클러스터화된 컴퓨터군에서 빅데이터 작업을 병렬로 처리하기 위한 오픈 소스 프레임워크로, 전 세계에서 가장 널리 사용되는 분산 처리 프레임워크 중 하나입니다.

아파치 스파크 3에 대해 자세히 알아보려면 여기에서 무료 eBook을 다운로드 하세요.

 

아파치 스파크란?

데이터의 엄청난 증가와 함께 아파치 스파크는 온프레미스 및 클라우드의 수백만 대 서버에서 실행되는 분산 스케일아웃 데이터 처리에 가장 널리 사용되는 프레임워크 중 하나가 되었습니다.

아파치 스파크는 대규모 데이터 처리를 위한 빠른 범용 분석 엔진으로, YARN, 아파치 메소스, 쿠버네티스에서 실행되거나 독립형 모드 또는 클라우드 기반일 수 있습니다. SQL, 스트림 처리, 머신 러닝, 그래프 처리를 위한 고수준 연산자와 라이브러리를 갖춘 스파크는 인터랙티브 셸, 노트북 또는 패키지 애플리케이션을 사용하여 Scala, 파이썬, R 또는 SQL로 병렬 애플리케이션을 쉽게 구축할 수 있도록 지원합니다. 스파크는 함수형 프로그래밍 모델과 관련 쿼리 엔진인 Catalyst를 사용하여 배치 및 인터랙티브 분석을 지원합니다. Catalyst는 잡(job)을 쿼리 실행 계획으로 변환하고 클러스터의 노드에 쿼리 실행 계획 내 연산을 스케줄링합니다.

스파크 코어 데이터 처리 엔진 위에는 SQL 및 데이터프레임(DataFrame), 머신 러닝, GraphX, 그래프 연산 및 스트림 처리를 위한 라이브러리가 있습니다. 이러한 라이브러리는 HDFS, Alluxio, Apache Cassandra, Apache HBase, Apache Hive 등과 같은 다양한 데이터 소스의 대규모 데이터 세트에 함께 사용할 수 있습니다.

Apache Spark libraries

아파치 스파크 구성 요소

아파치 스파크를 사용하는 이유는?

아파치 스파크는 15년여 전에 Apache Hadoop이 시작한 빅데이터 분석 노력을 이어받아 대규모 분산 데이터 처리를 위한 최고의 프레임워크로 자리 잡았습니다.

2010년대 초 빅데이터 분석의 인기와 함께 Hadoop 사용이 증가하면서 Hadoop MapReduce의 성능 한계는 핸디캡으로 작용했습니다. 디스크에 결과를 체크포인팅하는 모델로 인해 병목 현상이 발생했기 때문입니다. 동시에 MapReduce의 저수준 프로그래밍 모델은 Hadoop 채택에 장애가 되었습니다.

아파치 스파크는 확장성과 내결함성을 제공하는 MapReduce 분산 처리 프레임워크의 이점을 유지하면서 더 효율적이고 사용하기 쉽게 만드는 것을 목표로 UC Berkeley의 AMPLab에서 연구 프로젝트로 시작되었습니다. 스파크는 프로세스를 시작하고 중지하는 대신 경량 멀티 스레드 작업을 재사용하기 때문에 데이터 파이프라인과 반복 알고리즘에 MapReduce보다 더 효율적입니다. 또한 여러 이터레이션에 걸쳐 데이터를 메모리에 캐싱하므로 스테이지 사이에 디스크에 쓸 필요가 없습니다. 스파크는 내결함성 분산 데이터프레임을 사용하여 병렬 성능을 강화하고 SQL과 함께 쉽게 사용할 수 있습니다.

Apache Spark

스파크는 2014년에 Apache Software Foundation 의 최상위 프로젝트가 되었으며, 오늘날 16,000개 곳이 넘는 기업과 조직에서 데이터 엔지니어 및 사이언티스트 수십만 명이 스파크를 사용하고 있습니다. 스파크가 Hadoop의 바통을 이어받을 수 있었던 이유 중 하나는 인메모리 데이터 처리를 통해 일부 작업을 MapReduce보다 최대 100배 더 빠르게 완료할 수 있기 때문입니다. 250개 이상의 기업에서 1,000명 이상의 기여자가 개방형 커뮤니티를 통해 이러한 기능을 개발했습니다. Databricks 창립자들이 시작한 이래로 이 플랫폼에서만 하루에 100만 대 이상의 가상 머신이 데이터 분석을 위해 가동되고 있습니다.

GPU 사용 시 스파크가 더 나은 이유

더 쉽게 프로그래밍 및 실행 가속화를 실현할 수 있도록 스파크는 새 버전이 릴리스될 때마다 성능이 개선됩니다. 아파치 스파크 3.0은 Spark SQL 성능과 NVIDIA GPU 가속화를 개선하는 혁신 기술로 이러한 추세를 이어가고 있습니다.

Data processing requirements over time.

그래픽 처리 장치(GPU)는 플롭(성능)당 가격이 매우 저렴하여 인기가 높으며, 병렬 처리를 위한 멀티 코어 서버의 속도를 높여 오늘날의 컴퓨팅 성능 병목 현상을 해결하고 있습니다. CPU는 순차 직렬 처리에 최적화된 소수의 코어로 구성됩니다. 반면 GPU의 대규모 병렬 아키텍처는 여러 작업을 동시에 처리하도록 설계된 수천 개의 더 작고 더 효율적인 코어로 구성되어 있습니다. CPU만 포함한 구성보다 훨씬 더 빠르게 데이터를 처리할 수 있습니다. GPU는 지난 몇 년간 딥 러닝(DL)과 머신 러닝(ML) 모델 훈련에 혁신을 불러일으켰습니다. 그러나 데이터 사이언티스트 시간의 80%는 여전히 데이터 전처리에 사용되고 있습니다.

스파크는 파티션의 형태로 노드에 연산을 분산하지만, 파티션 내 연산은 전통적으로 CPU 코어에서 수행되었습니다. 스파크는 인메모리 데이터 처리를 추가하여 Hadoop에서 발생하는 I/O 문제를 완화했지만, 이제 병목 발생 지점은 I/O에서 그 수가 점점 더 늘어나는 애플리케이션을 위한 연산으로 바뀌었습니다. 이러한 성능 병목 현상은 GPU 가속 연산의 도입으로 방지할 수 있습니다.

데이터 처리의 최신 요구 사항을 충족하고 더 나아가 그 이상을 제공하기 위해 NVIDIA는 아파치 스파크 커뮤니티와 협력하여 스파크 3.0과 스파크용 NVIDIA RAPIDS™ Accelerator를 출시하고 스파크의 네이티브 처리에 GPU를 도입했습니다. 스파크에 GPU 가속화 도입 시 얻을 수 있는 이점은 다음과 같습니다.

  • 데이터 처리, 쿼리, 모델 훈련이 더 빠르게 완료되므로 생성 시간이 단축됩니다.
  • 동일한 GPU 가속 인프라를 스파크와 ML/DL 프레임워크 둘 다에 사용할 수 있으므로 별도의 클러스터가 필요하지 않고 전체 파이프라인을 GPU로 가속화할 수 있습니다.
  • 필요한 서버 수가 줄어 인프라 비용이 절감됩니다.

아파치 스파크용 RAPIDS Accelerator

RAPIDS는 엔드투엔드 데이터 사이언스 및 분석 파이프라인을 전적으로 GPU에서 실행할 수 있도록 지원하는 오픈 소스 소프트웨어 라이브러리 및 API 모음으로, 특히 대규모 데이터 세트에서 속도를 크게 높일 수 있습니다. NVIDIA® CUDA®와 UCX를 기반으로 구축된 아파치 스파크용 RAPIDS Accelerator를 사용하면 코드를 변경하지 않고 GPU 가속 SQL/데이터프레임 연산 및 스파크 셔플을 실행할 수 있습니다.

Apache Spark accelerated end-to-end AI platform stack.아파치 스파크는 엔드투엔드 AI 플랫폼 스택을 가속화합니다.

SQL/데이터프레임 가속화

스파크 3.0은 행이 아닌 열 기반 배치를 사용하여 데이터를 처리할 수 있도록 SQL 최적화 플러그인을 지원합니다. 컬럼형 데이터는 GPU 친화적이며, 이 기능은 RAPIDS 액셀러레이터가 SQL 및 데이터프레임 연산자를 가속화하기 위해 사용하는 기능입니다. RAPIDS 액셀러레이터와 더불어 Catalyst 쿼리 최적화 도구는 RAPIDS API로 가속화할 수 있는 쿼리 실행 계획 내 연산자를 식별(주로 일대일 매핑)하고 쿼리 실행 계획의 실행 시 스파크 클러스터 내 GPU에 이러한 연산자들을 스케줄링하도록 수정되었습니다.

셔플 가속화

값을 기준으로 데이터를 정렬, 그룹화 또는 조인하는 스파크 연산은 스테이지 사이에서 기존 데이터프레임으로부터 새 데이터프레임을 생성할 때 파티션 간에 데이터를 이동해야 합니다. 이 프로세스를 셔플이라고 하며 여기에는 디스크 I/O, 데이터 직렬화 및 네트워크 I/O가 수반됩니다. 새로운 RAPIDS Accelerator 셔플 구현은 UCX를 사용하여 GPU 데이터 전송을 최적화하고 GPU에 최대한 많은 데이터를 유지합니다. 또한 사용 가능한 최상의 하드웨어 리소스를 활용하여 데이터가 가장 빨리 이동할 수 있는 노드 간 경로를 찾습니다. 여기에는 CPU를 우회하여 GPU 메모리 간 전송으로 노드 내 및 노드 간 전송을 수행하기 것이 포함됩니다.

가속기 인식 스케줄링

스파크에서 딥 러닝과 데이터 처리를 더 잘 통합하기 위한 주요 스파크 이니셔티브의 일환으로, GPU는 이제 아파치 스파크 3.0에서 스케줄링 가능한 리소스가 되었습니다. 즉, 스파크는 지정된 수의 GPU를 갖춘 실행자를 스케줄링할 수 있습니다. 사용자가 각 작업에 필요한 GPU 수를 지정할 수 있습니다. 스파크는 이러한 리소스 요청을 기저 클러스터 매니저인 쿠버네티스, YARN 또는 Standalone에 전달합니다. 또한 사용자는 검색 스크립트를 구성하여 클러스터 매니저가 어떤 GPU를 할당했는지 감지할 수 있습니다. 덕분에 GPU가 필요한 ML 애플리케이션을 간단히 실행할 수 있게 되었습니다. 이전에는 사용자가 스파크 애플리케이션에서 GPU 스케줄링의 부재를 해결해야 했습니다.

XGBoost 가속화

XGBoost 는 확장 가능한 분산형 그래디언트 부스팅 결정 트리(GBDT) ML 라이브러리입니다. 회귀, 분류, 순위 지정 문제를 위한 최고의 머신 러닝 라이브러리로, 병렬 트리 부스팅을 제공합니다. RAPIDS 팀은 Distributed Machine Learning Common(DMLC) XGBoost 조직과 긴밀하게 협력하고 있으며 이제 XGBoost에는 원활한 드롭인 GPU 가속화가 포함됩니다. 이와 더불어 이제는 스파크 3.0 XGBoost가 Rapids Accelerator와 통합되어 스파크 SQL/데이터프레임 연산의 GPU 가속화, XGBoost 훈련 시간의 GPU 가속화, 인메모리 최적 저장 기능을 통한 효율적인 GPU 메모리 활용으로 성능, 정확도, 비용을 개선합니다.

Spark 3.0 pipeline.

이제 스파크 3.0에서 데이터 수집부터 데이터 준비, GPU 기반 클러스터에서의 모델 훈련에 이르는 단일 파이프라인을 구축할 수 있습니다.

NVIDIA GPU 가속 엔드투엔드 데이터 사이언스

RAPIDS는 PyData, 아파치 스파크와 같이 널리 사용되는 분석 에코시스템을 기반으로 하고 이러한 에코시스템과 통합되어 데이터 사이언스 가속화의 복잡성을 추상화하므로 사용자가 바로 혜택을 누릴 수 있습니다. 유사한 CPU 기반 구현에 비해 RAPIDS 는 대규모 클래식 데이터 분석 및 머신 러닝(ML) 프로세스에서 50배 향상된 성능을 제공하여 대규모 데이터 사이언스 작업을 위한 총 소유 비용(TCO)을 크게 낮춥니다.

Example Spark Use Cases

Fraud detection

Spark’s speed makes it a good choice for scenarios in which rapid decision-making is required involving multiple data sources. For example, one of the ways financial institutions detect credit card fraud is by analyzing the volume and location of transactions occurring on a single account. If the number of transactions is beyond the capacity of an individual, or if multiple transactions take place in various locations that are improbably distant from each other, then it’s an indication that an account has been compromised.

Banks can use Apache Spark to create a unified view of an account holder based upon usage patterns. Machine learning can be applied to detect patterns that fall outside of norms based upon previously observed patterns. This can also enable the institution to better customize offers to the needs of individual customers.

Healthcare

Adverse drug interactions are the fourth leading cause of death in the U.S., ahead of pulmonary disease, diabetes and pneumonia. Determining how multiple medications will interact to cause negative consequences for the patient is an exponentially complex problem that becomes more difficult each year as new medications are introduced.

Using Spark, data scientists can create algorithms that scan millions of case records and look for mentions of drug types. Combinations of certain medications can be correlated with outcomes and weighted by factors such as pre-existing conditions and medical history. The results can then be applied to the health records of individual patients to alert doctors and pharmacists to the likelihood of an adverse reaction before a prescription is written or filled.

스파크를 사용한 엔드투엔드 머신 러닝 가속화의 실제 사례

Adobe

NVIDIA와의 전략적 AI 파트너십을 바탕으로 Adobe는 Databricks에서 실행되는 스파크 3.0의 프리뷰 릴리스를 사용한 최초의 기업 중 한 곳입니다. NVIDIA GTC 컨퍼런스에서 Adobe Intelligent Services는 마케팅 메시지 전달을 최적화하기 위해 사용 중인 GPU 기반 스파크 3.0 및 XGBoost 지능형 이메일 솔루션의 평가 결과를 공개했습니다. 초기 테스트에서 Adobe는 성능을 7배 개선하고 비용을 90% 절감했습니다. 스파크 3.0의 성능 향상 덕분에 과학자가 더 큰 데이터 세트로 모델을 훈련하고 모델을 더 자주 반복 훈련할 수 있어 모델 정확도가 개선됩니다. 이를 통해 매일 테라바이트 규모의 새로운 데이터를 처리할 수 있습니다. 온라인 추천 시스템을 지원하거나 새로운 연구 데이터를 분석하는 데이터 사이언티스트에게 매우 중요한 기능입니다. 또한 처리 속도가 빨라진다는 것은 결과를 제공하는 데 필요한 하드웨어 리소스가 줄어 비용을 크게 절감할 수 있다는 의미입니다. 이러한 발전에 대해 물었을 때, Adobe의 머신 러닝 선임 디렉터인 William Yan은 "스파크를 CPU에서 실행했을 때에 비해 NVIDIA 가속 스파크 3.0을 사용할 때 성능이 훨씬 더 빨라진 것으로 나타났습니다. 이러한 혁신적인 GPU 성능 향상 덕분에 Adobe Experience Cloud 앱 전체 제품군에서 AI 기반 기능을 강화할 수 있는 완전히 새로운 가능성이 열리고 있습니다.”라고 답했습니다.

Verizon media

Verizon Media는 수천만 가입자를 대상으로 고객 이탈을 예측하기 위해 GPU 기반 클러스터에 XGBoost 모델 훈련 및 하이퍼파라미터 튜닝을 위한 분산 스파크 ML 파이프라인을 구축했습니다. Verizon Media는 CPU 기반 XGBoost 솔루션을 사용할 때에 비해 3배의 성능 향상을 달성했으며, 모델 최적화 및 정확도 극대화를 위해 최상의 하이퍼파라미터를 찾는 하이퍼파라미터 검색 기능을 개선했습니다.

Uber

Uber는 자율주행 연구부터 주행 예측과 사기 방지에 이르는 비즈니스 전반에 딥 러닝을 적용하고 있습니다. Uber는 GPU와 데이터 병렬 방식의 분산 훈련을 통해 딥 러닝 프로젝트를 보다 쉽게 가속화할 수 있도록 텐서플로, 케라스, 파이토치, Apache MXNet을 위한 분산 딥 러닝 훈련 프레임워크인 Horovod를 개발했습니다. 스파크와의 통합과 사용 편의성을 개선하기 위해 Horovod는 이제 GPU 스케줄링을 갖춘 스파크 3.0 그리고 스파크 ML 파이프라인을 통해 스파크 추정자를 사용하는 새로운 KerasEstimator 클래스를 지원합니다. 이를 통해 분산 훈련을 위한 특수 코드 없이도 수백 개의 GPU로 병렬 확장될 수 있는 Horovod의 기능을 활용하여 스파크 데이터프레임에서 텐서플로와 파이토치 모델을 직접 훈련할 수 있습니다. 아파치 스파크 3.0의 새로운 가속기 인식 스케줄링 및 열 처리 API를 통해 프로덕션 ETL 작업은 동일한 파이프라인 내에서 GPU에서 분산형 딥 러닝 훈련을 실행하는 Horovod에 데이터를 넘겨줄 수 있습니다.

아파치 스파크가 중요한 이유…

Spark 3.0은 분석과 AI를 위해 협업하는 데이터 과학자와 데이터 엔지니어에게 주요한 이정표 역할을 합니다. 이제 ML과 DL 애플리케이션이 동일한 GPU 인프라를 활용하면서 ETL 작업이 가속화되기 때문입니다.

데이터 사이언스 팀

데이터를 사용 가능한 형태로 변환하는 데 필요한 수많은 비생산적 작업은 데이터 사이언스의 마법을 무력화합니다. 이러한 프로세스의 대부분은 수백만 또는 수십억 개의 레코드에서 우편번호, 날짜, SKU 번호와 같은 비정형 데이터를 분류하고 정렬하는 작업입니다. 데이터 세트가 클수록 프로세스를 완료하는 데 더 오랜 시간이 걸립니다. 일부 추정에 따르면 데이터 사이언티스트는 데이터 준비에 작업 시간의 80%를 소비할 수 있다고 합니다.

Hadoop은 대규모 데이터 분석을 지원하는 혁신적인 기술로, 데이터 사이언티스트는 이를 통해 대규모 데이터 세트에 쿼리를 실행할 수 있었습니다. 그러나 처리에 종종 오랜 시간이 소요됐습니다. 특히 정렬 및 데이터 검색에서와 같이 기존 데이터 세트에 반복 스캔을 실행해야 하는 경우에 그러했습니다.

스파크는 대규모 데이터 세트에 대한 반복 쿼리를 위해 특별히 설계되었습니다. Hadoop/MapReduce보다 최대 100배 더 빠른 속도로 데이터 사이언티스트 사이에서 즉각적으로 인기를 끌었습니다. 또한 스파크는 파이썬, R, Scala와 같은 데이터 사이언스 지향 개발 언어를 쉽게 수용할 수 있었습니다. 대부분의 데이터 사이언티스트는 단일 프로그래밍 도구로 작업하는 것을 선호하기 때문에 스파크는 개개인의 필요를 쉽게 충족할 수 있었습니다.

또한 스파크 SQL은 정형 및 반정형 데이터를 모두 지원하고 다양한 언어로 조작할 수 있는 데이터프레임이라는 데이터 추상화 개념을 도입했습니다. 덕분에 익숙한 SQL 언어를 이전에는 불가능했던 방식으로 비정형 데이터에 적용할 수 있습니다. 스파크 ML은 ML 파이프라인 또는 워크플로 구축을 위해 데이터프레임을 기반으로 구축된 통합 고수준 API 세트를 제공합니다. 따라서 분할된 데이터의 처리를 확장할 수 있을 뿐만 아니라 데이터 조작에 SQL을 쉽게 사용할 수 있습니다.

데이터 엔지니어링 팀

데이터 엔지니어들은 데이터 사이언티스트와 개발자 사이에서 가교 역할을 합니다. 데이터 사이언티스트는 문제 해결에 적합한 데이터 유형과 알고리즘을 선택하는 반면, 데이터 엔지니어는 데이터 사이언티스트 및 개발자와 협력하여 데이터 추출 변환, 저장, 분석 등을 위한 데이터 파이프라인 생성과 관련된 모든 작업을 처리하고 빅데이터 분석 애플리케이션을 구축합니다.

스파크는 스토리지와 관련된 복잡성을 간소화합니다. 이 프레임워크는 Hadoop 분산 파일 시스템을 비롯한 거의 모든 기저 스토리지와 함께 작동할 수 있기 때문에 Hadoop보다 유연성이 더 뛰어나고 클라우드 및 온프레미스 인프라의 조합에 더 잘 부합할 수 있습니다. 또한 스파크는 스트리밍 데이터 소스를 쉽게 통합할 수 있어 차세대 사물 인터넷 애플리케이션에 적합한 엔진입니다.