[Spark] Buffer 단위로 Kafka Streaming 작업 수행하기
데이터 이모저모/Spark2024. 1. 22. 23:59[Spark] Buffer 단위로 Kafka Streaming 작업 수행하기

🧐 개요 이번 시간에는 Buffer 단위로 Kafka Streaming 작업을 수행하는 예제를 다루도록 하겠습니다. Buffer이란 무엇일까? Buffer은 데이터를 일시적으로 저장하는 메모리 공간입니다. 데이터가 '물'이라면, buffer은 '물을 담는 양동이' 정도로 표현할 수 있을 것입니다. 지속적으로 흐르는 물로 세수를 할 수도 있고, 양동이에 담은 물로 논밭에 물을 줄 수도 있는 것처럼 buffer은 일정한 크기의 데이터를 수집하여 한번에 작업을 수행하도록 도와주는 장치입니다. 일반적으로는 실시간 데이터를 수집하는 파트에서 주로 사용되는 개념입니다. Spark Streaming Kafka 앱에서 Buffer을 사용해야 하는 이유 Spark Streaming 어플리케이션의 작업 속도는 결코 빠르다..

[Spark] Kafka Streaming - 인코딩 된 JSON 데이터 가공하기
데이터 이모저모/Spark2024. 1. 6. 01:10[Spark] Kafka Streaming - 인코딩 된 JSON 데이터 가공하기

🧐 개요 Apache Kafka를 통해 발행된 메세지의 Key 및 Value는 (Kafka의 자체적인 로직으로 인해) 인코딩되어 있습니다. 따라서 해당 데이터를 디코딩하지 않으면 읽을 때 데이터가 2진법으로 표기됩니다. Spark-Streaming-Kafka 앱의 경우에도 수신한 Kafka 메세지를 특정 데이터 타입으로 CAST 하도록 공식 가이드에서도 권고하고 있습니다. 메세지가 일반적인 STRING 또는 INTEGER 데이터 타입인 경우에는 그냥 CAST를 진행해 주면 아무런 문제가 없습니다. 문제는 메세지가 JSON 데이터 타입인 경우에 발생하는데, 현재의 Spark는 인코딩된 STRUCT 데이터를 자동으로 디코딩해주지 못합니다. 디코딩을 위해서는 기존 데이터가 가지고 있던 스키마(schema) 정..

[Spark] PySpark의 기본 데이터 가공 프로세스
데이터 이모저모/Spark2024. 1. 3. 02:52[Spark] PySpark의 기본 데이터 가공 프로세스

🧐 개요 이번 포스트에서는 데이터프레임 가공 과정에서 가장 기본적으로 사용되는 PySpark 로직을 설명하고자 합니다. PySpark의 기본적인 가공 로직들은 다양한 분야 및 데이터 기반의 프로젝트에서 반복적으로 사용되는 내용이지만, 구현 방식이 다채롭고 활용 범위가 넓다보니 꾸준히 사용하지 않으면 빠르게 잊혀지고 내용을 잘못 기억하게 되더군요(내 기억력의 문제인가..). 이를 개인적으로 예방하고 필요한 시기에 찾아볼 수 있도록 하는 차원에서 포스트를 작성합니다. 📁 파일 데이터 불러오기 # read json files df = spark.read.option("multiline", "true").json("") # read csv files df = spark.read.csv("", header=Tru..

[Spark] Spark Streaming(PySpark) - Kafka 메세지 가공 및 parquet 파일 저장하기
데이터 이모저모/Spark2023. 12. 26. 14:24[Spark] Spark Streaming(PySpark) - Kafka 메세지 가공 및 parquet 파일 저장하기

🧐 개요 이전 포스트 - [Spark] Spark Streaming(PySpark) - '배치 함수'를 작성하여 작업 경과 시간을 기록하고 Kafka로 발행하기 이전 포스트 - [Spark] Spark Streaming(PySpark)으로 Kafka 메세지 수신하기 이번 포스트는 지난 포스트에 이어, kafka를 통해 수신한 데이터를 가공하는 로직을 소개합니다. 해당 로직은 제가 데모를 돌리면서 실습한 부분이기 때문에 실제 현업에서의 사용 방식과는 차이가 있습니다. 이번 포스트에서 구현한 로직은 아래와 같습니다. Kafka에서 JSON 구조로 작성된 STRING 타입의 value 데이터를 발행 Spark에서 value 데이터의 타입을 Struct 타입으로 변형 Spark에서 데이터를 가공 후 기타 작업을..

[Spark] Spark Streaming(PySpark) - '배치 함수'를 작성하여 작업 경과 시간을 기록하고 Kafka로 발행하기
데이터 이모저모/Spark2023. 12. 24. 22:56[Spark] Spark Streaming(PySpark) - '배치 함수'를 작성하여 작업 경과 시간을 기록하고 Kafka로 발행하기

🧐 개요 이전 포스트 - [Spark] Spark Streaming(PySpark)으로 Kafka 메세지 수신하기 이번 포스트는 저번 포스트에 이어서, Spark Streaming으로 Kafka에 메세지를 발행하는 다른 예제를 소개합니다. 구체적으로는 작업 경과 시간을 기록하여 Kafka로 발행하고자 합니다. 이번에는 해당 기능을 구현하는 과정에서 '배치 함수'를 만들어 각 배치별로 적용될 PySpark 가공 로직을 구성해보도록 하겠습니다. (해당 기능은 추후 Grafana 대시보드에서 Kafka 스크립트의 동작 시간을 실시간 대시보드로 모니터링하기 위한 기능입니다. 해당 내용도 블로그에 포스팅하도록 하겠습니다) 🖍️ 예제 스크립트 간단한 pub/sub 기능을 구현하는 PySpark Streaming 예..

[Spark] Spark Streaming(PySpark)으로 Kafka 메세지 수신하기
데이터 이모저모/Spark2023. 12. 24. 15:51[Spark] Spark Streaming(PySpark)으로 Kafka 메세지 수신하기

🧐 개요 이번 포스트는 Spark Streaming 기능을 사용해 Kafka 채널에 발행된 메세지를 수신하는 방법을 설명합니다. Apache Spark는 Kafka에서 발행한 메세지를 스트리밍 처리하도록 기능적으로 지원하고 있습니다. 일반적으로는 JAVA API 어플리케이션을 통해 Spark Streaming 작업을 구현한다고 들었습니다만 저는 PySpark 스크립트를 작성해 구현해보도록 하겠습니다. 참고로 제가 테스트를 진행하는 환경은 다음과 같습니다. Spark Version: v3.5.0 JAVA Version: openjdk-8-jdk Kafka Host: localhost 🖍️ 공식 가이드 참조하기 Apache Spark 공식 홈페이지에 Kafka 스트리밍 관련 가이드 문서를 제공하고 있습니다...

image