아파치 스파크
Apache Spark![]() | |
원저작자 | 마테이 자하리아 |
---|---|
개발자 | 아파치 스파크 |
초기 릴리즈 | 2014년 5월 , 전( |
안정된 릴리스 | 3.3.0 (Scala 2.13) / 2022년 6월 16일; 전 ( |
저장소 | 스파크 저장소 |
기입처 | 스칼라[1] |
운영 체제 | Microsoft Windows, macOS, Linux |
이용가능기간: | Scala, Java, SQL, Python, R, C#, F# |
유형 | 데이터 분석, 머신 러닝 알고리즘 |
면허증. | Apache 라이센스 2.0 |
웹 사이트 | spark |
Apache Spark는 대규모 데이터 처리를 위한 오픈 소스 통합 분석 엔진입니다.Spark는 암시적 데이터 병렬 처리 및 내결함성을 가진 클러스터를 프로그래밍하기 위한 인터페이스를 제공합니다.원래 버클리 대학 엠프리브에서 개발된 스파크 코드베이스는 나중에 아파치 소프트웨어 재단에 기증되어 그 이후 계속 유지되고 있다.
개요
Apache Spark는 시스템 클러스터에 분산된 데이터 항목의 읽기 전용 멀티셋인 RDD(Resilient Distributed Dataset)에 아키텍처 기반을 두고 있으며, 이 멀티셋은 내결함성 [2]방식으로 유지됩니다.Dataframe API는 RDD 위에 추상화 형태로 출시되었으며, Dataset API가 그 뒤를 이었다.Spark 1.x에서는 RDD가 주요 API였지만 Spark 2.x에서는 RDD API가 [4][5]권장되지 않더라도 Dataset API를 사용하는 것이 좋습니다[3].RDD 기술은 여전히 Dataset [6][7]API의 기반이 됩니다.
Spark와 Spark의 RDD는 MapReduce 클러스터 컴퓨팅 패러다임의 제약에 따라 2012년에 개발되었습니다.MapReduce 프로그램은 디스크에서 입력 데이터를 읽고 데이터에 함수를 매핑하며 맵 결과를 줄이고 디스크에 결과를 저장합니다.Spark의 RDD는 (의도적으로)[8] 제한된 형태의 분산 공유 메모리를 제공하는 분산 프로그램의 작업 세트 역할을 합니다.
Apache Spark 내에서는 워크플로우가 DAG(Directed Acyclic Graph)로 관리됩니다.노드는 RDD를 나타내고 엣지는 RDD의 동작을 나타냅니다.
Spark는 반복 알고리즘의 구현(루프 내에서 여러 번 데이터 세트를 방문)과 대화형/탐색형 데이터 분석(데이터베이스 스타일의 반복 쿼리)을 모두 지원합니다.이러한 애플리케이션의 지연 시간은 Apache Hadoop MapReduce [2][9]구현에 비해 몇 배 정도 줄어들 수 있습니다.반복 알고리즘 클래스에는 Apache [10]Spark 개발을 위한 초기 추진력을 형성한 머신 러닝 시스템의 훈련 알고리즘이 있습니다.
Apache Spark를 사용하려면 클러스터 관리자 및 분산 스토리지 시스템이 필요합니다.클러스터 관리를 위해 Spark는 스탠드아론(네이티브 Spark 클러스터)을 지원합니다.이 클러스터에서는 클러스터를 수동으로 시작하거나 설치 패키지에서 제공하는 시작 스크립트를 사용할 수 있습니다.이러한 데몬을 단일 머신에서 실행하여 테스트할 수도 있습니다.) Hadoop WARN, Apache Mesos 또는 Kubernetes.[11] 분산 스토리지의 경우 Spark는 Alluxio,[12] HDFS(Hadoop Distributed File System), MapR 파일 시스템(MapR-FS),[13] Cassandra,[14] OpenStack Swift, Amazon S3, Kudu, Lustre 파일 [15]시스템 또는 맞춤형 솔루션을 구현할 수 있습니다.또한 Spark는 일반적으로 개발 또는 테스트 목적으로만 사용되는 의사 분산 로컬 모드를 지원합니다. 이 모드에서는 분산 스토리지가 필요하지 않고 로컬 파일 시스템을 대신 사용할 수 있습니다. 이러한 시나리오에서 Spark는 CPU 코어당 실행자가 1개인 단일 머신에서 실행됩니다.
스파크 코어
Spark Core는 전체 프로젝트의 기반입니다.애플리케이션 프로그래밍 인터페이스(Java, Python, Scala, 의 경우)를 통해 공개되는 분산 작업 디스패치, 스케줄링 및 기본 I/O 기능을 제공합니다.NET 및 R)은[16] RDD 추상화에 중점을 두고 있습니다(Java API는 다른 JVM 언어에도 사용할 수 있지만 Julia와 같이[17] JVM에 연결할 수 있는 다른 비 JVM 언어에도 사용할 수 있습니다).이 인터페이스는 기능/고차 프로그래밍 모델을 반영합니다. "드라이버" 프로그램은 함수를 Spark에 전달함으로써 RDD에서 맵, 필터 또는 축소 등의 병렬 연산을 호출합니다.이 프로그램은 RDD에서 함수를 [2]병렬로 실행하도록 스케줄링합니다.이러한 조작과 조인등의 추가 조작은, RDD 를 입력으로 받아 새로운 RDD 를 생성합니다.RDD 는 불변하고, 그 조작은 느립니다.또, 각 RDD 의 「라인」(생성한 조작의 순서)을 추적해, 데이터 손실시에 재구축 할 수 있도록 함으로써, 폴트 톨러런스를 실현합니다.RDD에는 임의의 유형의 Python 을 포함할 수 있습니다.NET, Java 또는 Scala 객체.
RDD 지향의 기능적 프로그래밍 스타일 외에도 Spark는 두 가지 제한된 형식의 공유 변수를 제공합니다. 즉, 브로드캐스트 변수는 모든 노드에서 사용할 수 있어야 하는 읽기 전용 데이터를 참조하는 반면, 축적은 명령형 [2]스타일로 감소를 프로그래밍하는 데 사용할 수 있습니다.
RDD 중심 함수 프로그래밍의 전형적인 예는 텍스트 파일 집합에서 발생하는 모든 단어의 빈도를 계산하고 가장 일반적인 단어를 인쇄하는 다음과 같은 Scala 프로그램입니다.각각map, platMap(맵의 일종) 및 reducedByKey는 단일 데이터 항목(또는 항목 쌍)에 대해 간단한 작업을 수행하는 익명 함수를 사용하여 RDD를 새로운 RDD로 변환합니다.
값 컨피던스 = 신규 SparkConf().set AppName("syslog_test") // 스파크 구성 개체를 만듭니다. 값 sc = 신규 스파크 콘텍스트(컨피던스) // 스파크 컨텍스트 생성 값 데이터. = sc.텍스트 파일("/path/to/somedir") // "somedir"에서 (파일명, 콘텐츠) 쌍의 RDD로 파일을 읽습니다. 값 토큰 = 데이터..평면 지도(_.분열되다(" ")) // 각 파일을 토큰(워드) 목록으로 분할합니다. 값 워드프리크 = 토큰.지도((_, 1)).리덕트(_ + _) // 각 토큰에 1개의 카운트를 추가한 다음 워드 유형당 카운트를 합산합니다. 워드프리크.정렬 기준(s => -s._2).지도(x => (x._2, x._1)).정상(10) // 상위 10개의 단어를 가져옵니다.워드와 카운트를 교환하여 카운트별로 정렬합니다.
스파크 SQL
Spark SQL은 Spark [a]Core 위에 있는 구성 요소로, DataFrames라는 데이터 추상화를 도입하여 구조화 및 반구조화 데이터를 지원합니다.Spark SQL은 Scala, Java, Python 또는 에서 DataFrames를 조작하기 위한 도메인 고유 언어(DSL)를 제공합니다.NET.[16] 명령줄 인터페이스 및 ODBC/JDBC 서버를 통한 SQL 언어 지원도 제공합니다.DataFrames는 RDD에서 제공하는 컴파일 타임 타입 체크 기능이 없지만 Spark 2.0에서는 강력한 타입의 DataSet도 Spark SQL에서 완전히 지원됩니다.
수입품 조직.아파치.불꽃을 튀기다.sql.스파크 세션 값 url = "jdbc:mysql://yourIP:yourPort/test?user=yourUsername;password=yourPassword" // 데이터베이스 서버의 URL. 값 불꽃을 튀기다 = 스파크 세션.빌더().getOrCreate() // 스파크 세션 개체 만들기 값 df = 불꽃을 튀기다 .읽어주세요 .포맷("jdbc") .선택("url", url) .선택("dbtable", '사람') .장전() df.print Schema() // 이 DataFrame의 스키마를 찾습니다. 값 카운트 기준나이 = df.그룹 기준('연령').세어보세요() // 연령별로 사람 수 //또는 SQL 경유: //df.createOrReplaceTempView("사람") //밸카운트 기준Age = spark.sql("SELECT age, count") FROM 사람들 연령별 그룹화)
스파크 스트리밍
Spark Streaming은 Spark Core의 빠른 스케줄링 기능을 사용하여 스트리밍 분석을 수행합니다.또한 데이터를 미니배치로 수집하고 이러한 미니배치에서 RDD 변환을 수행합니다.이 설계를 통해 배치 분석을 위해 작성된 동일한 애플리케이션 코드 세트를 스트리밍 분석에서 사용할 수 있으므로 람다 [19][20]아키텍처를 쉽게 구현할 수 있습니다.단, 이 편리성은 미니배치 기간과 동일한 지연의 패널티를 수반합니다.미니배치가 아닌 이벤트별로 이벤트를 처리하는 다른 스트리밍 데이터 엔진으로는 Storm과 Flink의 [21]스트리밍 컴포넌트가 있습니다.Spark Streaming은 Kafka, Flume, Twitter, ZeroMQ, Kinesis 및 TCP/IP [22]소켓에서 소비할 수 있도록 내장되어 있습니다.
Spark 2.x에서는 스트리밍을 [23]지원하기 위해 보다 높은 수준의 인터페이스를 가진 데이터셋 기반 기술인 Structured Streaming도 제공됩니다.
Spark는 클라우드뿐만 아니라 기존의 사내 데이터 센터에도 구현할 수 있습니다.
MLlib 머신 러닝 라이브러리
Spark MLlib은 Spark Core를 기반으로 하는 분산 머신 러닝 프레임워크로, 주로 분산 메모리 기반 Spark 아키텍처를 통해 Apache Mahout에서 사용하는 디스크 기반 구현의 9배 속도입니다(MLlib 개발자가 교대 최소 제곱(AL) 구현에 대해 수행한 벤치마크에 따르면).이온, 그리고 Mahout 자체가 Spark 인터페이스를 획득하기 전), 그리고 Swertpal Wabbit보다 [24]더 잘 확장됩니다.다음과 같은 많은 일반적인 머신러닝 및 통계 알고리즘이 구현되어 대규모 머신러닝 파이프라인을 단순화하는 MLlib과 함께 출하되고 있습니다.
- 요약 통계량, 상관 관계, 계층화 표본 추출, 가설 검정, 랜덤 데이터 생성[25]
- 분류 및 회귀: 벡터 기계 지원, 로지스틱 회귀 분석, 선형 회귀, Naigive Bayes 분류, 의사결정 트리, 랜덤 포레스트, 경사 부스트 트리
- 상호협력 필터링 기법(ALS(교체 최소 제곱) 포함)
- k-평균 및 잠재 디리클레 할당(LDA)을 포함한 군집 분석 방법
- 특이치 분해(SVD) 및 주성분 분석(PCA)과 같은 차원 축소 기법
- 특징 추출 및 변환 함수
- 확률적 경사 강하, 제한된 메모리 BFGS(L-BFGS)와 같은 최적화 알고리즘
그래프 X
GraphX는 Apache Spark 위에 분산된 그래프 처리 프레임워크입니다.이 그래프는 불변의 RDD를 기반으로 하기 때문에 그래프는 불변하기 때문에 그래프 데이터베이스와 [26]같은 트랜잭션 방식은 말할 것도 없고 갱신해야 하는 그래프에는 적합하지 않습니다.GraphX는 대규모 병렬 알고리즘(PageRank 등)을 구현하기 위한 2개의 API를 제공합니다.Pregel 추상화와 보다 일반적인 MapReduce 스타일의 [27]API입니다.Spark 1.6에서 공식적으로 폐지된 이전 베이글과 달리 GraphX는 속성 그래프(가장자리에 속성을 [28]부착할 수 있는 그래프)를 완전히 지원합니다.
Apache Spark와 마찬가지로 GraphX는 처음에는 UC Berkeley의 AMPrab과 Dataricks의 연구 프로젝트로 시작되었으며, 이후 Apache Software Foundation과 Spark [29]프로젝트에 기부되었습니다.
언어 지원
Apache Spark에는 Scala, Java, R 및 Python에 대한 서드파티 지원이 포함되어 있습니다.NET CLR,[30] [31]Julia 등
역사
스파크는 2009년 UC 버클리 대학 엠프리(AMPab)에서 Matei Zaharia에 의해 처음 시작되었으며 2010년 BSD 라이선스로 [32]오픈 소스되었습니다.
2013년, 이 프로젝트는 Apache Software Foundation에 기부되어 Apache 2.0으로 라이센스를 전환했습니다.2014년 2월 Spark는 최상위 Apache [33]프로젝트가 되었습니다.
2014년 11월 스파크 창업자 M. Zaharia의 회사 Dataricks는 [34][32]스파크를 이용한 대규모 정렬에서 세계 신기록을 수립했습니다.
Spark는 [35]2015년에 1,000명이 넘는 기부자를 보유하고 있어 Apache Software[36] Foundation에서 가장 활발한 프로젝트 중 하나이자 가장 활발한 오픈 소스 빅데이터 프로젝트 중 하나입니다.
버전 | 원래 출시일 | 최신 버전 | 발매일 |
---|---|---|---|
버전 더 이상 보수되지 않음 | 2012-06-12 | 0.5.1 | 2012-10-07 |
버전 더 이상 되지 않음: 0.6 | 2012-10-14 | 0.6.2 | 2013-02-07 |
버전 더 이상 되지 않음: 0.7 | 2013-02-27 | 0.7.3 | 2013-07-16 |
버전 더 이상 되지 않음: | 2013-09-25 | 0.8.1 | 2013-12-19 |
버전 더 이상 되지 않음: 0.9 | 2014-02-02 | 0.9.2 | 2014-07-23 |
버전 더 이상 보수되지 않음 | 2014-05-26 | 1.0.2 | 2014-08-05 |
버전, 보수 1.1 | 2014-09-11 | 1.1.1 | 2014-11-26 |
버전, 보수 1.2 | 2014-12-18 | 1.2.2 | 2015-04-17 |
버전, 보수 1.3 | 2015-03-13 | 1.3.1 | 2015-04-17 |
버전 더 이상 보수되지 않음 | 2015-06-11 | 1.4.1 | 2015-07-15 |
버전 더 이상 보수되지 않음 | 2015-09-09 | 1.5.2 | 2015-11-09 |
버전 더 이상 보수되지 않음 | 2016-01-04 | 1.6.3 | 2016-11-07 |
버전, 보수 2.0 | 2016-07-26 | 2.0.2 | 2016-11-14 |
버전, 보수 2.1 | 2016-12-28 | 2.1.3 | 2018-06-26 |
버전, 보수 2.2 | 2017-07-11 | 2.2.3 | 2019-01-11 |
버전, 보수 2.3 | 2018-02-28 | 2.3.4 | 2019-09-09 |
보수 2.4 LTS | 2018-11-02 | 2.4.8 | 2021-05-17[37] |
3.0 | 2020-06-18 | 3.0.3 | 2021-06-01[38] |
3.1 | 2021-03-02 | 3.1.3 | 2022-02-18[39] |
3.2 | 2021-10-13 | 3.2.1 | 2022-01-26 |
3.3 | 2022-06-16 | 3.3.0 | 2022-06-16 |
범례: 구버전 이전 버전, 아직 유지 관리됨 최신 버전 최신 프리뷰 버전 |
Scala 버전
Spark 3.3.0은 Scala 2.13을 기반으로 합니다(따라서 Scala 2.12 및 2.13에서 즉시 작동 가능). 그러나 Scala [40]3에서도 작동시킬 수 있습니다.
개발자
Apache Spark는 커뮤니티에 의해 개발되었습니다.이 프로젝트는 "프로젝트 관리 위원회"(PMC)[41]라는 그룹에 의해 관리됩니다.
「 」를 참조해 주세요.
메모들
레퍼런스
- ^ "Spark Release 2.0.0".
MLlib in R: SparkR now offers MLlib APIs [..] Python: PySpark now offers many more MLlib algorithms"
- ^ a b c d Zaharia, Matei; Chowdhury, Mosharaf; Franklin, Michael J.; Shenker, Scott; Stoica, Ion. Spark: Cluster Computing with Working Sets (PDF). USENIX Workshop on Hot Topics in Cloud Computing (HotCloud).
- ^ "Spark 2.2.0 Quick Start". apache.org. 2017-07-11. Retrieved 2017-10-19.
we highly recommend you to switch to use Dataset, which has better performance than RDD
- ^ "Spark 2.2.0 deprecation list". apache.org. 2017-07-11. Retrieved 2017-10-10.
- ^ Damji, Jules (2016-07-14). "A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets: When to use them and why". databricks.com. Retrieved 2017-10-19.
- ^ Chambers, Bill (2017-08-10). "12". Spark: The Definitive Guide. O'Reilly Media.
virtually all Spark code you run, where DataFrames or Datasets, compiles down to an RDD
- ^ "What is Apache Spark? Spark Tutorial Guide for Beginner". janbasktraining.com. 2018-04-13. Retrieved 2018-04-13.
- ^ Zaharia, Matei; Chowdhury, Mosharaf; Das, Tathagata; Dave, Ankur; Ma, Justin; McCauley, Murphy; J., Michael; Shenker, Scott; Stoica, Ion (2010). Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing (PDF). USENIX Symp. Networked Systems Design and Implementation.
- ^ Xin, Reynold; Rosen, Josh; Zaharia, Matei; Franklin, Michael; Shenker, Scott; Stoica, Ion (June 2013). Shark: SQL and Rich Analytics at Scale (PDF). SIGMOD 2013. arXiv:1211.6176. Bibcode:2012arXiv1211.6176X.
- ^ Harris, Derrick (28 June 2014). "4 reasons why Spark could jolt Hadoop into hyperdrive". Gigaom.
- ^ "Cluster Mode Overview - Spark 2.4.0 Documentation - Cluster Manager Types". apache.org. Apache Foundation. 2019-07-09. Retrieved 2019-07-09.
- ^ Hadoop을 비롯한 다른 오픈 소스 소프트웨어 프로젝트와 관련된 Spark의 그림
- ^ MapR 생태계 지원 매트릭스
- ^ Doan, DuyHai (2014-09-10). "Re: cassandra + spark / pyspark". Cassandra User (Mailing list). Retrieved 2014-11-21.
- ^ Wang, Yandong; Goldstone, Robin; Yu, Weikuan; Wang, Teng (May 2014). "Characterization and Optimization of Memory-Resident MapReduce on HPC Systems". 2014 IEEE 28th International Parallel and Distributed Processing Symposium. IEEE. pp. 799–808. doi:10.1109/IPDPS.2014.87. ISBN 978-1-4799-3800-1. S2CID 11157612.
- ^ a b dotnet/spark, .NET Platform, 2020-09-14, retrieved 2020-09-14
- ^ "GitHub - DFDX/Spark.jl: Julia binding for Apache Spark". GitHub. 2019-05-24.
- ^ "Spark Release 1.3.0 Apache Spark".
- ^ "Applying the Lambda Architecture with Spark, Kafka, and Cassandra Pluralsight". www.pluralsight.com. Retrieved 2016-11-20.
- ^ Shapira, Gwen (29 August 2014). "Building Lambda Architecture with Spark Streaming". cloudera.com. Cloudera. Archived from the original on 14 June 2016. Retrieved 17 June 2016.
re-use the same aggregates we wrote for our batch application on a real-time data stream
- ^ Chintapalli, Sanket; Dagit, Derek; Evans, Bobby; Farivar, Reza; Graves, Thomas; Holderbaugh, Mark; Liu, Zhuo; Nusbaum, Kyle; Patil, Kishorkumar; Peng, Boyang Jerry; Poulosky, Paul (May 2016). "Benchmarking Streaming Computation Engines: Storm, Flink and Spark Streaming". 2016 IEEE International Parallel and Distributed Processing Symposium Workshops (IPDPSW). IEEE. pp. 1789–1792. doi:10.1109/IPDPSW.2016.138. ISBN 978-1-5090-3682-0. S2CID 2180634.
- ^ Kharbanda, Arush (17 March 2015). "Getting Data into Spark Streaming". sigmoid.com. Sigmoid (Sunnyvale, California IT product company). Archived from the original on 15 August 2016. Retrieved 7 July 2016.
- ^ Zaharia, Matei (2016-07-28). "Structured Streaming In Apache Spark: A new high-level API for streaming". databricks.com. Retrieved 2017-10-19.
- ^ Sparks, Evan; Talwalkar, Ameet (2013-08-06). "Spark Meetup: MLbase, Distributed Machine Learning with Spark". slideshare.net. Spark User Meetup, San Francisco, California. Retrieved 10 February 2014.
- ^ "MLlib Apache Spark". spark.apache.org. Retrieved 2016-01-18.
- ^ Malak, Michael (14 June 2016). "Finding Graph Isomorphisms In GraphX And GraphFrames: Graph Processing vs. Graph Database". slideshare.net. sparksummit.org. Retrieved 11 July 2016.
- ^ Malak, Michael (1 July 2016). Spark GraphX in Action. Manning. p. 89. ISBN 9781617292521.
Pregel and its little sibling aggregateMessages() are the cornerstones of graph processing in GraphX. ... algorithms that require more flexibility for the terminating condition have to be implemented using aggregateMessages()
- ^ Malak, Michael (14 June 2016). "Finding Graph Isomorphisms In GraphX And GraphFrames: Graph Processing vs. Graph Database". slideshare.net. sparksummit.org. Retrieved 11 July 2016.
- ^ Gonzalez, Joseph; Xin, Reynold; Dave, Ankur; Crankshaw, Daniel; Franklin, Michael; Stoica, Ion (Oct 2014). GraphX: Graph Processing in a Distributed Dataflow Framework (PDF). OSDI 2014.
- ^ ".NET for Apache Spark Big data analytics".
- ^ "Spark.jl". GitHub. 14 October 2021.
- ^ a b Clark, Lindsay. "Apache Spark speeds up big data decision-making". ComputerWeekly.com. Retrieved 2018-05-16.
- ^ "The Apache Software Foundation Announces Apache™ Spark™ as a Top-Level Project". apache.org. Apache Software Foundation. 27 February 2014. Retrieved 4 March 2014.
- ^ Spark가 대규모 정렬에서 공식적으로 신기록을 수립하다
- ^ 오픈 허브 스파크 개발 활동
- ^ "The Apache Software Foundation Announces Apache™ Spark™ as a Top-Level Project". apache.org. Apache Software Foundation. 27 February 2014. Retrieved 4 March 2014.
- ^ "Spark News". apache.org. Archived from the original on 2021-08-25.
- ^ "Spark News". apache.org.
- ^ "Spark 3.1.3 released". spark.apache.org. Archived from the original on 2022-06-18.
- ^ "Using Scala 3 with Spark". 47 Degrees. Retrieved 29 July 2022.
- ^ "Apache Committee Information".