나누고 싶은 개발 이야기

Data Engineer로서 기록하고 공유하고 싶은 기술들. 책과 함께 이야기합니다.

Big Data/Spark 8

[Spark] event log의 spark 옵션 Elasticsearch 적재

이번 글에서는 spark 관리자 역할에서 사용하고 있는 spark 버전 및 설정 정보를 수집하여 dashboard 형태로 모니터링하는 방법에 대해서 공유한다. 이런 아이디어를 생각하게 된 이유는 다른 사용자에 의해서 사용되는 spark 버전들을 관리하고 최신의 버전으로 가이드하기 위해서는 먼저 현황 파악이 우선되어야 했기 때문이다. 사실 spark는 event log를 적재하여 history server를 통해 spark job의 실행 결과를 분석할 수 있다. 문제는 history server의 UI에서는 전체적인 현황을 파악하기 보다는 한 개의 job에 대한 분석을 하는데 더 용이하다는데 있다. 그래서 일부 spark 옵션에 대해서만 수집해서 spark job들의 옵션들을 통합하고 통계화하면 spark..

Big Data/Spark 2023.03.20

hadoop 2.6.0 버전을 위한 spark 3.x 빌드

이번에는 spark 빌드 관련해서 이야기를 하려고 합니다. spark은 대부분 hadoop yarn 기반에서 실행하는 경우가 많습니다. 하지만 hadoop cluster의 버전이 회사의 환경에 따라 다르므로 빌드하는 spark 버전에 따라 호환성을 잘 살펴야 합니다. 필자는 낮은 버전의 hadoop을 사용하고 있는데, 사용 하는 hadoop이 spark의 어느 버전까지 빌드해서 사용 가능한지 검토하게 됐습니다. 이 글은 그런 경험을 토대로 정리하는 목적으로 쓰게 됐습니다. 실행 가능한 spark 배포판을 빌드할 때, 사용하는 hadoop 버전을 명시해서 빌드를 합니다. 예를 들어 hadoop 3.3.0 버전을 사용할 때 아래와 같이 옵션을 넣어서 spark 배포판을 빌드합니다. ./build/mvn -P..

Big Data/Spark 2022.09.28

[Spark] Direct API for Kafka (직접 모델)

스파크 스트리밍에서 데이터 소스로 카프카를 많이 사용한다. 빅 데이터의 스트리밍 처리에서 카프카는 거의 필수로 사용되기 때문이며 스파크 스트리밍이 카프카와의 통합을 잘 지원하기 때문이다. 스파크 스트리밍에서 카프카의 데이터를 가져오는 여러 방법이 있는데 exactly-once를 지원하기 위해 개발된 Direct API for Kafka(이하 직접 모델)를 소개한다. 그리고 기존 리시버 모델과는 무슨 차이가 있는지 살펴보자. 1. 리시버 모델 직접 모델이 나오기 전에 사용되던 리시버 모델이다. 각 executor(이하 익스큐터)에 리시버가 존재하고 리시버에 의해서 카프카의 데이터를 가져온다. 리시버가 카프카 컨슈머가 된다. 내결험성을 위해 리시버는 WAL(Write Ahead Logs)를 기록한다. 데이터..

Big Data/Spark 2021.08.12

[spark] hadoop 3 & hive 3 환경 설정

이번 글에서는 hadoop 3 & hive 3 버전에서 동작하는 spark 환경 구축을 설명한다. 최근 hadoop 3 cluster를 구축하는 작업에 참여하고 있는데 spark도 기존과 변경되는 부분이 있어 정리했다. hadoop과 hive의 설치 버전은 다음과 같다. 해당 버전들이 현재 시점(2020-05-25)의 안정화 버전이다. hadoop 3.1.3 hive 3.1.2 spark의 배포버전을 빌드할 때, hadoop/ hive 3 버전으로 변경 되더라도 큰 차이가 없다. spark에서 hive 1.2.1 버전을 default로 해서 빌드되기 때문에 추가 설정 작업이 필요하다. 그래서 spark 빌드 및 배포, hive 관련 옵션 설정을 나누어서 설명을 한다. 1. spark 빌드 및 배포 Bui..

Big Data/Spark 2020.05.25

[Spark] 2.4.0 - bucket pruning

spark의 기능을 대략적으로만 파악하고 넘어가면 공부가 덜 되는 것 같아 각 버전별로 추가된 내용을 분석해 보기로 하였다. 현재(2020-03-10) 기준 가장 최신 버전은 2.4.5인데 2.4.x 버전에서 추가된 기능부터 정리해 보고자 한다. 이번 글에서 정리한 내용은 bucket pruning 이다. Bucket 제목에서 나오는 bucket의 개념부터 살펴보자. 아래 정의는 Hive 문서에서 발췌했다. Buckets (or Clusters): Data in each partition may in turn be divided into Buckets based on the value of a hash function of some column of the Table. For example the pag..

Big Data/Spark 2020.03.10

[Spark] Dataset

이번 글은 스파크 완벽 가이드의 내용을 대부분 발췌한 것이다. DataSet은 구조적 API의 기본 데이터 타입이다. DataFrame은 Row 타입의 DataSet이다. (DataFrame == DataSet[Row]) 도메인별 특정 객체를 효과적으로 지원하기 위해 '인코더 encoder'라 부르는 특수한 개념이 필요하다. 인코더는 도메인별 특정 객체 T를 스파크의 내부 데이터 타입으로 매핑하는 시스템을 의미한다. DataFrame이나 '표준' 구조적 API를 사용한다면 Row 타입을 직렬화된 바이너리 구조로 변환합니다. DataSet을 사용할 시기 DataFrame 기능만으로는 수행할 연산을 표현할 수 없는 경우 성능 저하를 감수하더라도 타입 안정성(type-safe)을 가진 데이터 타입을 사용하고 ..

Big Data/Spark 2020.01.14

[Spark] Accumulators

Spark 으로 ETL 작업을 처리하다가 처리한 데이터의 누적 양을 집계하고 싶었다. 예를 들면, Kafka의 데이터를 활용해 spark streamming 작업을 할 때, 각 단계(spark streaming은 짧은 간격의 배치)마다 처리된 데이터 건수를 집계한다고 하자. spark은 분산으로 데이터를 처리하기 때문에 각 executor의 처리된 결과를 조합한 공유 변수가 필요하다. executor가 처리한 데이터를 하나의 공유변수로 값을 기록하는 것이다. 이 때 공유변수는 결합 및 가환 연산을 지원해야 한다. '가환'이라는 단어가 어색한데 사전으로 찾아본 결과 '조작이나 연산의 순서를 바꾸어도 그 결과가 변하지 않는 일' 이다. 다시 간단히 정리하면 공유변수를 통한 연산의 순서, 연산의 조합의 결과가..

Big Data/Spark 2019.05.03

Spark SQL

팀에서 spark SQL을 사용해서 사용자가 요청한 쿼리를 stream 처리하는 작업을 하고 있다. 그래서 spark SQL에 대해서 정리해 보고자 한다. 해당 블로그의 내용은 책 '스파크 2 프로그래밍'에서 대부분 참고했다. 1. RDD와의 차이점 spark의 기본 데이터 모델은 RDD 이다. 분산환경에서 메모리 기반으로 빠르고 안정적으로 동작하는 프로그램을 작성할 수 있는 장점이 있지만 아쉬운 점도 있었다. 그것은 "스키마"에 대한 표현방법이 없다는 것이다. spark 2.0 부터 DataSet으로 통합되어 "스키마" 있는 데이터 처리가 가능하다. "스키마"라는 단어를 처음 들었을 때, 제일 먼저 데이터베이스가 생각났다. 데이터베이스가 설정된 스키마에 따라 SQL문을 던지면 결과를 주듯이, DataS..

Big Data/Spark 2018.11.20
반응형