주요 컨텐츠로 이동

개요

이 블로그 포스트는 Data + AI Summit 2024의 "From Supernovas to LLMs" 세션의 후속 내용으로, 누구나 공개적으로 이용 가능한 NASA 위성 데이터를 Apache Kafka에서 활용하고 처리하는 방법을 보여줍니다.

대부분의 Kafka 데모와 달리, 이 글에서는 NASA의 공개 접근 가능한 Gamma-ray Coordinates Network (GCN)에서 제공하는 실시간 데이터 스트림을 분석하는 방법을 소개합니다. GCN은 다양한 위성으로부터 수집된 초신성과 블랙홀 데이터를 통합하고 있습니다.

오픈소스 Apache Spark™Apache Kafka만으로도 솔루션을 구축할 수 있지만, 이 작업에 데이터브릭스 데이터 인텔리전스 플랫폼을 사용하면 상당한 이점이 있음을 보여드리겠습니다. 두 접근 방식 모두의 소스 코드도 제공됩니다.

데이터 인텔리전스 플랫폼 기반 솔루션은 데이터 수집 및 변환을 위해 서버리스 컴퓨팅과 함께 Delta Live Tables를 활용하고, 데이터 거버넌스 및 메타데이터 관리를 위해 Unity Catalog를 사용하며, NASA 데이터 스트림의 자연어 쿼리 및 시각화를 위해 AI/BI Genie의 기능을 활용합니다. 또한 복잡한 SQL 변환 생성, 디버깅 및 문서화를 위한 Databricks Assistant의 강력한 기능도 소개합니다.

초신성, 블랙홀, 감마선 폭발

밤하늘은 정적이지 않습니다. 초신성과 블랙홀 형성 같은 우주 현상은 자주 일어나며, 강력한 감마선 폭발(gamma-ray bursts, 이하 GRB)을 동반합니다. 이런 감마선 폭발은 보통 2초 정도만 지속되지만, 2초 동안의 GRB가 방출하는 에너지는 태양이 약 100억 년의 수명 동안 방출하는 에너지와 맞먹습니다.

냉전 시대에 은밀한 핵무기 실험을 탐지하기 위해 만들어진 특수 위성들이 우연히 심우주에서 발생하는 이 강력한 감마선 섬광을 발견했습니다. 오늘날 NASA는 Swift와 Fermi 같은 위성들을 이용해 수십억 년 전 먼 은하에서 발생한 이런 폭발들을 탐지하고 연구합니다. 아래 애니메이션의 초록색 선은 2024년 8월 1일 오전 11시(CEST)의 SWIFT 위성 궤도를 보여줍니다. 이는 Marko Andlar의 Satellite Tracker 3D로 생성되었습니다.

Satellite Tracker 3D

GRB 221009A는 지금까지 기록된 가장 밝고 강력한 GRB 중 하나로, 그 에너지로 인해 대부분의 관측 장비를 무력화시켰습니다. 이 폭발은 궁수자리에서 발생했으며, 약 19억 년 전에 일어난 것으로 추정됩니다. 그러나 시간이 지나면서 우주가 팽창함에 따라, 현재 폭발의 근원지는 지구로부터 약 24억 광년 떨어져 있습니다. GRB 221009A는 아래 이미지에서 확인할 수 있습니다.

GRBs

Wikipedia. July 18, 2024. "GRB 221009A." https://en.wikipedia.org/wiki/GRB_221009A.

현대 천문학은 이제 다중 메신저 접근법을 채택해, 빛과 감마선 외에도 중성미자와 같은 다양한 신호를 함께 포착합니다. 예를 들어, 남극의 IceCube 관측소는 남극 얼음 1입방킬로미터 안에 5,000개 이상의 검출기를 설치해 지구를 통과하는 중성미자를 탐지합니다.

Gamma-ray Coordinates Network 프로젝트는 이러한 첨단 관측소들을 연결하여 우주 위성의 초신성 데이터와 남극의 중성미자 데이터를 연결하고, NASA의 데이터 스트림을 전 세계에서 접근할 수 있게 합니다.

NASA 위성 데이터 분석이 어려워 보일 수 있지만, 데이터브릭스 데이터 인텔리전스 플랫폼의 강력한 도구와 실용적인 추상화 덕분에 모든 데이터 과학자가 쉽게 이 과학적 데이터 스트림을 탐색할 수 있음을 보여드리고자 합니다.

덤으로, 여러분의 연구에 쉽게 재사용할 수 있는 가장 흥미로운 공개 데이터 스트림 중 하나에 대해 배우게 될 것입니다.

이제 제가 이 과제를 해결하기 위해 취한 단계들을 설명해 드리겠습니다.

Apache Kafka에서 초신성 데이터 가져오기

GCN Quickstart에서 OICD 토큰 얻기

NASA는 GCN 데이터 스트림을 Apache Kafka 토픽으로 제공하며, Kafka 브로커는 OIDC 자격 증명을 통한 인증을 요구합니다. GCN 자격 증명을 얻는 과정은 간단합니다:

  1. GCN Quickstart 페이지 방문
  2. Gmail 또는 기타 소셜 미디어 계정으로 인증
  3. client ID 와 client secret 얻기

GCN Quickstart는 Confluent Kafka를 기반으로 한 GCN Kafka 브로커를 활용하는 Python 코드 스니펫을 생성합니다.

GCN Kafka 래퍼는 사용하기 쉽게 설계되었지만, OAuth 인증을 위한 Kafka 연결 설정과 같은 대부분의 기술적 세부 사항을 자동으로 처리한다는 점에 유의해야 합니다.

Apache Spark™를 이용한 오픈소스 방식

초신성 데이터에 대해 더 자세히 알아보기 위해, 모든 매개변수와 설정을 완전히 제어할 수 있는 가장 일반적인 오픈소스 솔루션으로 시작하기로 했습니다. 그래서 Spark Structured Streaming을 사용하는 노트북으로 POC를 구현했습니다. 핵심은 다음 한 줄로 요약됩니다:

spark.readStream.format("kafka").options(**kafka_config)...

물론 여기서 중요한 세부사항은 GCN 래퍼에서 추출한 **kafka_config 연결 정보입니다. 전체 Spark 노트북은 GitHub에서 제공됩니다(블로그 끝부분의 리포지토리 참조).

그러나 제 궁극적인 목표는 저수준 세부사항을 추상화하고, 데이터 수집 및 변환을 위해 데이터브릭스 Delta Live Tables(DLT)의 이점을 활용하는 뛰어난 데이터 파이프라인을 만드는 것이었습니다.

Delta Live Tables로 GCN Kafka에서 초신성 데이터 점진적 수집

DLT를 선택한 이유는 여러 가지입니다:

  1. 선언적 접근 방식: DLT를 사용하면 복잡성의 많은 부분을 추상화하여 파이프라인을 선언적으로 작성하는 데 집중할 수 있습니다. 데이터 처리 로직에 집중할 수 있어 파이프라인 구축과 유지 관리가 쉬워지며, 동시에 Databricks Assistant, Auto Loader, AI/BI의 이점을 누릴 수 있습니다.
  2. 서버리스 인프라: DLT를 사용하면 인프라 관리가 완전히 자동화되고 컴퓨팅 리소스가 서버리스로 프로비저닝되어 수동 설정과 구성이 필요 없습니다. 이를 통해 점진적 구체화 뷰 계산 및 수직 자동 스케일링과 같은 고급 기능이 가능해져 효율적이고 확장 가능하며 비용 효율적인 데이터 처리가 가능합니다.
  3. SQL을 이용한 종단간 파이프라인 개발: OIDC 자격 증명을 사용한 Kafka에서의 데이터 수집과 복잡한 메시지 변환을 포함하여 전체 파이프라인을 SQL로 개발할 수 있는 가능성을 탐구하고 싶었습니다.

이 접근 방식을 통해 개발 프로세스를 간소화하고, 인프라 세부사항에 얽매이지 않고 간단하고 확장 가능하며 서버리스인 우주 데이터 파이프라인을 만들 수 있었습니다.

DLT 데이터 파이프라인은 전체를 SQL로 코딩할 수 있습니다(Python도 사용 가능하지만 일부 드문 메타프로그래밍 작업, 즉 파이프라인을 생성하는 코드를 작성하려는 경우에만 필요합니다).

DLT의 새로운 개발자 개선 사항을 통해 노트북에서 코드를 작성하고 실행 중인 파이프라인에 연결할 수 있습니다. 이 통합은 파이프라인 뷰와 이벤트 로그를 노트북으로 직접 가져와 간소화된 개발 경험을 제공합니다. 여기서 단일의 최적화된 인터페이스 내에서 파이프라인을 검증하고 실행할 수 있습니다 - 본질적으로 DLT를 위한 미니 IDE입니다.

NASA DLT

DLT 스트리밍 테이블

DLT는 모든 종류의 클라우드 오브젝트 스토리지나 메시지 브로커에서 데이터를 점진적으로 수집하기 위해 스트리밍 테이블을 사용합니다. 여기서는 SQL의 read_kafka() 함수를 사용하여 GCN Kafka 브로커에서 직접 데이터를 읽어 스트리밍 테이블로 가져옵니다.

이는 Kafka 브로커에서 데이터를 가져오는 파이프라인의 첫 번째 중요한 단계입니다. Kafka 브로커에서는 데이터가 고정된 보존 기간 동안만 유지되지만, 레이크하우스로 수집되면 데이터가 영구적으로 유지되어 모든 종류의 분석이나 머신 러닝에 사용될 수 있습니다.

Delta 데이터 형식 덕분에 실시간 데이터 스트림 수집이 가능합니다. Delta 테이블은 DWH 애플리케이션을 위한 고속 데이터 형식이며, Delta 테이블로 (또는 테이블에서) 동시에 데이터를 스트리밍할 수 있습니다.

Delta Live Tables를 사용하여 Kafka 브로커에서 데이터를 가져오는 코드는 다음과 같습니다:

CREATE OR REPLACE STREAMING TABLE raw_space_events AS
 SELECT offset, timestamp, value::string as msg
  FROM STREAM read_kafka(
   bootstrapServers => 'kafka.gcn.nasa.gov:9092',
   subscribe => 'gcn.classic.text.SWIFT_POINTDIR',
   startingOffsets => 'earliest',
   -- kafka connection details omitted for brevity
  );

간결성을 위해 위 예시에서 연결 설정 세부사항은 생략했습니다(전체 코드는 GitHub에 있습니다).

UI에서 Unity Catalog의 해당 테이블을 선택하고, Sample Data를 클릭하면 수집된 후 Kafka 메시지의 내용을 볼 수 있습니다:

Raw Space Events

보시다시피, 이 SQL은 각 줄에 키워드와 값이 포함된 전체 메시지를 하나의 엔터티로 가져옵니다..

참고: Swift 메시지에는 GRB와 같은 우주 현상을 관측하기 위해 위성이 언제 어떻게 위치를 조정하는지에 대한 세부 정보가 포함되어 있습니다.

앞서 언급한 제 Kafka 클라이언트처럼, 지구상에 있는 일부 대형 망원경과 소형 로봇 망원경들도 이러한 메시지를 수신합니다. 이들은 이벤트의 중요도에 따라 미리 정해진 관측 일정을 변경할지 여부를 결정합니다

 

위의 Kafka 메시지는 다음과 같이 해석할 수 있습니다:

이 공지는 2024년 5월 24일 목요일 23시 51분 21초(세계 표준시)에 발행되었습니다. 위성의 다음 지향 방향을 명시하고 있으며, 이는 하늘에서의 적경(RA)과 적위(Dec) 좌표로 특정됩니다. 두 좌표 모두 도(degree) 단위로 J2000 분점 기준으로 제공됩니다. 적경은 213.1104도, 적위는 +47.355도입니다. 이 방향에 대한 우주선의 롤 각도는 342.381도입니다. 위성은 하루 중 83760.00초(SOD)에 해당하는 23:16:00.00 UT에 이 새로운 위치로 선회할 예정입니다. 계획된 관측 시간은 60초입니다.

이 관측의 대상 이름은 "URAT1-687234652"이며, merit 값은 51.00입니다. merit 값은 대상의 우선순위를 나타내며, 특히 여러 잠재적 대상이 있을 때 관측을 계획하고 우선순위를 정하는 데 도움이 됩니다.

지연 시간과 빈도

위의 Kafka 설정에서 startingOffsets => 'earliest'를 사용하면, 파이프라인은 Kafka 토픽의 모든 기존 데이터를 소비(consume)합니다. 이 구성을 통해 새 메시지가 도착할 때까지 기다리지 않고 즉시 기존 데이터를 처리할 수 있습니다.

감마선 폭발은 특정 은하에서 대략 백만 년에 한 번 발생하는 희귀한 사건이지만, 관측 가능한 우주에 있는 수많은 은하로 인해 빈번하게 감지됩니다. 제 관찰에 따르면, 새로운 메시지는 일반적으로 10분에서 20분마다 도착하여 분석을 위한 꾸준한 데이터 스트림을 제공합니다.

스트리밍 데이터는 종종 낮은 지연 시간에만 관련된 것으로 오해받지만, 실제로는 도착하는 대로 무한한 메시지 흐름을 점진적으로 처리하는 것에 관한 것입니다. 이를 통해 실시간 인사이트와 의사 결정이 가능해집니다.

GCN 시나리오는 지연 시간의 극단적인 경우를 보여줍니다. 우리가 분석하고 있는 사건들은 수십억 년 전에 발생했고, 그 감마선이 이제야 우리에게 도달했습니다.

이는 여러분이 경력 동안 마주칠 수 있는 가장 극적인 이벤트 시간과 수집 시간 간의 지연 예시일 것입니다. 그럼에도 불구하고 GCN 시나리오는 여전히 훌륭한 스트리밍 데이터 사용 사례입니다!

복잡한 변환을 위한 DLT 구체화된 뷰

다음 단계에서는 이 Kafka 메시지의 Character Large OBject(CLOB)를 데이터의 의미를 파악할 수 있는 스키마로 변환해야 했습니다. 따라서 SQL에서 피벗 방식을 사용하여 먼저 각 메시지를 행으로 분할한 다음 각 행을 키/값 쌍으로 분할하는 SQL 솔루션이 필요했습니다.

Databricks Assistant와 데이터브릭스 playground의 자체 DBRX 대규모 언어 모델(LLM)을 활용했습니다. 최종 솔루션은 조금 더 복잡하며 전체 코드는 리포지토리에서 확인할 수 있지만, DLT 구체화된 뷰를 기반으로 한 기본 골격은 다음과 같습니다:

CREATE OR REPLACE MATERIALIZED VIEW split_events
-- Split Swift event message into individual rows
AS
 WITH
   -- Extract key-value pairs from raw events
   extracted_key_values AS (
     -- split lines and extract key-value pairs from LIVE.raw_space_events
     ...
   ),
   -- Pivot table to transform key-value pairs into columns
   pivot_table AS (
     -- pivot extracted_key_values into columns for specific keys
     ...
   )
 SELECT timestamp, TITLE, CAST(NOTICE_DATE AS TIMESTAMP) AS 
NOTICE_DATE, NOTICE_TYPE, NEXT_POINT_RA, NEXT_POINT_DEC, 
NEXT_POINT_ROLL, SLEW_TIME, SLEW_DATE, OBS_TIME, TGT_NAME, TGT_NUM, 
CAST(MERIT AS DECIMAL) AS MERIT, INST_MODES, SUN_POSTN, SUN_DIST, 
MOON_POSTN, MOON_DIST, MOON_ILLUM, GAL_COORDS, ECL_COORDS, COMMENTS
 FROM pivot_table

위의 접근 방식은 다음 스크린샷에서 보는 것처럼 각 메시지를 적절한 열로 나누는 구체화된 뷰를 사용합니다.

Split Events

Delta Live Tables의 구체화된 뷰는 반복적으로 수행해야 하는 복잡한 데이터 변환에 특히 유용합니다. 구체화된 뷰를 사용하면 더 빠르게 데이터를 분석하고 낮은 지연시간의 대시보드를 만들 수 있습니다.

코드 생성을 위한 Databricks Assistant

Databricks Assistant와 같은 도구는 복잡한 변환을 생성하는 데 매우 유용할 수 있습니다. 이러한 도구는 이러한 사용 사례에서 사용자의 SQL 기술(또는 적어도 제 기술!)을 쉽게 능가할 수 있습니다.

Databricks Assistant

전문가 팁: Databricks Assistant나 데이터브릭스 DBRX LLM과 같은 도우미는 솔루션을 찾는 데 도움을 줄 뿐만 아니라, 단순화된 데이터셋을 사용하여 솔루션을 단계별로 안내해 달라고 요청할 수도 있습니다. 개인적으로 저는 생성형 AI의 이러한 튜터링 기능이 코드 생성 기술보다 훨씬 더 인상적입니다!

AI/BI Genie로 초신성 데이터 분석하기

올해 Data + AI Summit에 참석하셨다면 AI/BI에 대해 많이 들어보셨을 것입니다. Databricks AI/BI는 조직의 모든 사람에게 분석과 인사이트를 대중화할 수 있도록 구축된 새로운 유형의 비즈니스 인텔리전스 제품입니다. 이는 Databricks SQL을 기반으로 구축된 두 가지 상호 보완적인 기능인 Genie와 대시보드로 구성되어 있습니다. AI/BI Genie는 데이터브릭스 플랫폼 내에서 데이터 분석과 시각화를 간소화하고 향상시키기 위해 설계된 강력한 도구입니다.

Genie의 핵심은 사용자가 데이터에 대해 질문하고 테이블이나 시각화의 형태로 답변을 받을 수 있는 자연어 인터페이스입니다. Genie는 데이터 인텔리전스 플랫폼에서 제공되는 풍부한 메타데이터와 통합 거버넌스 시스템인 Unity Catalog에서 제공되는 메타데이터를 활용하여 사용자 질문의 의도를 이해하는 머신 러닝 알고리즘에 정보를 제공합니다. 그러면 이러한 알고리즘이 사용자의 쿼리를 SQL로 변환하여 관련성 있고 정확한 답변을 생성합니다.

제가 가장 마음에 드는 점은 Genie의 투명성입니다: 생성된 SQL 코드를 블랙박스에 숨기지 않고 결과 뒤에 표시합니다.

DLT에서 데이터를 수집하고 변환하는 파이프라인을 구축한 후 스트리밍 테이블과 구체화된 뷰를 분석하기 시작할 수 있었습니다. 데이터를 더 잘 이해하기 위해 Genie에게 여러 가지 질문을 했습니다. 다음은 제가 탐색한 것의 작은 샘플입니다:

  • 지난 30일 동안 발생한 GRB 이벤트는 몇 건인가요?
  • 가장 오래된 이벤트는 무엇인가요?
  • 월요일에 발생한 이벤트는 몇 개인가요? (문맥을 기억합니다. 이벤트 수에 대해 이야기하고 있었고, 데이터 스트림에 시간적 조건을 적용하는 방법을 알고 있습니다.)
  • 하루 평균 몇 개가 발생했나요?
  • merit 값의 히스토그램을 보여주세요
  • merit 의 최대값은 얼마인가요?

얼마 전까지만 해도 “하루 평균”과 같은 질문은 복잡한 Spark, Kafka 또는 Flink 문을 사용하여 윈도우 함수로 코딩했을 것입니다. 이제는 간단한 영어로 할 수 있습니다!

마지막으로, 좌표를 사용하여 우주 이벤트의 2D 플롯을 만들었습니다. 좌표 데이터가 천체계에 중복 문자열을 사용하여 저장되어 있기 때문에 데이터를 필터링하고 추출하는 것이 복잡하므로 먼저 별도의 노트북에 구현했습니다. 원본 데이터는 다음 데이터 카탈로그의 스크린샷에서 확인할 수 있습니다:

Split Events ST

전문 용어, 논리, 특정 좌표계와 같은 개념에 대한 AI/BI의 이해를 높이기 위해 자연어 또는 샘플 쿼리로 지침을 제공할 수 있습니다. 그래서 저는 이 기능을 사용해 보았습니다. 저장된 문자열 데이터에서 부동 소수점 값을 검색하는 단일 명령를 AI/BI에 제공하고 그 예제를 전달했습니다.

흥미롭게도 저는 동료에게 설명하듯 AI/BI에게 작업을 설명하면서 자연스러운 대화 언어를 이해하는 시스템의 능력을 볼 수 있었습니다.

Swift Space

놀랍게도 Genie는 수동으로 코딩할 때 노트북 하나의 코드가 필요했던 전체 플롯을 손쉽게 다시 만들 수 있었습니다.

Genie

이는 자연어 명령어에서 복잡한 시각화를 생성하여 데이터 탐색의 접근성과 효율성을 높이는 Genie의 능력을 보여 줍니다.

요약

  • NASA의 GCN 네트워크는 모든 사람에게 놀라운 실시간 데이터를 제공합니다. 이 블로그에서는 초신성 데이터에 대해 자세히 살펴보았지만, 말 그대로 수백 가지의 다른 (카프카) 주제가 탐험을 기다리고 있습니다.
  • 데이터 스트림을 소비하는 자체 Kafka 클라이언트를 실행하고 데이터 인텔리전스 플랫폼을 살펴보거나 또는 오픈 소스 Apache Spark를 사용할 수 있도록 전체 코드를 제공했습니다.
  • 데이터 인텔리전스 플랫폼을 사용하면 SQL 명령 하나만 복사하여 붙여넣는 것만큼이나 쉽게 NASA 위성의 초신성 데이터에 액세스할 수 있습니다.
  • 데이터 엔지니어, 과학자, 분석가들은 read_kafka()를 사용하여 SQL에서 Kafka 데이터 스트림을 쉽게 수집할 수 있습니다.
  • AI/BI와 DLT는 스트리밍 세계에서 과소평가된 파워 커플입니다. 앞으로 훨씬 더 많이 보게 될 것입니다.
  • 일반적으로 복잡한 구문을 사용하여 Apache Kafka, Spark 또는 Flink로 구현되는 윈도우 방식의 스트림 처리를 Genie를 사용하면 크게 간소화할 수 있습니다. Genie 데이터룸에서 테이블을 탐색하면 '지난 한 달 동안' 또는 '월요일 평균'과 같은 시간 한정자를 포함한 자연어 쿼리를 사용하여 데이터 스트림을 쉽게 분석하고 이해할 수 있습니다.

자료

  • 이 블로그에 설명된 모든 솔루션은 GitHub에서 사용할 수 있습니다. 프로젝트에 액세스하려면 TMM 리포지토리 의 NASA-swift-genie를 클론하세요. 
  • 더 자세한 내용은 Data + AI Summit 의 제 세션 From Supernovas to LLMs를 시청하세요. 이 세션에서는 RAG with DBRX와 Llama with LangChain을 사용하여 36,000개의 NASA circular를 학습하는 복합 AI 애플리케이션의 데모가 포함되어 있습니다(미니 블로그를 보세요).
  • Data + AI Summit의 모든 재생 목록은 YouTube에서 확인할 수 있습니다. 예를 들어, Data Engineering and Streaming 그리고 Generative AI에 대한 목록을 보실 수 있습니다.

다음 단계

직접 경험하는 것만큼 좋은 것은 없습니다. 자신의 계정에서 예제를 실행해 보는 것을 추천합니다. 데이터브릭스는 무료로 체험해 볼 수 있습니다.

 

(번역: Youngkyong Ko)  Original Post

Databricks 무료로 시작하기

관련 포스트

모든 플랫폼 블로그 포스트 보기