관리 메뉴

IT & Life

Apache Spark ? 거대한 데이터 분석 플랫폼! 본문

프로그래밍/Spark

Apache Spark ? 거대한 데이터 분석 플랫폼!

미운앙마 2017. 11. 14. 02:16

 

Apache Spark이란 무엇입니까? 거대한 데이터 분석 플랫폼이 설명했습니다.

 


빠르고 유연하며 개발자 친화적 인 Apache Spark는 대규모 SQL, 일괄 처리, 스트림 처리 및 기계 학습을위한 최고의 플랫폼입니다.

 

2009 년 UC Berkeley의 AMPLab에서 처음 시작된 Apache Spark 는 세계에서 가장 중요한 데이터 분산 처리 프레임 워크 중 하나가되었습니다. Spark은 다양한 방법으로 배포 할 수 있으며 Java, Scala, Python 및 R 프로그래밍 언어에 대한 고유 바인딩을 제공하며 SQL, 스트리밍 데이터, 기계 학습 및 그래프 처리를 지원합니다. 은행, 통신 회사, 게임 회사, 정부 및 Apple, Facebook, IBM 및 Microsoft와 같은 모든 주요 기술 대기업에서 사용하는 것을 찾을 수 있습니다.

 

기본적으로 Spark는 클러스터의 각 시스템에 Apache Spark 프레임 워크와 JVM이 필요한 독립형 클러스터 모드에서 실행할 수 있습니다. 그러나 리소스 또는 클러스터 관리 시스템을 활용하여 필요에 따라 인력을 할당 할 수 있습니다. 기업에서는 일반적으로 Hadoop YARN ( Cloudera 및 Hortonworks 배포판에서 Spark 작업을 실행 하는 방법 )을 실행하지만 Apache Spark는 Apache Mesos 에서도 실행될 수 있지만 Kubernetes에 대한 기본 지원을 추가 하는 작업이 진행 중 입니다.

 

관리 솔루션을 사용한 경우 Apache Spark는 Amazon EMR , Google Cloud Dataproc 및 Microsoft Azure HDInsight의 일부로 사용할 수 있습니다 . Databricks은 , 아파치 불꽃의 창시자을 고용 회사는 또한 제공합니다 분석 플랫폼 통합 Databricks 아파치 점화 클러스터, 스트리밍 지원, 통합 된 웹 기반 노트북 개발을 제공하는 종합 관리 서비스, 최적화 된 클라우드 I 이상 / O 성능이다, 표준 Apache Spark 배포판.

 

 

스파크 대 하둡

 

Apache Spark와 Apache Hadoop 은 약간의 잘못된 이름입니다. 요즘 대부분의 Hadoop 배포판에는 Spark가 포함되어 있습니다. 그러나 두 가지 큰 장점으로 인해 Spark는 Hadoop을 눈에 띄게 만드는 예전의 MapReduce 패러다임을 추월하면서 큰 데이터를 처리 할 때 선택의 틀이되었습니다.

첫 번째 이점은 속도입니다. Spark의 메모리 내 데이터 엔진은 특정 상황에서 MapReduce보다 최대 100 배 빠른 작업을 수행 할 수 있음을 의미합니다. 특히 스테이지간에 디스크에 상태를 기록해야하는 다단계 작업과 비교할 때 더욱 그렇습니다. 데이터가 메모리 내에 완전히 포함될 수없는 Apache Spark 작업조차도 MapReduce 카운터보다 약 10 배 더 빠른 경향이 있습니다.

 

두 번째 이점은 개발자 친화적 인 Spark API입니다. Spark의 속도 향상만큼이나 중요한 점은 Spark API의 친숙 함이 더욱 중요하다는 것입니다.

 

 

스파크 코어

 

MapReduce 및 다른 Apache Hadoop 구성 요소와 비교할 때 Apache Spark API는 개발자에게 매우 친숙하므로 간단한 메소드 호출을 통해 분산 처리 엔진의 복잡성을 상당 부분 감추고 있습니다. 이 표준적인 예는 문서에서 단어를 셀 수있는 약 50 줄의 MapReduce 코드가 몇 줄의 Apache Spark (여기에 스칼라로 표시)로 축소 될 수있는 방법입니다.

 

 

val textFile = sparkSession . sparkContext . textFile ( " hdfs : /// tmp / words")
val counts = textFile . flatMap ( 줄 => 줄 . 분할 ( " ")) . 지도 ( 단어 => ( 단어 , 1 )) . reduceByKey ( _ + _ ) 는 카운트합니다 .

saveAsTextFile ( " hdfs : /// tmp / words_agg") 
                        
                     
Apache Spark은 Python 및 R과 같은 데이터 분석을위한 대중적인 언어와 엔터프라이즈 친화적 인 Java 및 Scala와의 바인딩을 제공함으로써 응용 프로그램 개발자에서 데이터 과학자까지 모든 사람들이 확장 성 및 액세스 속도를 향상시킬 수 있습니다.

 

 

스파크 RDD

 

Apache Spark의 핵심은 컴퓨팅 클러스터에서 분리 될 수있는 개체의 불변 인 컬렉션을 나타내는 프로그래밍 추상화 인 Resilient Distributed Dataset ( RSI ) 의 개념입니다 . RDD에 대한 작업은 클러스터에서 분할되어 병렬 배치 프로세스에서 실행될 수 있으므로 빠르고 확장 가능한 병렬 처리가 가능합니다.

 

RDD는 간단한 텍스트 파일, SQL 데이터베이스, NoSQL 상점 (예 : Cassandra 및 MongoDB), Amazon S3 버킷 등으로 만들 수 있습니다. Spark Core API의 대부분은이 RDD 개념을 기반으로 구축되어 기존의 맵핑 및 기능 축소는 물론 데이터 세트 조인, 필터링, 샘플링 및 집계에 대한 내장 지원을 제공합니다.

 

Spark는 Spark 애플리케이션을 작업으로 분할 하는 드라이버 코어 프로세스를 결합하여 분산 된 방식으로 실행 하고 작업을 수행하는 많은 실행 프로세스 간에 분산시킵니다 . 이러한 executor는 응용 프로그램의 필요에 따라 필요에 따라 확장 및 축소 할 수 있습니다.

 

 

스파크 SQL

 

원래 Shark라고 알려진 Spark SQL 은 Apache Spark 프로젝트에서 점점 더 중요 해지고 있습니다. 응용 프로그램을 만들 때 오늘날의 개발자가 가장 일반적으로 사용하는 인터페이스입니다. Spark SQL은 R 및 Python에서 빌린 데이터 프레임 접근 방식 (Pandas)을 사용하여 구조화 된 데이터 처리에 중점을 둡니다. 그러나 이름에서 알 수 있듯이 Spark SQL은 데이터를 쿼리하기위한 SQL2003 호환 인터페이스를 제공하여 Apache Spark의 강력한 기능을 분석가와 개발자에게 제공합니다.

 

표준 SQL 지원 외에도 Spark SQL은 JSON, HDFS, Apache Hive, JDBC, Apache ORC 및 Apache Parquet을 비롯한 다른 데이터 저장소에서 읽고 쓸 수있는 표준 인터페이스를 제공합니다.이 인터페이스는 모두 기본적으로 지원됩니다. Apache Cassandra, MongoDB, Apache HBase 및 다른 많은 인기 점포는 Spark Packages 생태계 에서 별도의 커넥터를 가져 와서 사용할 수 있습니다 .

 

데이터 프레임에서 일부 열을 선택하는 것은 다음과 같이 간단합니다.

 

 

citiesDF . 선택 ( " 이름 ", " 팝업 ")

 

SQL 인터페이스를 사용하여 데이터 프레임을 임시 테이블로 등록한 다음 SQL 프레임에 대해 SQL 쿼리를 발행 할 수 있습니다.

 

citiesDF . createOrReplaceTempView ( " cities ")
스파크 . sql ( " 이름 선택 , pop FROM cities ")

 

Apache Spark는 클러스터 내에서 필요한 계산을 수행 할 데이터 지역 및 계산을위한 효율적인 쿼리 계획을 생성하기 위해 데이터 및 쿼리를 검사하는 Catalyst 라고하는 쿼리 최적화 프로그램을 사용 합니다. Apache Spark 2.x 시대에서 데이터 프레임과 데이터 세트 (본질적으로 컴파일 타임에 정확성을 검사하고 추가 메모리 및 런타임 최적화를 활용할 수있는 유형이 지정된 데이터 프레임)의 Spark SQL 인터페이스는 개발을위한 권장 접근 방식입니다 . RDD 인터페이스는 여전히 사용할 수 있지만 Spark SQL 패러다임 내에 캡슐화 할 수없는 요구 사항이있는 경우에만 권장됩니다.

 

 

Spark MLlib

 

Apache Spark는 기계 학습 및 그래프 분석 기술을 대규모 데이터에 적용하기 위해 라이브러리도 번들로 제공합니다. Spark MLlib 에는 기계 학습 파이프 라인을 생성하기위한 프레임 워크가 포함되어있어 구조화 된 데이터 세트에서 피쳐 추출, 선택 및 변형을 쉽게 구현할 수 있습니다. MLLib에는 사용자 지정 파이프 라인을 쉽게 스왑하거나 스왑 할 수있는 k-means 클러스터링 및 임의의 포리스트와 같은 클러스터링 및 분류 알고리즘의 분산 된 구현이 함께 제공됩니다. 모델은 R 또는 Python을 사용하는 Apache Spark의 데이터 과학자가 교육하고 MLLib를 사용하여 저장 한 다음 프로덕션 용도로 Java 기반 또는 Scala 기반 파이프 라인으로 가져올 수 있습니다.

 

Spark MLlib는 분류, 회귀, 클러스터링 및 필터링을 포함한 기본 기계 학습을 다루지 만 심층 신경 네트워크 모델링 및 교육을위한 기능은 포함되지 않습니다 (자세한 내용 은 InfoWorld의 Spark MLlib 리뷰 참조 ). 그러나 Deep Learning Pipelines 가 작동합니다.

 

 

스파크 GraphX

 

Spark GraphX 에는 Google의 PageRank 구현을 비롯한 그래프 구조 처리를위한 분산 알고리즘이 제공됩니다 . 이러한 알고리즘은 데이터 모델링에 Spark Core의 RDD 방식을 사용합니다. GraphFrames의 패키지는 그래프 쿼리의 촉매 최적화를 활용 포함한 dataframes에 그래프 작업을 수행 할 수 있습니다.

 

 

스파크 스트리밍

 

Spark Streaming 은 Apache Spark에 초기에 추가 된 기능으로 실시간 또는 거의 실시간 처리가 필요한 환경에서 견인력을 얻었습니다. 이전에는 Apache Hadoop의 세계에서 일괄 처리 및 스트림 처리가 별개의 작업이었습니다. 일괄 처리 요구에 MapReduce 코드를 작성하고 실시간 스트리밍 요구 사항에 Apache Storm 과 같은 것을 사용할 수 있습니다. 이로 인해 완전히 다른 프레임 워크를 기반으로하고 다른 리소스가 필요하며이를 실행하기위한 운영상의 다른 관심사가 관련되어 있음에도 불구하고 응용 프로그램 도메인에 대해 동기화 상태를 유지해야하는 이질적인 코드베이스가 발생합니다.

 

Spark Streaming은 Apache Spark API를 사용하여 조작 할 수있는 일련의 마이크로 배치로 스트림을 분할함으로써 배치 처리의 Apache Spark 개념을 스트리밍으로 확장했습니다. 이런 식으로 배치 및 스트리밍 작업의 코드는 동일한 프레임 워크에서 실행되는 (대부분) 동일한 코드를 공유 할 수 있으므로 개발자와 운영자의 오버 헤드를 모두 줄일 수 있습니다. 모두가 이긴다.

Spark Streaming 접근법에 대한 비판은 들어오는 데이터에 대한 대기 시간이 짧은 응답이 필요한 시나리오에서, Apache Storm, Apache Flink 및 Apache Apex 와 같은 다른 스트리밍 가능 프레임 워크의 성능을 일치시키지 못할 수도있는 microbatching입니다 . 이들 모두는 마이크로 배치보다는 순수 스트리밍 방법을 사용합니다.

 

 

스트럭처 스트리밍

 

Structured Streaming (Spark 2.x에 추가됨)은 스파크 코어 API에 대한 스파크 스트리밍을 스트리밍하는 것입니다. 높은 수준의 API와 쓰기 어플리케이션을위한보다 쉬운 추상화입니다. 구조 스트리밍의 경우 상위 수준 API를 사용하면 기본적으로 개발자가 무한 스트리밍 데이터 프레임 및 데이터 집합을 만들 수 있습니다. 또한 이전 프레임 워크에서 사용자가 고민했던 몇 가지 매우 심각한 문제점을 해결합니다. 특히 이벤트 시간 집계 처리 및 메시지 전달 지연과 관련하여 특히 그렇습니다. 구조화 된 스트림에 대한 모든 쿼리는 Catalyst 쿼리 최적화 프로그램을 거치며 대화 형 방식으로 실행되어 사용자가 실시간 스트리밍 데이터에 대해 SQL 쿼리를 수행 할 수도 있습니다.

 

Structured Streaming은 여전히 ​​Apache Spark의 다소 새로운 부분으로, Spark 2.2 릴리스에서 제작 준비가 완료되었음을 표시합니다. 그러나 스트럭처 스트리밍은 플랫폼을 사용하는 스트리밍 응용 프로그램의 미래이므로 새로운 스트리밍 응용 프로그램을 만들려면 구조적 스트리밍을 사용해야합니다. 기존 Spark Streaming API는 계속 지원 될 예정이지만,이 방법을 사용하면 스트리밍 코드 작성 및 유지 관리가 훨씬 용이 해 지므로 Structured Streaming으로 포팅하는 것이 좋습니다.

 

 

Apache Spark의 다음 단계는 무엇입니까?

 

Structured Streaming은 Spark Streaming에 대한 고급 기능을 제공하지만 현재는 스트리밍 데이터를 처리하는 것과 동일한 마이크로 배치 방식을 사용합니다. 그러나 Apache Spark 팀은 플랫폼에 microbatching을하지 않고 지속적인 스트리밍을 제공하기 위해 노력하고 있습니다. 대기 지연이 적은 응답을 처리 할 때 많은 문제가 해결되어야합니다 (매우 인상적 일 것입니다 ~ 1ms라고 주장합니다). Structured Streaming은 Spark SQL 엔진 위에 구축되었으므로이 새로운 스트리밍 기술을 이용하면 코드를 변경할 필요가 없습니다.

 

또한 스트리밍 성능을 향상시키는 Apache Spark는 Deep Learning Pipelines 를 통한 심층 학습 지원을 추가 할 예정 입니다. MLlib의 기존 파이프 라인 구조를 사용하면 몇 줄의 코드로 분류자를 구성 할 수있을뿐 아니라 들어오는 데이터에 맞춤 Tensorflow 그래프 또는 Keras 모델을 적용 할 수 있습니다. 이러한 그래프와 모델은 커스텀 Spark SQL UDF (사용자 정의 함수)로 등록 될 수 있으므로 심층 학습 모델을 SQL 문의 일부로 데이터에 적용 할 수 있습니다.

 

이 기능들 중 어느 것도 현재 거의 생산 준비가되어 있지 않습니다. 그러나 과거 아파치 스파크에서 보았던 빠른 발전 속도를 감안할 때, 2018 년에 프라임 타임을 준비해야합니다.

 

 

 

해외 원문 : https://www.infoworld.com/article/3236869/analytics/what-is-apache-spark-the-big-data-analytics-platform-explained.html

Comments