데이터엔지니어링/Spark
-
[6장] 스파크 SQL과 데이터세트데이터엔지니어링/Spark 2023. 9. 13. 23:57
이번 장은 데이터세트 구조를 고수준 API으로 수용하기 위해서 스파크가 메모리를 어떻게 관리하는지 알아보자. 스파크 데이터세트 및 데이터 프레임을 위한 메모리 관리 스파크는 인메모리 분산 빅데이터 엔진이기 때문에, 메모리를 효율적으로 사용하는 것은 중요하다. 스파크 1.X에서, 인코더라고 불리는 효율적인 메커니즘을 사용해 JVM과 내부 텅스텐 포맷 사이를 직렬화하고 역직렬화한다. 오프 힙에 메모리를 직접 할당하는 건 스파크가 GC에 의해 받는 영향을 줄일 수 있다는 것을 의미한다. 스파크 2.X는 전체 단계 코드 생성 및 벡터화된 칼럼 기반 메모리 레이아웃을 특징으로 하는 텅스텐 엔진을 도입했으며, 빠른 병렬 데이터 액세스를 위하여 '단일 명령, 다중 데이터(SIMD)' 접근 방식의 최신 CPU 및 캐시..
-
[5장] 스파크 SQL과 데이터 프레임: 외부 데이터 소스와 소통하기데이터엔지니어링/Spark 2023. 9. 5. 02:32
이번 장은 스파크 SQL을 사용해 다음을 수행하는 방법에 대해서 알아보자. - 아파치 하이브 및 아파치 스파크 모두에 대해 사용자 정의 함수를 사용하기 - JDBC 및 SQL 데이터 베이스, PostgreSQL, MySQL, 태블로, 애저 코스모스 DB 및 MS SQL 서버와 같은 외부 데이터 원본과 연결하기 - 단순하거나 복잡한 유형, 고차 함수 그리고 일반적인 관계 연산자 사용하기 스파크 SQL과 아파치 하이브 스파크 SQL은 관계형 처리와 스파크의 함수형 프로그래밍 API를 통합하는 아파치 스파크의 기본 구성 요소다. 사용자 정의 함수(UDF) 스파크는 내장 함수도 제공하지만, 자신의 기능을 정의할 수 있는 유연성 또한 제공이 되며, 이를 사용자 정의 함수라 한다. 스파크 SQL UDF 사용자가 U..
-
[4장] 스파크 SQL과 데이터 프레임: 내장 데이터 소스 소개 [2]데이터엔지니어링/Spark 2023. 8. 3. 02:13
SQL 테이블과 뷰 스파크는 각 테이블과 해당 데이터에 관련된 정보인 스키마, 설명, 테이블명, 데이터베이스명, 칼럼명, 파티션, 실제 데이터의 물리적 위치 등의 메타데이터를 가지고 있고, 이 모든 정보는 중앙 메타스토어에 저장된다. 관리형 테이블과 비관리형 테이블 스파크는 관리형과 비관리형이라는 두 가지 유형의 테이블을 만들 수 있다. 관리형 테이블의 경우 스파크는 메타데이터와 파일 저장소의 데이터를 모두 관리하며, 비관리형 테이블의 경우에는 오직 메타데이터만 관리하고 카산드라와 같은 외부 데이터 소스에서 데이터를 직접 관리한다. SQL 데이터 베이스와 테이블 생성하기 테이블은 데이터베이스 안에 존재하기에 스파크에게 learn_spark_db라는 데이터베이스를 생성하고 스파크에게 해당 데이터베이스를 사..
-
[4장] 스파크 SQL과 데이터 프레임: 내장 데이터 소스 소개 [1]데이터엔지니어링/Spark 2023. 8. 1. 02:19
스파크 SQL의 특징 3장에서 살펴본 상위 수준의 정형화 API가 엔진으로 제공된다. 다양한 정형 데이터를 읽거나 쓸 수 있다.(JSON, 하이브 테이블, Parquet, Avro, ORC, CSV) 태블로, 파워BI, 탈렌드와 같은 외부 비즈니스 인텔리전스의 데이터 소스나 MySQL 및 PostgreSQL과 같은 RDBMS의 데이터를 JDBC/ODBC 커넥터를 사용하여 쿼리할 수 있다. 스파크 애플리케이션에서 데이터베이스 안에 테이블 또는 뷰로 저장되어 있는 정형 데이터와 소통할 수 있도록 프로그래밍 인터페이스를 제공한다. SQL 쿼리를 정형 데이터에 대해 실행할 수 있는 대화형 셸을 제공한다. ANSI SQL:2003 호환 명령 및 HiveQL을 지원한다. 스파크 애플리케이션에서 스파크 SQL 사용하..
-
[3장] 아파치 스파크의 정형화 API [2]데이터엔지니어링/Spark 2023. 7. 25. 02:24
자주 쓰이는 데이터 프레임 작업들 데이터 프레임에서 일반적인 데이터 작업을 수행하려면 구조화된 데이터를 갖고 있는 데이터 소스에서 데이터 프레임으로 로드를 해야하는데, 이를 위해 스파크는 DataFrameReader라는 이름의 인터페이스를 제공한다. 이 인터페이스는 JSON, CSV, Parquet, 텍스트, 에이브로, ORC 같은 다양한 포맷의 데이터 소스를 읽는것을 지원한다. 특정 포맷의 데이터소스에 데이터 프레임의 데이터를 써서 내보내기 위해서는 DataFrameWriter를 쓴다. # 파이썬에서 스키마를 정의한다. from pyspark.sql.types import * # 프로그래밍적인 방법으로 스키마를 정의한다. fire_schema = StructType([StructField('CallNu..
-
[3장] 아파치 스파크의 정형화 API [1]데이터엔지니어링/Spark 2023. 7. 20. 16:03
스파크 : RDD 아래에는 무엇이 있나? RDD는 스파크에서 가장 기본적인 추상적인 부분이다 RDD의 특성은 다음과 같다. 의존성(dependency) 어떤 입력을 필요로 하고 현재의 RDD가 어떻게 만들어지는지 스파크에게 가르쳐 주는 의존성이 필요한데, 결과를 새로 만들어야 하는 경우 스파크는 이 의존성 정보를 참고하고 연산을 다시 반복해서 RDD를 다시 만들 수 있고, 이 특성이 RDD에 유연성을 부여해준다. 파티션(지역성 정보 포함) 파티션은 스파크에게 작업을 나눠서 이그제큐터들에 분산해 파티션별로 병렬 연산할 수 있는 능력을 부여한다. 연산 함수 : Partition => Iterator[T] RDD는 RDD에 저장되는 데이터를 Iterator[T] 형태로 만들어 주는 연산 함수를 갖고 있다. 다..
-
[2장] 아파치 스파크 시작데이터엔지니어링/Spark 2023. 7. 7. 01:59
아파치 스파크 다운로드 pip isntall pyspark 를 통해서 pyspark를 설치해준 상태에서 로컬로 실시했다. 파이스파크 셸 사용 pyspark, spark-shell, spark-sql, sparkR의 네 가지 인터프리터들이 포함되어 있어 일회성 데이터 분석이 가능하며, 파이썬, 스칼라, R, SQL이나 bash 같은 유닉스 셸을 써봤으면 대화형 셸들이 익숙할 것이다. 이 셸들은 클러스터에 연결하고 분산 데이터를 스파크 워커 노드의 메모리에 로드할 수 있도록 확장 되어왔다. 로컬 머신에서 사용하기 ㅇ스파크 연산들은 작업으로 표현되는데, 작업들은 태스크라는 저수준 RDD 바이트 코드로 변환되며 실행을 위해 스파크의 이그제큐터들에 분산된다. 이후 빠져나가기 위해서 Ctrl-D를 누르면 된다. 스..
-
[1장] 아파치 스파크 소개데이터엔지니어링/Spark 2023. 6. 28. 03:46
아파치 스파크란!!?? 데이터 센터나 클라우드에서 대규모 분산 데이터 처리를 하기 위해 설계된 통합형 엔진! 스파크는 중간 연산을 위해 메모리 저장소를 지원하여 하둡 맵리듀스보다 훨씬 빠르게 동작할 수 있다. 스파크는 머신러닝(MLlib), 대화형 질의를 위한 SQL(스파크 SQL), 실시간 데이터 처리를 위한 스트리밍 처리(스파크 스트리밍), 그래프 처리(GraphX) 등을 위해 쉽게 사용 가능한 API들로 이루어진 라이브러리를 갖고 있다. 스파크의 네 가지 핵심 특성 - 속도 - 스파크는 질의 연산을 방향성 비순환 그래프(DAG)로 구성되며, 이 DAG의 스케줄러와 질의 최적화 모듈은 효율적인 연산 그래프를 만들어서 각각의 태스크로 분해하여 클러스터의 워커 노드 위에서 병렬 수행될 수 있도록 해 준다..